原文地址:http://home.inf.fh-rhein-sieg.de/~ikarim2s/how2injectcode/code_inject.html
前期准备:
首先,我们需要一个调试器,这里我比较喜欢OLLYDBG ---我认为他是这个世界上最好的调试器 :P)
第二,我们需要一个拿来注入我们代码的应用程序,我选择的是windows的记事本(notepad.exe),把notepad.exe拷贝到一个新的目录下,
并把它重命名为CodeInjectTest。
开始
我们的目标是往Notepad.EXE 注入一些我们想要的代码,在例子中我们将在Notepad.EXE启动的时候注入一个简单的对话框。
启动记事本,如下是原本的记事本的样子。
用OD打开原始的notepad,如果没什么差错的话,你应该会看到下面的窗口。
因为我们需要往exe中注入自己的代码,因此需要遭到应用程序的空白处,这个空白处我们把它叫做CodeCaves。滚动od中的cpu窗口,
知道我们找到CodeCaves。如下:
地址从01008747开始。
在标红的区域中,就是notepad的CodeCave。在这里我们可以写一些自己想要的代码,而且他不会影响程序的正常运行。如果我们想要调用 Messagebox,
你需要知道一下关于Messagebox的介绍:
int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);
这些就是你必须知道的一些关于MessageBox的东西,现在我们可以在CodeCaves 下做一些自己的事情了。首先,我们要创建MessageBox里显示的
提示信息的字符串,这里我们选择几行CodeCaves,如下:
点击 Binary=>Edit or (CTRL+E)你将看到如下的窗口,在窗口中输入你自己想填写的:
点击ok,你将会看到那些红色代码就是你修改的:
现在用CTRL+A 在分析一下代码。
Ok,如果你希望MessageBox ,有不同的标题属性,你可以重复上述的操作,创建另外一个字符串,如"INJECTED NOTEPAD"。
现在是时候编写 asm代码的时候了 ;)
我们需要编写触发MessageBox 的asm代码。这是一些快速的例子如下:
PUSH 0 ; BUTTONS = <OK ONLY>
PUSH 1008751 ; CAPTION = Our adress of the "INJECTED NOTEPAD"
PUSH 1008751 ; MESSAGE = Same like above.
PUSH 0 ; ICON = <NO ICON>
CALL MessageBoxA ; Run MessageBoxA with the Params above.
这些代码在od上看起来应该是这个样子的:
看到上面的箭头了没,接下来是重要的一步!如果你现在保存它并运行它,你将看不到任何的效果,为什么呢?
因为这段代码并没有被调用。
我们必须记住" PUSH 0" 的偏移位置,因为我们需要从程序的开始位置跳转过来,然后在跳回去 ;)
再记住了这个地址以后,跳转到程序的开头位置如下:
现在来到了程序开始执行的位置。还记得我们一开始我们想往程序里加入什么吗? ;) 从开始选择几段的代码,拷贝到剪贴板中。
把这些代码保存在文件中去,可能等下我们会使用到它。回到刚才程序的开头位置 (在图片中是 PUSH 70)
双击它,在弹出来的地方下 编写如下的代码"JMP <adress of your first push>"
按下Assemble 按钮,将看到如下红色的代码。
注意下红色盒子里的地址,这是我们等下需要跳回来的地方。
对比一下新的代码和刚才拷贝到剪贴板的代码,你会发现原来的一些代码被覆盖带了,为了保持程序可执行我们必须补上这些被重写的代码。
在这个例子中,被覆盖掉的代码如下:
PUSH 70
PUSH NOTEPAD.01001898
在 CALL MessageBoxA的后面,补上这段代码,然后跳回到原处。
一切都已经就绪了。
如下,保存一下新的记事本:
选择"All modifications",在弹出来的对话框中选择"Copy All" ,给程序去一个名字,保存它,如果你成功的话,你讲看到如下的窗体。
点击
ok,记事本将正常启动了。
总结:
1.明白要注入的代码该怎么编写
2.记得恢复原来被代替掉的代码。
posted on 2013-07-02 15:38
漂漂 阅读(23930)
评论(0) 编辑 收藏 引用