欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

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

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

【文章标题】: 我的断点心得帮初学者进阶
【文章作者】: 书呆彭
【使用工具】: 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:
  
  下载
  
  
  
  我们用OD载入,bp GetDlgItemTextA,F9运行。点check,被OD断下了。看下堆栈窗口中给出的提示:
  
  

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功