D0g3_17

Reverse 入门指南
逆向入门定义:软件代码逆向主要指对软件的结构,流程,算法,代码等进行逆向拆解和分析。研究方向:逆向破解脱壳免杀病毒...
扫描右侧二维码阅读全文
26
2018/09

Reverse 入门指南

逆向入门

定义:

软件代码逆向主要指对软件的结构,流程,算法,代码等进行逆向拆解和分析。

研究方向:

  1. 逆向破解
  2. 脱壳
  3. 免杀
  4. 病毒分析

windows下的逆向

个人觉得吾爱破解是入门逆向和提高逆向能力首选的一个地方,上面的教程和工具都很全,只不过现在关闭注册了。

必备知识

  1. 汇编语言
  2. WinApi编程基础(这个不会系统的学过也没关系,在逆向过程可以慢慢熟悉,不过有api编程基础是最好了)
  1. 耐心

必备工具

基础的逆向分析工具可以分为静态分析工具和动态分析工具,有些工具两种功能都具备,例如IDA pro,不过各个工具都有各自的特点,还是分开功能使用比较好

  1. ollydbg
  2. IDA pro
  3. PEiD

ollydbg的使用教程还是首选吾爱破解上的,这里还有一个chm文档版的入门教程也很不错
https://pan.baidu.com/s/1lc4bXiFquff8xSD1BucHeQ

CTF中的逆向

ctf的逆向题分为windows下的和linux下的。

解题方法

拿到一道逆向题目,首先用winhex打开查看是什么类型的文件,之后分32和64位用IDA打开,找到main函数分析程序的基本功能。静态分析到某个点没办法进行下去的时候,在尝试下面的一些方法

1. 动态调试
在od或者gdb中某个难以静态分析的地方下断点,或者在关键函数下断,一步步结合静态分析来进行分析。

2. 符号执行(angr)
这个方法是一个很强大的方法,基本的原理是:

符号执行技术的核心思想是使用符号值来表示程序的输入数据,并将程序的运算过程逐指令或逐语句地转换为数学表达式,在CFG的基础上生成符号执行树,并为每一条路径建立一系列以输入数据为变量的符号表达式。

简单来说就是在条件判断处(if-else),让程序遍历出所有可能产生的结果,我们就只需要挑选出我们所需要的结果即可。

3. 约束求解(z3)
在某些时候逆向的算法可能会比较复杂,我们在解题过程中可以为算法添加约束条件,这种方法的原理基于可满足性模运算(SMT),有兴趣的朋友可以自行百度。

z3是由微软开发的一套约束求解器,你可以简单的理解它是解方程的神器。

https://blog.csdn.net/s1054436218/article/details/78651075

4. 污点分析

解题思路

1.大体浏览程序功能

在IDA中可以在左边的函数列表中看到有哪些重要的已经被符号解析出来的函数,大体上对程序有一个印象

2.定位关键代码

分析控制流

可以参见IDA生成的控制流程图(CFG),沿着分支循环和函数调用,逐块地阅读反汇编代码进行分析。(一般用于比较复杂的程序)

利用数据、代码交叉引用

在IDA中,点击函数的反汇编代码,按下Ctrl + X就可以看到哪些地方引用了这个函数,这样就可以做一个回溯。

推荐的学习资源

书籍:

打基础的关于计算机基础知识的一些书:

1.《程序员的自我修养》
2.《深入理解计算机系统》

逆向基础的书籍:

1.《逆向工程核心原理》
里面大多数知识是PE可执行文件下的,比较厚的一本,内容写的也很详细

3.《0day安全软件漏洞分析技术(第二版)》
4.有趣的二进制
5.《C++反汇编技术揭秘》

视频资源:

1.i春秋
2.52pojie
3.http://www.he11oworld.com/

未完待续,如有疑问或建议请留言或在群内提问

Last modification:September 26th, 2018 at 11:13 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment