0x01准备(可以下载爱情磁盘)
1.OD 2.stud_PE
0x02 为程序增加一个xxx的区段
程序也可以序空着的地方添加程序,但这种情况很少,当然也会遇到程序不添加区段。PEID,原来是准备其他软件添加代码,但是保护太强,没有成功,然后右击new session添加区段,将虚拟大小和大小写为1000(大了没事,代码够了),选择空字段填充,确定
0x03 将需要执行的函数导入注册表
可执行代码插入程序执行前,c语言使用函数的时候是通过库调用的,我们这里是汇编语言插入代码,所以也是和C语言类似,也是调用c语言的库实现的,下面开始导入库我原来在想插入什么代码好呢,那么就执行一个弹出cmd吧 cmd需要一个叫WinExec函数执行kernel32.dll所以我们调用这个链接库 然后找到这个WinExec引入此函数 这是我介绍的函数。底部有两个函数,因为我以前试过一次,但没关系。另一点是记住函数RVA,我们需要马上用这个RVA找到函数VA
0x04 OD载入
因为我们需要在新添加的区段中编写代码,所以首先找出该区段在哪里,点击od上排m按钮,双击xxx 选择复制区段地址 在反汇编窗口ctrl g查找区段 这就是我们刚刚添加区段的开头 直到我们刚刚引入函数,才有一个函数RVA,下面我们来找函数VA。在左下角的窗口中ctrl g查询RVA 找到了VA,记录下来 然后我们用汇编代码写执行代码,或者其他代码,如病毒 这个WinExec函数传入两个参数,一个是5SW_SHOW,二是要执行的命令(这个可以看Win32API手册),汇编语言参数可以直接push也可以push地址放参数,我们push第二个参数,push是地址(地址是004A502A,汇编语言写为push 加地址),之后,我们开始写函数。函数的写作方法是call [](中括号在里面VA),最后jmp跳回程序的原始入口,地址在以下几点,与代码段相同xxx区段。左下角ctrl g查询push的地址
双击要改变的地方,push 5, push 004A502A, call [004A60C1], jmp 004982B0(视具体情况而定) 转换成16位方便看清楚 之后更改 添加的参数在代码段下方 保存一下 因为我们加了xxx区段不是程序的入口点,我们主要修改程序的入口点 我们是虚拟地址xxx区段地址复制粘贴到入口点后,入口点变更完成 最后,始程序和修改后的程序 弹出了一个cmd的窗口
0x05 总结
在程序中添加代码的方法有很多,除了上述方法dll注入和HOOK钩子,不一定插入程序的开头,结尾,中间,只是有点困难。