whypro 发表于 2010-6-3 11:54:03

说说关于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开始调用
我都写好了哈哈!

小试锋芒 发表于 2010-6-3 12:05:27

都做起了PE的二次开发啦?/:good

飘云 发表于 2010-6-3 12:14:59

我觉得Hook 来的直接~~

用DLL实现,更加方便~

也是本人最常用的方式。。。呵呵

瀚海雄风 发表于 2010-6-3 13:02:23

可以把以前的修改记事本的文章copy过来

whypro 发表于 2010-6-3 13:05:20

/:012这回真是自己动手做的!
高手你手下留情呀!

yayazhi 发表于 2010-6-3 13:09:11

用LordPE添加API会给程序加个区段,这样编程就不美了,还是手动添加的好/:018

whypro 发表于 2010-6-3 13:12:49

本帖最后由 whypro 于 2010-6-3 13:22 编辑

yayazhi大牛 我水平有限呀! 谢谢关注

yayazhi 发表于 2010-6-3 13:38:05

我多嘴了:shutup:,莫怪

whypro 发表于 2010-6-3 13:46:25

没事的,我倒是想知道完全手工是怎么搞定了!谢谢yayazhi大牛

zeknight 发表于 2010-6-3 13:54:56

高手些~~~我一个一个学!!
页: [1] 2
查看完整版本: 说说关于exe添加api的应用!