shellcode小程序汇编查找kernel32 函数地址
本帖最后由 不名物 于 2020-5-17 10:51 编辑前一阵子想要在exe中增加sleep汇编代码,一直不可行。专研了一阵子shellcode,终于实现了。
特奉上,见附件,抱歉没找到加附件的地方。
直接上代码吧:vc6
#include "stdafx.h"
#include "stdlib.h"
char shellcode[] = "\x31\xd2\xb2\x30\x64\x8b\x12\x8b\x52\x0c\x8b\x52\x1c\x8b\x42"
"\x08\x8b\x72\x20\x8b\x12\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03"
"\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x31\xed\x8b"
"\x34\xaf\x01\xc6\x45\x81\x3e"
"\x53\x6C\x65\x65" //Slee
"\x75\xf2"
"\x81\x7e""\x01"
"\x6C\x65\x65\x70" //p
"\x75\xe9"
"\x8b\x7a\x24\x01\xc7\x66\x8b\x2c"
"\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf\xfc\x01\xc7"
"\x66\xB8"
"\x90\x5F" //delay
// "\0x0F\xB7\0xC0" //delay
"\x50\xFF\xd7";
//int main(int argc, char **argv){int (*f)();f = (int (*)())shellcode;(int)(*f)();}
int main(int argc, char* argv[])
{
int *ret;
ret=(int *)&ret+2;
// printf("Shellcode Length is : %d\n",strlen(shellcode));
(*ret)=(int)shellcode;
return 0;
} 感谢分享 Tested on: Win10 LTSC,Win8,Win7,WinVista,WinXP,Win2kPro,Win2k8,Win2k8R2,Win2k3 观摩…什么东西? zy52pj 发表于 2020-5-17 13:01
观摩…什么东西?
好像是在ret地址插入代码,ret之前可以执行。
有大佬出来传道授业一下吗 zy52pj 发表于 2020-5-17 13:01
观摩…什么东西?
这个是在EXE中插入汇编代码,调用系统kernel自带的函数,例子里是查找sleep函数,并且用call调用 学习一下 sam喵喵 发表于 2020-5-17 22:55
好像是在ret地址插入代码,ret之前可以执行。
有大佬出来传道授业一下吗
翻译成下面的汇编.
;找kernel32的基址
xor edx,edx
mov dl,0x30
mov edx,dword ptr fs:
mov edx,dword ptr ds:
mov edx,dword ptr ds:
loop1:
mov eax,dword ptr ds:
mov esi,dword ptr ds:
mov edx,dword ptr ds:
cmp byte ptr ds:,0x33
jnz loop1
;找sleep函数地址
mov edi,eax
add edi,dword ptr ds:
mov edx,dword ptr ds:
add edx,eax
mov edi,dword ptr ds:
add edi,eax
xor ebp,ebp
loop2:
mov esi,dword ptr ds:
add esi,eax
inc ebp
cmp dword ptr ds:,0x65656C53
jnz loop2
cmp dword ptr ds:,0x7065656C
jnz loop2
;调用sleep函数
mov edi,dword ptr ds:
add edi,eax
mov bp,word ptr ds:
mov edi,dword ptr ds:
add edi,eax
mov edi,dword ptr ds:
add edi,eax
mov ax,0x5F90
push eax
call edi
页:
[1]