首页
社区
课程
招聘
[求助]PE diy小疑惑 已解决
发表于: 2008-6-30 16:02 5304

[求助]PE diy小疑惑 已解决

2008-6-30 16:02
5304
我给记事本加了个启动框,在本机可以完好运行,为什么传到另一台机子上就出现错误.
望大大们解释一下.

已经做了个API的.完结.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
2
用的API都添加到导入表了吗
2008-6-30 16:18
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
没用到API,我只是在未尾的空白处加了代码.
2008-7-1 08:07
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
4
有没有用到重定位过的资源?

贴文件吧
2008-7-1 08:10
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
兄台早,文件传上来了,请给看看.
上传的附件:
2008-7-1 08:41
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
6
01008773   > \6A 00         push    0
01008775   .  68 4D870001   push    0100874D                         ;  ASCII "jamhun"
0100877A   .  68 54870001   push    01008754                         ;  ASCII "this is my second code inject"
0100877F   .  6A 00         push    0
01008781      E8 047ED476   call    77D5058A
01008786      6A 70         push    70
01008788   .  68 98180001   push    01001898
0100878D   .^ E9 12ECFFFF   jmp     010073A4

你看,你的这个call 77D5058A是个硬编地址,在我的系统上就是一个无效的地址。

我从参数看你要弹个MessageBoxA,而这个程序本身的导入表中只有MessageBoxW,是对应的宽字节版本,所以我们需要用lordpe手动加一下这个api,我加好以后,得到rva 13019,于是到程序里,用
call dword ptr[imagebase+rva]
的方法调用这个api,pe在装载的时候,装载器会自动定位这个api,并把对应的地址放在那里。

这个就是导入表的作用,我给你改好了,你也可以参照这重新操作一遍,再资料区应该有帖子介绍添加导入表项的。
上传的附件:
2008-7-1 09:30
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
而这个程序本身的导入表中只有MessageBoxW,是对应的宽字节版本

这话提醒了我,我把   call  MessageBoxA  换成了 MessageBoxW 后在别的机子上也可以运行了,不过可惜crtl+E时打的是ASCII值,结果一片乱码.
你的回复很快,非常的感激,
我也是很渴望添加API的,貌似才起步,回头继续学习添加导入表.
2008-7-1 13:39
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
8
call MessageBoxA 换成了 MessageBoxW 后在别的机子上也可以运行了


这是因为这个exe本身有MessageBoxW 的导入,不过你在调用的时候仍然要用

call dword ptr[imagebase+rva]

这样间接的方式,因为如果对方的系统版本不同,这些地址是不同的。

如果是纯英文的话,可以以 xx 00 xx 00 的方法把 xx xx 转换成宽字节
其实你如果跟一下MessageBoxA 的话,会发现其实他是把你的字符串RtlUnicodeString一下以后,再调用MessageBoxW的。
2008-7-1 14:28
0
雪    币: 222
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
照你的方法我做了一次,加了个API.本机和另一台机子上运行通过.
谢谢.
不过我没用call dword ptr[imagebase+rva]. 而是直接Call messageboxA
2008-7-1 14:58
0
雪    币: 350
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢Nooby ,  跟楼主同学习了.
2008-7-1 15:06
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=CrAXk;474486]照你的方法我做了一次,加了个API.本机和另一台机子上运行通过.
谢谢.
不过我没用call dword ptr[imagebase+rva]. 而是直接Call messageboxA[/QUOTE]

如果他是一个硬地址的话,在不同版本的系统上就会出错,不过一步步来,下次做的时候可以注意下加api的时候,有个rva的数值,用lordpe计算一下对应的va,然后call 那个地址,才是正确的利用导入表。
2008-7-1 15:13
0
游客
登录 | 注册 方可回帖
返回
//