逆向分析的应用领域
- 软件病毒行为特征的分析,通过分析病毒的特征信息,更好地进行反病毒软件的编写。
- 闭源软件内部算法的理解分析,进行软件行为的模拟,优秀算法设计思路学习和借鉴。
- 各类软件的破解,去除各类软件的限制(屌丝能用各种高大上的商业软件)。
- 解密软件加密算法,解密各类加密文件。
- 分析其游戏软件的算法设计,进行各类游戏外挂的设计。
- 在没有源码的情况下,对现有软件进行直接的修改,从而扩展其功能,个性化设计。
- 分析网络数据包格式,模拟发送网络数据包。
借用网上的一段话:
首先,逆向分析是考验人耐性的事情,如果你没有耐性可能很难出结果,往往一个大点的系统就可能需要几个月的时间,上年也有可能,所以耐性是第一。
其次,分析过程中往往觉得已经到尽头,无法再分析下去而退缩,但成功可能离你也许不远了,你需要沉着冷静,因为任何东西都是可能被逆向的,源码已经被编译成汇编代码后,在汇编代码前,代码量已经是成几何量倍增,而且大量的寄存器和指令,往往容易混淆,所以,你需要一个稳重的性格更好。
再则,需要一些基本知识,汇编是必须要掌握的,其次其他高级语言如:C++、pascal、basic等能掌握更好,至少应该精通一门,往往分析过程中不仅仅是汇编指令,更多的是在跟系统打交道,软件中会用到各类知识,winapi、COM、消息、多线程、内存管理、进程等等,对系统的了解更有利于你进行下一步的分析,所以知识全面更加有利于分析。当然,知识需要积累,积累需要过程和毅力,需要时间如果你愿意在这个方面发展,那么你需要坚韧的毅力。逆向分析过程中,一个重要的东西就是注释,我们在C++中编写软件的时候并不需要写太多的注释,因为我们通过函数名或者变量名都能辨别出意义,但是逆向分析中,你看到的是汇编代码,基本都是寄存器和指令的集合,那么注释就显得非常非常的重要,一定要多写注释,而且有可能注释会反复修改,因为你有可能第一次分析一段汇编代码后的意义并不正确,分析多次后就会推翻前面下的定义,又会写入新的意义,不用怕你的注释会错误,就怕你不写,IDA和OD都有很好的注释和书签的管理功能,这将大大有利于我们的分析。
最后,你需要有一个OPEN的思想,不要局限于一个点,要从大的点入手,最好能模块化这些汇编代码,最后把这些模块集合在一起后,就是一套完整的思路了。
人的潜力是无限的,没有触发的时候可能你自己都不相信,但所有的一切都需要积累,世上没有不劳而获。
逆向分析前期学习
首先建议学习几门语言;
- 汇编
- C++
- Python
他们一个比一个抽象.C++里的编程范型是比较多的,而python是另一个程度的抽象.这三门语言,差不多可以代表现今发挥了巨大作用的编程语言了.
逆向的直接基础知识,推荐几本书:
- Intel 微处理器.
- Windows环境下32位汇编语言程序设计
- WindowsPE权威指南
- C++反汇编与逆向分析技术揭秘
- 加密与解密第三版
- IDA Pro权威指南
再掌握几个工具:
- 静态反汇编工具: IDA Pro
- 动态反汇编工具: ollydbg/x64dbg
- Windows内核调试工具: windbg
各类插件的使用
- 壳类插件
- 反调试插件
- 反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. 逆向分析能做什么或应用范围、应该怎么做