﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-逆向分析专栏-随笔分类-Reverse</title><link>http://www.cppblog.com/xunbu7/category/20250.html</link><description>内心的平静是一种修为，容易激动不是件好事。</description><language>zh-cn</language><lastBuildDate>Fri, 25 Jan 2013 14:23:38 GMT</lastBuildDate><pubDate>Fri, 25 Jan 2013 14:23:38 GMT</pubDate><ttl>60</ttl><item><title>OD被Anti的原因分析及应对之道(转载)</title><link>http://www.cppblog.com/xunbu7/archive/2013/01/07/197056.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Mon, 07 Jan 2013 02:10:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2013/01/07/197056.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/197056.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2013/01/07/197056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/197056.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/197056.html</trackback:ping><description><![CDATA[<font color="#333333">标 题:</font><font color="#000000"> 【原创】OD被Anti的原因分析及应对之道</font><font color="#666666"><br /><font color="#333333">作 者:</font> <font color="#000000">tangjiutao</font><br /><font color="#333333">时 间:</font> 2009-12-02,22:21:56<br /><font color="#333333">链 接:</font> http://bbs.pediy.com/showthread.php?t=102366<br /></font><br /><!-- google_ad_section_start  -->本文链接：http://bbs.pediy.com/showthread.php?t=102366<br />OD载入程序就自动退出是比较恼人的，还没开始调试呢就退出了，这可让人如何是好。初学破解的人一定会遇到这个问题,怎样解决呢，网上虽然有零星的介绍但都不全面，以下是我总结的一些，希望能对各位初学者有所帮助。<br />（比如Peid、FI查壳查不到，OD一载入就退出，这极有可能是VMProtect的保护（虚拟机保护），用EXEinfo可以查出来一些版本的VMP，如果有这个提示那就更确定无疑了&#8220;A&nbsp;debugger&nbsp;has&nbsp;been&nbsp;found&nbsp;running&nbsp;in&nbsp;your&nbsp;system.Please,&nbsp;unload&nbsp;it&nbsp;from&nbsp;memory&nbsp;and&nbsp;restart&nbsp;your&nbsp;program&#8221;。）<br /><strong>1.更换几个OD试试，OllyICE、Shadow、加强版等</strong><br /><strong>2.用附加的方式加载程序，文件--&gt;附加,能解决很多问题</strong><br /><strong>3.OD目录下，将475K&nbsp;的DbgHelp.dll文件换成近1M大小的DbgHelp.dll文件，475K的有溢出漏洞，这条比较关键</strong><br /><strong>4.使用StrongOD插件，（StrongOD+原版OD试试），这条比较关键</strong><br />5.StrongOD中选择CreateAsRestrict<br />6.尝试命令bp&nbsp;ExitProcess，看能否发现什么线索<br />7.改变ollydbg.ini中的驱动名称，修改版的OD不需要自己改&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />DriverName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;驱动文件名，设备对象名<br />DriverKey&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和驱动通信的key<br />HideWindow&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;是否隐藏窗口，1为隐藏，0为不隐藏<br />HideProcess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否隐藏od进程，1为隐藏，0为不隐藏<br />ProtectProcess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否隐藏保护Od进程，1为保护，0为不保护<br />8.改OD窗体类名，用的修改版的话一般都改过了，不需要自己再改<br />方法如下：<br />主窗体类名:<br />引用:<br />VA:004B7218<br />Offset:000B6018<br />各子窗体类名：<br />引用:<br />VA:004B565B&nbsp;~&nbsp;004B568A<br />Offset:000B445B&nbsp;~&nbsp;000B448A<br />改成任意，可以过GetWindow检测<br /><strong>9.手动修改程序&#8220;导出表&#8221;中的&#8220;函数名数目&#8221;值</strong>，上面方法不管用再试试它<br />方法：使用&#8220;LordPE&#8221;打开要编辑的PE程序，然后依次选择[目录]-&gt;[导出表对应的&#8220;..&#8221;按钮]，把&#8220;函数名数目&#8221;的值减1，并点击&#8220;保存&#8221;按钮，就OK了。为了好看些，也可以把&#8220;函数数目&#8221;和&#8220;函数名数目&#8221;的值都同时减1并保存，效果一样。<br />&nbsp;&nbsp;&nbsp;解释：一般情况下EXE不会加&#8220;导出表&#8221;，如果加了，就应该给出所导出的API函数。当我们打开这类PE程序(EXE版)时，会发现它存在&#8220;导出表&#8221;，但&#8220;导出表&#8221;中并没有导出的API函数。同时&#8220;函数数目&#8221;和&#8220;函数名数目&#8221;的值都比原PE程序设置的值大了1(如：EXE版&#8220;导出表&#8221;列表中显示了0个导出的API函数，壳将其&#8220;函数数目&#8221;和&#8220;函数名数目&#8221;的值都设置成了1；DLL版&#8220;导出表&#8221;列表中显示了0xD个导出的API函数，壳将其&#8220;函数数目&#8221;和&#8220;函数名数目&#8221;的值都设置成了0xE。)。所以我们将其减1，就OK了。被修改过的PE程序，可以正常运行，不会有任何影响。<br /><br />&nbsp;这只是我的一点总结，附加方式加载、替换DBGHELP.DLL、使用StrongOD插件和修改导出表函数名数目的方法是可行的，能够解决一些问题。当然这些方法可能并不全面。<br /><br /><strong>ANTI-OD原因解读：</strong><br />&nbsp;概括来说：TLS回调函数在入口点之前执行，并进行了ANTI-OD的操作.<br />&nbsp;具体请看：TLS数据初始化和TLS回调函数都会在入口点之前执行，也就是说TLS是程序最开始运行的地方，因此可以在这里防止ANTI-OD的代码，检测并关闭OD。<br />&nbsp;应对方法：<br />&nbsp;&nbsp;默认情况下OllyDbg载入程序将会暂停在入口点，应该配置一下OllyDbg使其在TLS回调被调用之前中断在实际的loader。<br />&nbsp;&nbsp;通过&#8220;选项-&gt;调试选项-&gt;事件-&gt;第一次中断于-&gt;系统断点&#8221;来设置中断于ntdll.dll内的实际loader代码。这样设置以后，OllyDbg将会中断在位于执行TLS回调的ntdll!LdrpRunInitializeRoutines()之前的ntdll!_LdrpInitializeProcess()，这时就可以在回调例程中下断并跟踪了。例如：在内存映像的.text代码段上设置内存访问断点，就可以断在TLS回调函数里。<br /><br />更多TLS内容请看我的两篇博文：<br />TLS回调函数，Anti-od原理分析：<a href="http://hi.baidu.com/tjt999/blog/item/1e9c4b49496c222808f7eff1.html" target="_blank"><font color="#000000">http://hi.baidu.com/tjt999/blog/item...808f7eff1.html</font></a><br />TLS回调函数，Anti-od实例：&nbsp;<a href="http://hi.baidu.com/tjt999/blog/item/13e7212e55e04c3f359bf7f3.html" target="_blank"><font color="#000000">http://hi.baidu.com/tjt999/blog/item...f359bf7f3.html</font></a><br /><br />更多反调试知识请看《脱壳的艺术》和我的<br />《各种反调试技术原理与实例》：&nbsp;<a href="http://bbs.pediy.com/showthread.php?t=106143" target="_blank"><font color="#000000">http://bbs.pediy.com/showthread.php?t=106143</font></a><br />如需交流请进群：1684360<br /><br />实例代码：程序见附件，用原版OD测试，参考了某位大虾的代码。<br />.386<br />.model&nbsp;&nbsp;&nbsp;flat,stdcall<br />option&nbsp;&nbsp;&nbsp;casemap:none<br />include&nbsp;windows.inc<br />include&nbsp;user32.inc<br />include&nbsp;kernel32.inc<br />includelib&nbsp;user32.lib<br />includelib&nbsp;kernel32.lib<br /><br />.data?<br />dwTLS_Index&nbsp;dd&nbsp;&nbsp;?<br /><br />OPTION&nbsp;&nbsp;&nbsp;&nbsp;DOTNAME<br />;;&nbsp;定义一个TLS节&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />.<span class="highlight"><strong><font color="#ff0000">tls</font></strong></span>&nbsp;&nbsp;SEGMENT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />TLS_Start&nbsp;LABEL&nbsp;&nbsp;DWORD<br />&nbsp;dd&nbsp;&nbsp;&nbsp;&nbsp;0100h&nbsp;&nbsp;&nbsp;&nbsp;dup&nbsp;("slt.")<br />TLS_End&nbsp;&nbsp;&nbsp;LABEL&nbsp;&nbsp;DWORD<br />.<span class="highlight"><strong><font color="#ff0000">tls</font></strong></span>&nbsp;&nbsp;&nbsp;ENDS<br />OPTION&nbsp;&nbsp;&nbsp;&nbsp;NODOTNAME<br /><br />.data<br />TLS_CallBackStart&nbsp;&nbsp;dd&nbsp;&nbsp;TlsCallBack0<br />TLS_CallBackEnd&nbsp;&nbsp;&nbsp;&nbsp;dd&nbsp;&nbsp;0<br />szTitle&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;&nbsp;"Hello&nbsp;TLS",0<br />szInTls&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;&nbsp;"我在TLS里",0<br />szInNormal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;&nbsp;"我在正常代码内",0<br />szClassName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db&nbsp;&nbsp;"ollydbg"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;OD&nbsp;类名<br />;这里需要注意的是，必须要将此结构声明为PUBLIC,用于让连接器连接到指定的位置，<br />;其次结构名必须为_<span class="highlight"><strong><font color="#ff0000">tls</font></strong></span>_uesd这是微软的一个规定。编译器引入的位置名称也如此。<br />PUBLIC&nbsp;_<span class="highlight"><strong><font color="#ff0000">tls</font></strong></span>_used<br />_<span class="highlight"><strong><font color="#ff0000">tls</font></strong></span>_used&nbsp;IMAGE_TLS_DIRECTORY&nbsp;&lt;TLS_Start,&nbsp;TLS_End,&nbsp;dwTLS_Index,&nbsp;TLS_CallBackStart,&nbsp;0,&nbsp;?&gt;<br /><br />.code<br />;***************************************************************<br />;;&nbsp;TLS的回调函数<br />TlsCallBack0&nbsp;proc&nbsp;Dllhandle:LPVOID,dwReason:DWORD,lpvReserved:LPVOID&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,dwReason&nbsp;;判断dwReason发生的条件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,DLL_PROCESS_ATTACH&nbsp;&nbsp;;&nbsp;在进行加载时被调用<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jnz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExitTlsCallBack0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;&nbsp;FindWindow,addr&nbsp;szClassName,NULL&nbsp;&nbsp;;通过类名进行检测<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.if&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;找到<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;&nbsp;&nbsp;&nbsp;SendMessage,eax,WM_CLOSE,NULL,NULL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.endif<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;&nbsp;MessageBox,NULL,addr&nbsp;szInTls,addr&nbsp;szTitle,MB_OK<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dword&nbsp;ptr[TLS_Start],0&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,eax<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax<br />ExitTlsCallBack0:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret<br />TlsCallBack0&nbsp;&nbsp;&nbsp;ENDP<br />;****************************************************************<br />Start:<br />&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;&nbsp;&nbsp;MessageBox,NULL,addr&nbsp;szInNormal,addr&nbsp;szTitle,MB_OK<br />&nbsp;&nbsp;&nbsp;&nbsp;invoke&nbsp;&nbsp;&nbsp;ExitProcess,&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;Start<br /><br /><br />参考文献：<br />&nbsp;&nbsp;&nbsp;http://www.unpack.cn/viewthread.php?tid=35013&amp;extra=page%3D1<br /><img src ="http://www.cppblog.com/xunbu7/aggbug/197056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2013-01-07 10:10 <a href="http://www.cppblog.com/xunbu7/archive/2013/01/07/197056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2013，年计划</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/29/196800.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Sat, 29 Dec 2012 07:07:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/29/196800.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196800.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/29/196800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196800.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196800.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<ol><li><strong style="color: #008000">Windows核心编程书(思想)</strong></li><li><strong style="color: #008000">C++、汇编(语言)</strong></li><li><strong style="color: #008000">OD、IDA验证思想(工具)</strong></li></ol>
<p><br />&nbsp;</p><img src ="http://www.cppblog.com/xunbu7/aggbug/196800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-29 15:07 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/29/196800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>遍历输入表的简单逆向</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/28/196747.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Fri, 28 Dec 2012 09:01:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/28/196747.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196747.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/28/196747.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196747.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196747.html</trackback:ping><description><![CDATA[<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;main(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;argc,&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;argv[])<br /><img id="Codehighlighter1_33_974_Open_Image" onclick="this.style.display='none'; Codehighlighter1_33_974_Open_Text.style.display='none'; Codehighlighter1_33_974_Closed_Image.style.display='inline'; Codehighlighter1_33_974_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_33_974_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_33_974_Closed_Text.style.display='none'; Codehighlighter1_33_974_Open_Image.style.display='inline'; Codehighlighter1_33_974_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_33_974_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_33_974_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;HMODULE&nbsp;&nbsp;hMod&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;GetModuleHandle(NULL);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;IMAGE_DOS_HEADER</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pDosHeader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IMAGE_DOS_HEADER</span><span style="color: #000000">*</span><span style="color: #000000">)hMod;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;IMAGE_OPTIONAL_HEADER</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pOptHeader&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IMAGE_OPTIONAL_HEADER</span><span style="color: #000000">*</span><span style="color: #000000">)((BYTE</span><span style="color: #000000">*</span><span style="color: #000000">)hMod</span><span style="color: #000000">+</span><span style="color: #000000">pDosHeader</span><span style="color: #000000">-&gt;</span><span style="color: #000000">e_lfanew</span><span style="color: #000000">+</span><span style="color: #000000">24</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;IMAGE_IMPORT_DESCRIPTOR</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pImportDesc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IMAGE_IMPORT_DESCRIPTOR</span><span style="color: #000000">*</span><span style="color: #000000">)((BYTE</span><span style="color: #000000">*</span><span style="color: #000000">)hMod</span><span style="color: #000000">+</span><span style="color: #000000">pOptHeader</span><span style="color: #000000">-&gt;</span><span style="color: #000000">DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(pImportDesc</span><span style="color: #000000">-&gt;</span><span style="color: #000000">FirstThunk)<br /><img id="Codehighlighter1_418_947_Open_Image" onclick="this.style.display='none'; Codehighlighter1_418_947_Open_Text.style.display='none'; Codehighlighter1_418_947_Closed_Image.style.display='inline'; Codehighlighter1_418_947_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_418_947_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_418_947_Closed_Text.style.display='none'; Codehighlighter1_418_947_Open_Image.style.display='inline'; Codehighlighter1_418_947_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_418_947_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_418_947_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszDllName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">)((BYTE</span><span style="color: #000000">*</span><span style="color: #000000">)hMod</span><span style="color: #000000">+</span><span style="color: #000000">pImportDesc</span><span style="color: #000000">-&gt;</span><span style="color: #000000">Name);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">\nModule&nbsp;Name：%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,pszDllName);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMAGE_THUNK_DATA</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pThunk&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IMAGE_THUNK_DATA</span><span style="color: #000000">*</span><span style="color: #000000">)((BYTE</span><span style="color: #000000">*</span><span style="color: #000000">)hMod</span><span style="color: #000000">+</span><span style="color: #000000">pImportDesc</span><span style="color: #000000">-&gt;</span><span style="color: #000000">OriginalFirstThunk);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(pThunk</span><span style="color: #000000">-&gt;</span><span style="color: #000000">u1.Function)<br /><img id="Codehighlighter1_667_927_Open_Image" onclick="this.style.display='none'; Codehighlighter1_667_927_Open_Text.style.display='none'; Codehighlighter1_667_927_Closed_Image.style.display='inline'; Codehighlighter1_667_927_Closed_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_667_927_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_667_927_Closed_Text.style.display='none'; Codehighlighter1_667_927_Open_Image.style.display='inline'; Codehighlighter1_667_927_Open_Text.style.display='inline';" align="top" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_667_927_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_667_927_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;pszFunName&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">char</span><span style="color: #000000">*</span><span style="color: #000000">)((BYTE</span><span style="color: #000000">*</span><span style="color: #000000">)hMod</span><span style="color: #000000">+</span><span style="color: #000000">(DWORD)pThunk</span><span style="color: #000000">-&gt;</span><span style="color: #000000">u1.AddressOfData</span><span style="color: #000000">+</span><span style="color: #000000">2</span><span style="color: #000000">);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDWORD&nbsp;lpAddr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(DWORD</span><span style="color: #000000">*</span><span style="color: #000000">)((BYTE</span><span style="color: #000000">*</span><span style="color: #000000">)hMod</span><span style="color: #000000">+</span><span style="color: #000000">pImportDesc</span><span style="color: #000000">-&gt;</span><span style="color: #000000">FirstThunk)</span><span style="color: #000000">+</span><span style="color: #000000">n;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Fuction&nbsp;Name：%-27s,</span><span style="color: #000000">"</span><span style="color: #000000">,pszFunName);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">Fuction&nbsp;Address：%X\n</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">*</span><span style="color: #000000">lpAddr);<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n</span><span style="color: #000000">++</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pThunk</span><span style="color: #000000">++</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pImportDesc</span><span style="color: #000000">++</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br />得到输入表地址：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/xunbu7/QQ截图20121228170123.jpg" width="684" longdesc="" height="422" /><br /><br />后面的两个循环：<br /><img border="0" alt="" src="http://www.cppblog.com/images/cppblog_com/xunbu7/QQ截图20121228165826.jpg" width="761" longdesc="" height="794" /><img src ="http://www.cppblog.com/xunbu7/aggbug/196747.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-28 17:01 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/28/196747.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CE辅助OD分析外挂</title><link>http://www.cppblog.com/xunbu7/archive/2012/12/24/196568.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Mon, 24 Dec 2012 08:47:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2012/12/24/196568.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196568.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2012/12/24/196568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196568.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196568.html</trackback:ping><description><![CDATA[1.同一个按钮，挂机和取消挂机是两种状态，应该有一个标志位做判断。这里，挂机的时候标志位为1，取消挂机时，标志位为0。<br />&nbsp;&nbsp;&nbsp;用CE进行反复搜索，直到找到标志位的地址。<br />2.用OD挂接游戏，在标志位地址处下内存访问(写)断点，按挂机按钮断下。此处来到了外挂的代码领空，上下文就是相关的功能代码。 <img src ="http://www.cppblog.com/xunbu7/aggbug/196568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xunbu7/" target="_blank">寻步</a> 2012-12-24 16:47 <a href="http://www.cppblog.com/xunbu7/archive/2012/12/24/196568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>