逆向分析入门

来源:互联网 发布:中国人长相 知乎 编辑:程序博客网 时间:2024/06/05 08:11

逆向分析的应用领域

  1. 软件病毒行为特征的分析,通过分析病毒的特征信息,更好地进行反病毒软件的编写。
  2. 闭源软件内部算法的理解分析,进行软件行为的模拟,优秀算法设计思路学习和借鉴。
  3. 各类软件的破解,去除各类软件的限制(屌丝能用各种高大上的商业软件)。
  4. 解密软件加密算法,解密各类加密文件。
  5. 分析其游戏软件的算法设计,进行各类游戏外挂的设计。
  6. 在没有源码的情况下,对现有软件进行直接的修改,从而扩展其功能,个性化设计。
  7. 分析网络数据包格式,模拟发送网络数据包。

借用网上的一段话:


首先,逆向分析是考验人耐性的事情,如果你没有耐性可能很难出结果,往往一个大点的系统就可能需要几个月的时间,上年也有可能,所以耐性是第一。

其次,分析过程中往往觉得已经到尽头,无法再分析下去而退缩,但成功可能离你也许不远了,你需要沉着冷静,因为任何东西都是可能被逆向的,源码已经被编译成汇编代码后,在汇编代码前,代码量已经是成几何量倍增,而且大量的寄存器和指令,往往容易混淆,所以,你需要一个稳重的性格更好

再则,需要一些基本知识,汇编是必须要掌握的,其次其他高级语言如:C++、pascal、basic等能掌握更好,至少应该精通一门,往往分析过程中不仅仅是汇编指令,更多的是在跟系统打交道,软件中会用到各类知识,winapi、COM、消息、多线程、内存管理、进程等等,对系统的了解更有利于你进行下一步的分析,所以知识全面更加有利于分析。当然,知识需要积累,积累需要过程和毅力,需要时间如果你愿意在这个方面发展,那么你需要坚韧的毅力。逆向分析过程中,一个重要的东西就是注释,我们在C++中编写软件的时候并不需要写太多的注释,因为我们通过函数名或者变量名都能辨别出意义,但是逆向分析中,你看到的是汇编代码,基本都是寄存器和指令的集合,那么注释就显得非常非常的重要,一定要多写注释,而且有可能注释会反复修改,因为你有可能第一次分析一段汇编代码后的意义并不正确,分析多次后就会推翻前面下的定义,又会写入新的意义,不用怕你的注释会错误,就怕你不写,IDA和OD都有很好的注释和书签的管理功能,这将大大有利于我们的分析。

最后,你需要有一个OPEN的思想,不要局限于一个点,要从大的点入手,最好能模块化这些汇编代码,最后把这些模块集合在一起后,就是一套完整的思路了。

人的潜力是无限的,没有触发的时候可能你自己都不相信,但所有的一切都需要积累,世上没有不劳而获。


逆向分析前期学习

  1. 首先建议学习几门语言;

    • 汇编
    • C++
    • Python
      他们一个比一个抽象.C++里的编程范型是比较多的,而python是另一个程度的抽象.这三门语言,差不多可以代表现今发挥了巨大作用的编程语言了.
  2. 逆向的直接基础知识,推荐几本书:

    • Intel 微处理器.
    • Windows环境下32位汇编语言程序设计
    • WindowsPE权威指南
    • C++反汇编与逆向分析技术揭秘
    • 加密与解密第三版
    • IDA Pro权威指南
  3. 再掌握几个工具:

    • 静态反汇编工具: IDA Pro
    • 动态反汇编工具: ollydbg/x64dbg
    • Windows内核调试工具: windbg
  4. 各类插件的使用

    • 壳类插件
    • 反调试插件
    • 反dump插件

如果想要在软件逆向有更多的发展,我认为研究理论是必须的了.首先我认为应该研究的理论是编译理论.编译理论是理论与实践结合的非常紧密的,也很吸引人.之后,自然是研究反编译理论.这个研究的资料比较少,看雪上有一些,再者自己查论文文献了.

首先我们要知道即使是一个简单的Win32窗体的Hello World, 反汇编出来的代码量也是相当惊人的,而我们也没有必要分析这个程序每一个语句,我们要把关注点放在值得关注的地方,尤其是分支判断处,所以分析程序的第一步往往是找到关键代码。

查找关键代码常用的方法是:

  • 对关键的API下断点,一般能找到诸如GetWindowText之类的API就能直接定位到你输入key在内存中的位置;
  • 搜索程序中的字符串(提示成功/失败的字符串),一般这个会定位到判断你的key是否正确的条件分支处。
  • 在内存中搜索你输入的key,用内存断点定位访问key的代码。

接下来对关键点代码进行分析,这是最令人头痛的一步了,乍眼看去到处都是mov eax,ecx , lea esi dword ptr ds:[xxx]什么的,确实不太直观,秘诀:


多练


软件破解流程

一般软件破解的流程:拿到一个软件先别接着马上用 OllyDBG 调试,先运行一下,有帮助文档的最好先看一下帮助,熟悉一下软件的使用方法,再看看注册的方式。如果是序列号方式可以先输个假的来试一下,看看有什么反应,也给我们破解留下一些有用的线索。如果没有输入注册码的地方,要考虑一下是不是读取注册表或 Key 文件(一般称 keyfile,就是程序读取一个文件中的内容来判断是否注册),这些可以用其它工具来辅助分析。如果这些都不是,原程序只是一个功能不全的试用版,那要注册为正式版本就要自己来写代码完善了。


REFERENCE
1. 学习反汇编、程序逆向分析等需要掌握哪些知识?
2. 逆向工厂(一):从hello world开始
3. 如何快速读懂反汇编的汇编代码?
4. 程序员技术练级攻略
5. 软件逆向分析应用领域
6. Metasploit 里的shellcode代码分析
7. 逆向分析能做什么或应用范围、应该怎么做

0 0