不名物 发表于 2020-5-17 10:45

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;
}

xiaohong 发表于 2020-5-17 10:46

感谢分享

不名物 发表于 2020-5-17 12:19

Tested on:   Win10 LTSC,Win8,Win7,WinVista,WinXP,Win2kPro,Win2k8,Win2k8R2,Win2k3

zy52pj 发表于 2020-5-17 13:01

观摩…什么东西?

sam喵喵 发表于 2020-5-17 22:55

zy52pj 发表于 2020-5-17 13:01
观摩…什么东西?

好像是在ret地址插入代码,ret之前可以执行。
有大佬出来传道授业一下吗

不名物 发表于 2020-5-20 14:08

zy52pj 发表于 2020-5-17 13:01
观摩…什么东西?

这个是在EXE中插入汇编代码,调用系统kernel自带的函数,例子里是查找sleep函数,并且用call调用

薛定谔消失的弦 发表于 2020-5-26 17:31

学习一下

cube 发表于 2020-6-24 00:06

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]
查看完整版本: shellcode小程序汇编查找kernel32 函数地址