首页
社区
课程
招聘
[求助]一个关于LoadLibraryA函数地址的问题
发表于: 2007-5-6 13:05 9100

[求助]一个关于LoadLibraryA函数地址的问题

2007-5-6 13:05
9100
最近编写一个Down&Exec的shellcode的时候遇到LoadLibraryA的问题,一直想不明白。
   
    是这样的,从PEB得到kernel32.dll的地址,通过Hash值的方法查找到了LoadLibraryA的地址,然后加载urlmon.dll得到URLDownloadToFile的地址,但是一直没有成功。
   
    通过跟踪,发现得到的LoadLibraryA的地址是0x7C882F9C,在汇编代码LoadLibrary("urlmon.dll")的地方失败了。0x7C882F9C跟进去一看发现下面这段代码,在0x7C882FA1的jmp F5491AF0的地方跳到了空的内存空间上。
   
7C882F9C > push    ebp
7C882F9D   mov     ebp, esp
7C882F9F   nop
7C882FA0   pop     ebp
7C882FA1   jmp     F5491AF0
7C882FA6   nop
7C882FA7   nop
7C882FA8   nop
   
    不过用IDA反汇编kernel32.dll,却发现LoadLibraryA的地址是0x7C801D77,把这个地址手动在调试shellcode的地方填上就能成功。
   
    不知道为什么这两个地址不一样,一直没有想明白。望达人解答!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
2


不具备通用,不同版本的函数地址不一样.
2007-5-6 13:30
0
雪    币: 258
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我的shellcode应该是通用的,函数地址都是自己获得的。

问题就是得到了LoadLibraryA的地址以后,调用失败了。

而且为什么shellcode(为了检查,我编了个C程序调用GetProcAddress()得到的地址和shellcode中是一样的)得到的地址和IDA中得到的地址为什么和GetProcAddress()的结果不一样。

那个jmp到底跳到了哪里去?
2007-5-6 13:49
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
写流氓软件还是木马?

是不是那个函数已经被人挂钩了?
2007-5-6 19:25
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
LoadLibraryA等相关函数被卡巴斯基挂钩了。
2007-5-6 19:34
0
雪    币: 258
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=peaceclub;305752]LoadLibraryA等相关函数被卡巴斯基挂钩了。[/QUOTE]

谢谢!

但是即使被卡巴挂了钩子,那么为什么在shellcode里call这个函数就直接fail了?

我发现用调试器调试,从那个得到的地址进去就fail;但是直接从外面的call上面步过的话就能过去,而且结果也正常,就是不能跟进去,一进去的话总归fail。VC调试也一样。

困惑中……
2007-5-6 22:19
0
游客
登录 | 注册 方可回帖
返回
//