前言:
这个天太热了的说,今天给大家带来的是给软件加入自己的提示框,OllyDbg走起。
EXE载入到OllyDbg:
首先,我们把准备好的任意没有壳子的软件拖入到OD中,我们CTRL+N调出函数列表,找到MessageBoxA,右键复制到剪贴板,整个行。如图所示:
我们把赋值的行黏贴到TXT文件中,这边内容如下:(注意红框内的地址后面我们要用到)
我们在数据窗口寻找000000……未写入ASCII的地方空格编写(注意保持大小)我写的如图:
我修改的数据地址是0066DFD0至0066DFF0之间,这个也要记住了。接下来我们选定数据,复制到可执行文件,然后复制到文件。如图:
至此,我们的准备工作完成。接下来我们OD载入刚才保存的文件,然后在汇编窗口找到db0 db0这样的空代码行,写入:
00658624 6A 00 push 0x0 //代码段开头 00658626 68 D0DF6600 push 0066DFD0 //数据修改起点 0065862B 68 F0DF6600 push 0066DFF0 //数据修改终点 00658630 6A 00 push 0x0 //系统需求 00658632 36:FF15 08AC6>call dword ptr ss:[XXXXX>; //xxxxx为messageboxA地址 00658639 55 push ebp //补充代码段开头 0065863A 8BEC mov ebp,esp 0065863C 6A FF push -0x1 0065863E ^\E9 06FFFFFF jmp 00658549
此时在程序OEP那里代码变成了:
00658544 > /E9 DB000000 jmp greenvpn.00658624 00658549 |90 nop
我知道你们一定不理解,所以我做了个图来解释下,我们打开文件文件从OEP开始执行代码,我们把OEP改了,让他跳转到后面的我们写的代码段,这样你在OEP写JMP的话会自动把后面三行代码NOP掉,我们在空代码段上把NOP掉的码补上,然后跳转回OEP的NOP点地址。下图是原OEP和JMP后的OEP对比。
我们明显看到缺码了,所以我们实现功能后要补码,JMP回NOP位置让其程序运行。
后记:
这个文章方法肯定很多人会,我只是解释下补码的思想,方便新手理解为什么有第二段代码头,话说我一开始也是百思不得其解的说,最后的最后加框成功!为什么不发效果图…ASCII位置没掌握好..变成了“块网络破解”了,我就不贴出来了,丢人….