逆向工程 0x01

静态分析 vs 动态分析

  • 静态分析:在不运行目标程序的情况分析
  • 动态分析:在运行目标程序的同时分析

1、静态分析

静态分析主要包括:(1)阅读反汇编代码 (2)提取可执行文件中的字符串,分析使用了哪些单词

逆向工程四大法宝:二进制编辑器、计算器、反汇编器、调试器

1、二进制编辑器 我用的是UE,个人觉得挺好用的,打开大一点文件也比较流畅。

二进制编辑器打开Windows可执行文件,即“PE格式“的文件内容。

2、反汇编器 这个用的是IDA,当前也有很多版本。

直接拖拽可执行文件到IDA内就可以打开。

Names window是IDA的分析窗口。默认打开,可以用shift+F4打开,或者菜单view->open subview->Names打开。窗口最上方会显示wWinMain函数名,双击它。

在IDA View-A窗口中会显示反汇编代码。也可以点击函数名,从菜单中选择Text view或是Graph view,用不同的视图来查看代码。默认为Graph view。

Graph view视图,IDA会显示出调用的函数以及传递的参数。

dword ptr [p]也就是*p的意思,功能是取p所指向的地址处的值!

2、动态分析

在目标程序运行的同时跟踪程序逻辑行为。

主要方法:运行调试器跟踪。或者是获取文件和注册表访问日志,抓取网络包。

1、设置Process Monitor过滤规则:

启动Process Monitor设置过滤规则,按下Ctrl+L或是点击Filter->Filter设置。

2、调试器:进一步跟踪程序逻辑。

一般功能有(1)断点;(2)单步跳入、跳出;(3)查看寄存器和内存数据

断点是能够让程序在任意位置中断、恢复运行的功能。在会发生bug的地方设置断点,以便找到导致问题的程序逻辑。

每执行一条指令或中断一次就叫做单步跳入或跳出。通过单步功能,可以逐条执行程序逻辑,确认内存和变量的状态。

  • 跳入:调用函数时进入函数内部处理
  • 跳出:调用函数时不进入函数内部,而是将函数当做一条指令来执行。

最后查看寄存器和内存数据,在程序中断运行的状态下确认寄存器、内存和变量的状态。

个人使用的是OllyDbg调试器。

界面如下:

逆向工程 0x01_第1张图片

在反汇编窗口按下Ctrl+G或者右键单击弹出菜单中点击Go To->Expression,跳转到指定地址

选中指令所在行,按下F2设置断点或者右键单击在菜单中Breakpoint->Toggle。指令位置变红,断点设置成功。

按下F9或者Debug->run,开始运行程序。

F7单步跳入,F8单步跳出。

3、寄存器:

ESP和EBP用于管理栈,EIP指向当前执行的指令。

程序每执行一条指令,EIP的值会根据所执行指令长度的不同而不断增加。

CF、PF、AF、ZF用于标志条件分支。若ZF为1则跳转,若CF为1则不跳转等。

你可能感兴趣的:(二进制,调试,编辑器)