标签:四种 pat 鼠标右键 art unicode 现在 覆盖 汇编 代码
此文转载自:https://blog.csdn.net/bits_stdc/article/details/105978657
是在不执行代码文件的情形下,对代码进行静态分析的一种方法。并不执行代码,而是观察代码文件的外部特征,获取文件的类型,大小,PE头信息,内部字符串,是否运行时解压缩等。
是在程序文件的执行过程中对代码进行动态分析的一种方法,它通过调试来分析代码流,获得内存的状态等。
虽然代码调试过程在代码逆向分析过程中占据很大比重,但它只是代码逆向分析的一个从属概念
#include "windows.h"
#include "tchar.h"
int _tmain(int argc, TCHAR * argv[])
{
MessageBox(NULL,"Hello World!","张轩瑞",MB_OK);
return 0;
}
用OllyDbg调试工具打开程序
左上 代码窗口
右上 寄存器窗口
左下 数据窗口
右下 栈窗口
项目 | Value | 含义 |
---|---|---|
Restart | Ctrl+F2 | 重新开始调试 |
Step Into | F7 | 执行一句OP code (操作码),若遇到调用命令(CALL),将进入函数代码内部 |
Step Over | F8 | 执行一句OP code (操作码),若遇到调用命令(CALL),仅执行函数自身,不跟随进入 |
Execute till Return | Ctrl+F9 | 一直在函数代码内部运行,直到遇到RETN命令,跳出函数 |
执行Go to(Ctrl + G) 命令,打开一个“输入跟踪表达式”的对话框。
在文本框中输入“地址”。
光标自动定位到该地址处,执行F4命令,让调试流运到此处,然后从该处调试。
可以设置BP(Break Point,断点) (快捷键F2)
设置断点后,运行到断点处就会暂停。
可以打开Breakpoints框(ATL+B)查看设置的断点。
双击某个断点会直接跳转到相应位置。
按键盘上的“;”可以添加注释
同时也可以查找到他。
我们也可以通过标签提供的功能在指定地址
比如在00401BF0中设置标签,main func
因为00401385处调用00401BF0的函数,所以就会显示,main func
标签和注释一样也可以检索
调试代码时,main()函数并不直接位于可执行文件的EP位置上,出现在此的是开发工具生成的启动函数。
(EP是windows可执行文件(EXE,DLL,SYS等)的代码入口点,是执行应用程序时最先执行的代码的起始位置,它依赖于CPU。)
逐条执行指令来查找需要查找的位置。代码执行法仅使用于被调试的代码量不大、且程序功能明确的情况。
直接查找字符串。
寻找所需要的字符串,然后双击。
查找->所有模块间的调用
查看调用了那些函数
打开“所有模块中的名称”并敲下MessageBox,光标会直接定位。
我在搜索的时候,发现注释hello world的地方更改没有用。
找到主函数后,设置断点。
然后按F4,进行调试。
在右下方站窗口找到ASCII码“hello world”。
然后双击查看,进入数据窗口,去更改缓存区。
去更改,hello world 改成 hello rever
尽量不要用更长的字符串,覆盖原字符串,这样会使数据遭到破坏。
改完之后,去运行程序,之后就会弹出窗口。
我们发现以前的hello world 变成了 hello rever。
上面的调试中,我们通过修改字符串缓冲区更改了程序显示的消息内容,但是这种更改只是暂时的,我们终止调试的时候。程序中的原字符串没有改变。如果想保存下来,就要把更改后的程序保存一个可执行文件。
当我们打开这个已经保存好的文件的时候,弹出的字符串变成了“hello rever”。
标签:四种 pat 鼠标右键 art unicode 现在 覆盖 汇编 代码
原文地址:https://www.cnblogs.com/phyger/p/14313810.html