﻿<?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++博客-逆向分析专栏-随笔分类-转载</title><link>http://www.cppblog.com/xunbu7/category/20297.html</link><description>内心的平静是一种修为，容易激动不是件好事。</description><language>zh-cn</language><lastBuildDate>Sat, 04 May 2013 14:23:25 GMT</lastBuildDate><pubDate>Sat, 04 May 2013 14:23:25 GMT</pubDate><ttl>60</ttl><item><title>多种脱壳方法总结</title><link>http://www.cppblog.com/xunbu7/archive/2013/03/13/198385.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Wed, 13 Mar 2013 08:05:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2013/03/13/198385.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/198385.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2013/03/13/198385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/198385.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/198385.html</trackback:ping><description><![CDATA[<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">&nbsp;一.脱壳基础知识要点</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1.PUSHAD :（压栈） 代表程序的入口点</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2.POPAD :（出栈） 代表程序的出口点，与PUSHAD想对应.看到这个,就说明快到OEP了.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3.OEP:程序的入口点,软件加壳就是隐藏OEP.而我们脱壳就是为了找OEP.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br />&nbsp;二.脱壳调试过程中辨认快到OEP的简单方法</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">下面二个条件是快到OEP的共同现象:</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">若出现下面情况时,说明OEP就要到了:</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1. OD跟踪过程中如果发现:<br />popad<span class="Apple-converted-space">&nbsp;</span><br />popfd<span class="Apple-converted-space">&nbsp;</span><br />或<br />popad</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2.同时,紧接着,有retn ,jmp等其它跳转指令,发生跨段跳跃时.<br />说明OEP马上到了.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"></p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br />三.脱壳必需牢记的要领</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1.单步往前走,不要让程序向上走,遇到向上跳时,在下一句按F4,运行到所选.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2.刚载入程序,在附近就call时,我们按F7跟进去.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3.若跟踪时,运行某个call程序就运行时,这个call也用F7进入.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">4.在跟踪时,出现比如 jmp XXXXXX 或者 JE XXXXXX 或者有RETN同时发生大跨段跳转时,说明很快就到OEP了.<br /><br /><br /></p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"></p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">四.常用脱壳方法总结</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">------------------<br />方法一:单步跟踪法<br />------------------<br />介绍:这是最通用的方法,对于未知壳,基本都用这种方法,这种方法过程比较麻烦,要一步一步的跟踪分析,要有一定的耐心.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1.用OD载入,选"不分析代码"</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2.单步向下跟踪按F8，实现向下的跳.不让程序往回跳.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3.遇到程序往回跳的（包括循环），我们在下一句代码处按F4（或者右健单击代码，选择断点&#8212;&#8212;&gt;运行到所选）</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">4.如果刚载入程序，在附近就有一个CALL的，我们就F7跟进去，不然程序很容易运行.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">5.在跟踪的时候，如果运行到某个CALL程序就运行的，就在这个CALL中F7进入.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">6.一般遇到很大的跳转（跨段跳），比如 jmp XXXXXX 或 JE XXXXXX 或有RETN的一般很快就会到程序的OEP。</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br />-----------------<br />方法二:ESP定律法<br />-----------------<br />介绍: 这种方法可以脱大部的压缩壳和少数加密壳,操作起来比较简单,脱壳速度也相对比较快.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1.开始就点F8向下走，注意观察OD右上角的寄存器中ESP有没突现（变成红色）</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2.在命令行下：dd XXXXXXXX(指在当前代码中的ESP地址，或者hr<br />XXXXXXXX)，按回车！</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3.选中下断的地址，断点---&gt;硬件访问---&gt;WORD断点。</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">4.按一下F9运行程序，直接来到了跳转处，按下F8向下走，就到达程序OEP。</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">-----------------<br />方法三:内存镜像法<br />-----------------<br />介绍:也是一种比较好用的脱壳方法,大部分的压缩壳和加密壳用内存镜像法能快速脱掉.非常实用.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1.用OD打开,设置选项&#8212;&#8212;调试选项&#8212;&#8212;异常,忽略所有异常(也就是把里面的忽略全部&#8730;上),然后CTRL+F2重载下程序！</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2.按ALT+M,打开内存镜象，找到程序的第一个.rsrc.按F2下断点，然后按SHIFT+F9运行到断点.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">3.接着再按ALT+M,打开内存镜象，找到程序的第一个.rsrc.上面的.CODE，按F2下断点！然后按SHIFT+F9，直接到达程序OEP！</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">----------------<br />方法四:一步到OEP<br />----------------<br />介绍:这是一种巧方法,脱壳速度最快,前提是要知道这个壳的特征,利用这种壳的共性快速找到程序的OEP.这种方法只用于少数壳.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">1.开始按Ctrl+F,输入：popad,然后按下F2下断，按F9运行到此处.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">2.很快来到大跳转,按F8向下走,来到OEP.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><br />----------------------<br />方法五:最后一次异常法:<br />----------------------<br />介绍:这种方法一般用于加密壳,这是脱加密壳的一种通用方法.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">第一步:用OD打开程序,点击选项&#8212;&#8212;调试选项&#8212;&#8212;异常，把里面的&#8730;全部去掉！CTRL+F2重载下程序.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">第二步:接着我们按SHIFT+F9,直到程序运行,记下从开始按SHIFT+F9到程序运行的次数n.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">第三步:重载程序,再按SHIFT+F9,这次按的次数为上次让程序运行时的次数的n-1次.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">第四步:此时观察OD的右下角有一个"SE 句柄",这时我们按CTRL+G，输入SE 句柄前的地址！来到这个地址.</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">第五步:在这里,按F2下断点！然后按SHIFT+F9来到断点处！</p>
<p style="padding-bottom: 0px; widows: 2; text-transform: none; background-color: rgb(252,248,233); text-indent: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 12px/24px tahoma, helvetica, arial; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(69,69,69); word-spacing: 0px; padding-top: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px">第六步:这时候我们已经跳过了所有异常,然后去掉断点，按F8慢慢向下跟踪很快就到达OEP了.</p><img src ="http://www.cppblog.com/xunbu7/aggbug/198385.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-03-13 16:05 <a href="http://www.cppblog.com/xunbu7/archive/2013/03/13/198385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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>反调试技巧总结-原理和实现</title><link>http://www.cppblog.com/xunbu7/archive/2013/01/05/196963.html</link><dc:creator>寻步</dc:creator><author>寻步</author><pubDate>Sat, 05 Jan 2013 02:59:00 GMT</pubDate><guid>http://www.cppblog.com/xunbu7/archive/2013/01/05/196963.html</guid><wfw:comment>http://www.cppblog.com/xunbu7/comments/196963.html</wfw:comment><comments>http://www.cppblog.com/xunbu7/archive/2013/01/05/196963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xunbu7/comments/commentRss/196963.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xunbu7/services/trackbacks/196963.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 摘自：http://www.cnblogs.com/huhu0013/archive/2011/07/05/2098358.html一、 前言&nbsp;&nbsp;&nbsp; 前段学习反调试和vc，写了antidebug-tester，经常会收到message希望交流或索要实现代码，我都没有回复。其实代码已经在编程版提供了1个版本，另其多是vc内嵌asm写的，对cracker而言，只要反下就知...&nbsp;&nbsp;<a href='http://www.cppblog.com/xunbu7/archive/2013/01/05/196963.html'>阅读全文</a><img src ="http://www.cppblog.com/xunbu7/aggbug/196963.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-05 10:59 <a href="http://www.cppblog.com/xunbu7/archive/2013/01/05/196963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>