说说关于exe添加api的应用!
本帖最后由 whypro 于 2010-6-3 13:01 编辑#include <stdio.h>
void main(){
printf("自己试试\n");
}
上面这段小程序大家都明白吧!编译连接生成test.exe。
下面od上场,载入编译好的test.exe。
我们来到这里(用字符搜索“自己试试”)
其中push add.0042201C正好是printf的参数,但是我们想加一点东西进去。
比如改成“自己看看”,但我们这次要加入函数MessageBoxA
第一步 打开LordPE点击PE编辑器载入text.exe。
再选目录
再选输入表
我们常用的api都是靠他导入的,下面我们来加一个函数MessageBoxA。
在kernel32.dll 上单击右键
选择添加导入表出现对话框如图
键入你要的函数,然后点加号
我们点击USER32.DLL看看,注意一下:
thunkRva:0002C019这个我们会用到的
PE上的东东搞定了。(别忘记点击保存O(∩_∩)O~)
我们开始搞一下test.exe
让我们的MessageBoxA运行起来!
载入od我们来到这里
我们的目的是先运行MessageBoxA然后运行printf
但是我们没有地方写代码呀!
00401028|.68 1C204200 push add.0042201C ; /Arg1 = 0042201C
0040102D|.E8 2E000000 call add.00401060 ; \add.00401060
参数和printf连个缝隙都没有,哎没有办法我们自己造!
我们alt+m打开内存。看看.text有多大
401000+00021000=00422000
我们看看422000以内有没有空位,我们占个座!
好多00,这回有的玩了,我们就选00411890了。
好了键入代码
push add.0042201C改成jmp 0x411890
在地址411890下打入
xor ebx,ebx
push ebx
push 0x0
push 0x0
xor eax,eax
push eax
call dword ptr ds:<-------400000+0002C019<----thunkRva+基址<---MessageBoxA
push add2.0042201C<-----printf的参数
jmp add2.0040102D<-----返回到函数printf开始调用
我都写好了哈哈! 都做起了PE的二次开发啦?/:good 我觉得Hook 来的直接~~
用DLL实现,更加方便~
也是本人最常用的方式。。。呵呵 可以把以前的修改记事本的文章copy过来 /:012这回真是自己动手做的!
高手你手下留情呀! 用LordPE添加API会给程序加个区段,这样编程就不美了,还是手动添加的好/:018 本帖最后由 whypro 于 2010-6-3 13:22 编辑
yayazhi大牛 我水平有限呀! 谢谢关注 我多嘴了:shutup:,莫怪 没事的,我倒是想知道完全手工是怎么搞定了!谢谢yayazhi大牛 高手些~~~我一个一个学!!
页:
[1]
2