【软件安全】使用ollydbg手动修改可执行文件

来源:互联网 发布:网络投票刷票器 编辑:程序博客网 时间:2024/05/22 17:03

欢迎大家到我的个人主页点击打开链接,一起交流、学习,一起进步~

这一次我们使用ollydbg手动向可执行文件内存中添加指令,使其能够实现我们要求的功能,同时也不影响原功能的实现。

(一)向printf(“hello world”)中注入代码,使其实现MessageBoxA:(这一点没能实现。。。)

1.这一方法参考了文章http://home.inf.fh-rhein-sieg.de/~ikarim2s/how2injectcode/code_inject.html,但是当一切写好,准备调用MessageBox时,发现我们并没有这个函数,即以下这步当中的call,我们只是call了一个地址,而没有call到USER32中的MessageBox,

   ???

原因是我们的文件原本就没有调用USER32.dll,因此计算写上了地址也不知道在call什么,使用PEView打开NotePad.exe,发现确实是调用过USER32.dll。

2.然后想到,是不是可以在我们文件的.idata节中添加上USER32.dll,同时在IAT中添加MessageBoxA的相关信息。尝试中:

首先找到.idata节,添加 IMAGE_IMPORT_DESCRIPTOR,然后在IID指向的位置中填上相应的dll名称、函数名称等:

  • IID的结构:

0-3字节:OriginalFirstThunk INT的地址

4-7字节:TimeDateStamp 时间戳

8-11字节:ForwarderChain 链表的前一个结构

12-15字节:Namel 指向DLL名称的指针

16-19字节:FirstThunk 定义针对Namel这个动态链接库引入的所有导入函数(IAT的地址)

00406580->0040648E->MessageBoxA,这个就是INT的输入顺序

这里只添加了MessageBoxA这一个函数

添加完后,右键->copy to executable->copy all,另存为新的exe,先运行一下有没有报错:

使用PEView打开我们的新文件,发现在IAT中不仅多了USER32,还增加了以下dll:

打开了另一个正常的exe,发现它的IAT下一项之间有5个字段的0相隔,我想应该是系统将我们添加的IID之后的五个字段也当作是某一个dll文件了,如此。。。无奈才疏学浅,想不出应该是怎样添加的。

(二)向已有MessageBoxA函数的可执行文件中添加代码,使其先弹出我们想要的内容:

折于第一种方法,无奈只得另寻他法,这一方法与上篇博文实现的功能相同,不过那篇是自动,本篇为手动:

1.找到原文件中的MessageBoxA,在起始处使用F2设置断点,并用F8单步跟进,查看由何处跳往这里,记下这个地址,以后会加以修正,同时复制该段代码:

      记下地址004013DD

2.在.text节末添加自己需要的弹框的标题和内容,此处简单全记为”SUCCESS INJECTED”,同时将上面复制的代码粘贴到此处(当然这是极为偷懒的方法),修改相关偏移,将显示的文字地址改为我们刚刚写下的”SUCCESS INJECTED”的地址(00402684),同时将RETN改为JMP,JMP到原MessageBoxA的起始地址,这里为00401500:

3.在004013DD修改跳转地址,改为我们后加的MessgaeBoxA:

4.右键->copy to executable->copy all,另存为新的exe,运行:

5.运行完后出现了这样的错误???

这个问题我还没有想出是什么原因,为什么会涉及到地址43435553?希望大家有什么想法可以一起交流。

2 0
原创粉丝点击