首页
社区
课程
招聘
[求助]求教添加跨平台函数的方法。。。急!
发表于: 2009-1-18 01:34 3092

[求助]求教添加跨平台函数的方法。。。急!

2009-1-18 01:34
3092
我把一个程序反汇编后在某个空白区域加入一个函数的调用,
E8 7ED1427C   CALL kernel32.CreateEventA(这样调用的)
为什么换台机器就调用不了呢?有几个问题不懂,希望得到大侠指教!
(注:二楼书呆彭版主说了在导入表添加此函数的方法,希望还有其它不用改导入表的方法吗?)

1:kernel32.dll 不是总是加载到他的首选地址0x77e80000处吗?那他里面的函数CreateEventA位置应该也是固定的吧?

2:查资料说要用LoadLibrary ,GetProcAddress 加载CreateEventA函数,可是我又怎么知道LoadLibrary ,GetProcAddress 这两个函数的地址呢?难道这两个函数的地址就是固定的,我那个就不是吗?

我是新手,希望指教。。。。谢谢!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
通过导入表来调用。如果要调用的函数已经被EXE所导入,那就直接call导入地址表中相应的RVA即可,如果没有导入,需要自己添加导入函数表和导入地址表。

请自己查阅一下PE文件的基本知识,特别是导入函数表的相关内容。

这是menting发的一篇文章,把导入表说和很透彻,希望对你有帮助。

http://bbs.pediy.com/showthread.php?t=53935&highlight=%E5%AF%BC%E5%85%A5+%E5%85%A5%E5%87%BD+%E5%87%BD%E6%95%B0
2009-1-18 02:57
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢 书呆彭版主。。。从导入表中加函数这是可以的,这个我会操作。但是我希望能不能不用改导入表而使用这个函数呢?刚刚看了好几篇病毒感染技术和shellcode的运行原理,有点深奥看的不是很懂,但是里面都说了一点,需要得到kernel32的内存地址,而我提出的两个问题也正是kernel32相关的,至今我还不太理解,谁能帮我解答一下呢,谢谢!!!!
2009-1-18 03:31
0
雪    币: 328
活跃值: (10)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
4
你可以试试搜索“API定位 API搜索”
基本原理就是绝大多数情况下kernel32.dll是被加载过了的
2009-1-18 05:44
0
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
5
kernel32.dll的基址呀,可以这样来:

mov eax, fs:0x30
mov eax, [eax + 0x0c]
mov esi, [eax + 0x0c]
lodsd
mov eax, [eax] //如果没有这一句则得到ntdll.dll的基址
mov eax, [eax + 0x18]
add eax,1000h
mov Kernel32,eax


其原理可以在论坛上搜索。这里有一篇不错的文章:


http://520yl.blog.163.com/blog/static/46914420085209258829/


以及这个:



还有,我看过一个病毒,通过对64位边界进行特征匹配扫描来寻找某dll的基址,再通过它的输出表得到函数指针。

http://bbs.pediy.com/showthread.php?t=75895
上传的附件:
2009-1-18 23:28
0
游客
登录 | 注册 方可回帖
返回
//