能力值:
(RANK:210 )
|
-
-
2 楼
用的API都添加到导入表了吗
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
没用到API,我只是在未尾的空白处加了代码.
|
能力值:
(RANK:210 )
|
-
-
4 楼
有没有用到重定位过的资源?
贴文件吧
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
|
能力值:
(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,并把对应的地址放在那里。
这个就是导入表的作用,我给你改好了,你也可以参照这重新操作一遍,再资料区应该有帖子介绍添加导入表项的。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
而这个程序本身的导入表中只有MessageBoxW,是对应的宽字节版本
这话提醒了我,我把 call MessageBoxA 换成了 MessageBoxW 后在别的机子上也可以运行了,不过可惜crtl+E时打的是ASCII值,结果一片乱码.
你的回复很快,非常的感激,
我也是很渴望添加API的,貌似才起步,回头继续学习添加导入表.
|
能力值:
(RANK:210 )
|
-
-
8 楼
call MessageBoxA 换成了 MessageBoxW 后在别的机子上也可以运行了
这是因为这个exe本身有MessageBoxW 的导入,不过你在调用的时候仍然要用
call dword ptr[imagebase+rva]
这样间接的方式,因为如果对方的系统版本不同,这些地址是不同的。
如果是纯英文的话,可以以 xx 00 xx 00 的方法把 xx xx 转换成宽字节
其实你如果跟一下MessageBoxA 的话,会发现其实他是把你的字符串RtlUnicodeString一下以后,再调用MessageBoxW的。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
照你的方法我做了一次,加了个API.本机和另一台机子上运行通过.
谢谢.
不过我没用call dword ptr[imagebase+rva]. 而是直接Call messageboxA
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
感谢Nooby , 跟楼主同学习了.
|
能力值:
(RANK:210 )
|
-
-
11 楼
[QUOTE=CrAXk;474486]照你的方法我做了一次,加了个API.本机和另一台机子上运行通过.
谢谢.
不过我没用call dword ptr[imagebase+rva]. 而是直接Call messageboxA[/QUOTE]
如果他是一个硬地址的话,在不同版本的系统上就会出错,不过一步步来,下次做的时候可以注意下加api的时候,有个rva的数值,用lordpe计算一下对应的va,然后call 那个地址,才是正确的利用导入表。
|
|
|