我的断点心得帮初学者进阶.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
我的断点心得帮初学者进阶

我的断点心得帮初学者进阶 【文章标题】:?我的断点心得帮初学者进阶 【文章作者】:?书呆彭 【使用工具】:?OD,MSDN,VC 【作者声明】:?本文完全是个人的心得与体会,看到许多初学者还在苦苦寻找“字符串”和“关键跳”,特写此文,其中错误和不当之处,欢迎大家多多批评指正。 -------------------8------------------------------------------------------------- 【详细过程】 ?? ??在正文开始之前,先说几句。 ?? ??要写一篇文章是很累的,要打字,为了效果好还要截图、排版等。 ?? ??而且写这些东西是没有报酬的,属于义务劳动。 ?? ??我只希望能对出学者有所帮助,为论坛做点贡献。 ?? ??我也希望读者能仔细地把文章看完。 ?? ??看完后有什么意见就说什么。 ?? ??我不希望看的人随便把网页往下一拉,顺手回复个“好”,“顶”,“支持”之类的。 ?? ??对了,还有“先顶后看”的。 ?? ??我觉得,要先看过了,再回复。有话要说就回,没什么说的可以不回。 ?? ??我的意思就是,技术不同于灌水。 ?? ?? ??----------------8------------------------------------------------------------ ?? ?? ??开始。 ?? ??本文不讲脱壳,不讲算法,也不讲anti-anti,主要讲一讲如何用OD定位到一个程序的关键代码位置。 ?? ?? ??由于解密技术的发展,带动了软件加密的发展。现在已经很难像两年前,或者更早,那样,用“W32Dsm-参考-字符串参考”的方法来定位程序的关键代码点了。 ?? ??但是还是有很多人抱着“字符串”这个“法宝”不放。不愿意,或者也可能没有找到方法,去学习一下更有效的定位关键代码的动态方法:断点。 ?? ??甚至有时根据别人的指点用API断点已经到达关键代码了,却又习惯地去寻找“字符串”。 ?? ?? ??本人不才,算不上什么高手,但是我在逆向研究程序时,几乎没有使用过字符串的方法来定位关键代码。 ?? ??我记得两年前,很多流行的破文中都说,先静态,后动态。 ?? ??但我恰恰相反。在跟踪代码时我总是先动态定位代码,然后再阅读静态的反汇编结果。 ?? ??并且,在分析代码时,我常常是“动静结合,先猜后验证”的方法,以前我写过一个CRACKME的分析,讲过这个,就不说了。 ?? ?? ?? ?? ??断点,BreakPoint,顾名思义,就是要正在运行的程序break的点。在Intel?x86体系中,大家都知道断点是一种异常,然后通过异常处理的机制,让调试器获得控制权。 ?? ??下面我的描述,总是假设: ?? ??1.程序代码没有被加密,通常就是指加壳。 ?? ??2.程序中没有anti-debug ?? ??3.程序是本机代码,不是虚拟机伪指令,如VB ?? ?? ?? ?? ??首先,什么是关键代码? ?? ??我们知道一个完整的程序,所包含的代码是海量的,我们虽然有反汇编工具,但不可能把所有的代码都去看一下。 ?? ??我们所说的关键代码,通常就是指包含有注册算法和有效性验证的程序代码。 ?? ??我们下断点的目的,是找到关键代码“附近”的代码,从而定位到最终的关键代码。 ?? ?? ??通常,关键代码都具有这样的结构: ?? ??1.读取用户的输入 ?? ??2.经过一定的计算、验证 ?? ??3.显示(或不显示,仅存储)验证结果。 ?? ??其中,2是“真正关键”的代码,而1和3就是我说的“附近”的代码。 ?? ?? ??在Windows下的应用程序,2完全自主的,我们没办法,但1和3(也就是输入和输出)无论如何也必须通过某种形式的操作系统调用才能实现。所以,API断点几乎是通用的办法。 ?? ??而难点,就在于我们下断点的技巧。 ?? ?? ??先说思路1,从输入角度来下。学过一点C语言的人知道,在控制台下,获取用户输入是从stdin文件中读取的。而win32窗口应用程序怎么获得用户输入呢? ?? ??我们最常见的情况,是从编辑框(Edit)控件中输入信息。 ?? ??这种情况下程序要获取用户的输入,也就是获取编辑框的文字。通过什么途径?这里就需要一些编程的基础知识了。(所以我总强调编程是逆向的基础) ?? ??GetWindowText()和GetDlgItemText()是最常用的两个API。至于A还是W,试试就知道了。 ??----------------8------------------------------------------------------------ ?? ??例1: ?? ??下载 ??

文档评论(0)

zijingling + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档