首页
社区
课程
招聘
[旧帖] [分享]动态获得API地址(申请邀请码)(邀请码已经发放) 0.00雪花
发表于: 2009-12-27 09:52 1241

[旧帖] [分享]动态获得API地址(申请邀请码)(邀请码已经发放) 0.00雪花

2009-12-27 09:52
1241
前一段看了一些关于如何动态得到API,目前比较新的技术是通过PEB的手法得到,原理是程序在创建进程的时候调用了CreateThread这个API说明其实系统已经调用了kernel32.dll这样我们可以通过对于kernel32.dll的搜索得到GetProcAddress和LoadLibraryA从而打开API的大门。

代码里引用了,看雪学院在调试->病毒木马专题里的一篇文章得到kernel32.dll基地址的方法,后半部分利用PE文件结构来完成,得到GetProcAddress函数地址后利用就容易多了!

试写了一个调用MessageBoxA的小程序试了一下,代码粘出来给大家分享一下!

;nasm -f win32 NoImport.asm

;link -subsystem:windows -entry:start -nologo -merge:.rdata=.text NoImport.obj

global _start
[section .bss]
kernel32_Address resd 1
user32_Address resd 1
GetProcAddress_Address resd 1
ExitProcess_Address resd 1
MessageBoxA_Address resd 1
LoadLibraryA_Address resd 1
[section .text]
Title db 'Hello',0
Content db 'Hello World!',0
GetProcAddress db 'GetProcAddress',0
ExitProcess db 'ExitProcess',0
LoadLibraryA db 'LoadLibraryA',0
user32 db 'user32.dll',0
MessageBoxA db 'MessageBoxA',0
_start:
mov eax,[fs:0x30]
mov eax,[eax+0xc]
mov eax,[eax+0x1c]
mov eax,[eax]
mov eax,[eax+0x8];eax里面是kernel32的基地址
mov [kernel32_Address],eax
mov ebx,[eax+0x3c];ebx中是PE头的相对地址
mov ebx,[ebx+eax+0x78]
add ebx,eax;引出表地址
mov ecx,[ebx+0x20]
add ecx,eax
xor edx,edx
push edx
CompareNext:
pop edx
inc edx
mov edi,[ecx]
add edi,eax
add ecx,4
push edx
mov esi,GetProcAddress
CompareName:
mov dl,[edi]
mov dh,[esi]
cmp dl,dh
jne CompareNext
inc edi
inc esi
cmp byte [esi],0
je GetAddress
jmp CompareName
GetAddress:
pop edx
dec edx
shl edx,1
mov ecx,[ebx+0x24]
add ecx,eax
add ecx,edx
xor edx,edx
mov dx,[ecx]
shl edx,2
mov ecx,[ebx+0x1c]
add ecx,eax
add ecx,edx
add eax,[ecx];eax里面就是getprocaddress
mov [GetProcAddress_Address],eax
push ExitProcess
push dword [kernel32_Address]
call eax
mov [ExitProcess_Address],eax
push LoadLibraryA
push dword [kernel32_Address]
call dword [GetProcAddress_Address]
mov [LoadLibraryA_Address],eax
push user32
call eax
mov [user32_Address],eax
push MessageBoxA
push eax
call dword [GetProcAddress_Address]
mov [MessageBoxA_Address],eax
push 0
push Title
push Content
push 0
call eax
push 0
call dword [ExitProcess_Address]

备注:这篇些代码是在anskya,风之子等看雪论坛上一些高手帮助下完成的!谢谢大家

说给anskya姐,原来的代码主要问题出在了段上,以前看罗云彬老师的书记得.rdata是放未初始化数据的,可是在nasm里面.rdata是放const的,所以把.rdata改成.bss后程序就不在访问内存的时候出现异常了!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
声明,本人和QQ845181413是一个人,代码系个人原创!
2009-12-27 09:55
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不知道这样能不能,得到邀请码!
2009-12-27 14:28
0
游客
登录 | 注册 方可回帖
返回
//