首页
社区
课程
招聘
PESpin 1.3 主程序详细分析
发表于: 2005-8-5 09:04 16247

PESpin 1.3 主程序详细分析

2005-8-5 09:04
16247

PESpin1.3 的脱壳和修复



附件中有全文和脱壳产品.



这个壳花了我很多时间, 尤其是找暗桩,  


差不多把 PESpin 的加壳代码分析了一遍.



附件:pespin13.zip



不忽略异常, F9, 竟然运行了.


再用进程管理器看看, 两个进程.


       


重新来过, 详细分析


               


0041211A    5D              POP EBP                                  ; 00F354


0041213E    8B95 DF4E4000   MOV EDX,DWORD PTR SS:[EBP+404EDF]        ; PESpin.00400000


00412144    8B42 3C         MOV EAX,DWORD PTR DS:[EDX+3C]


00412147    03C2            ADD EAX,EDX


00412149    8985 E94E4000   MOV DWORD PTR SS:[EBP+404EE9],EAX        ; PESpin.00400060


00412182    C1E1 07         SHL ECX,7                                ; 80


00412185    8B0C01          MOV ECX,DWORD PTR DS:[ECX+EAX]           ; Import RVA


00412188    03CA            ADD ECX,EDX                              ; PESpin.00400000


0041219B    8B59 10         MOV EBX,DWORD PTR DS:[ECX+10]            ; FirstThunk(User32.dll)


0041219E    03DA            ADD EBX,EDX                              ; PESpin.00400000


004121A0    8B1B            MOV EBX,DWORD PTR DS:[EBX]               ; USER32.MessageBoxA


004121A2    899D FD4E4000   MOV DWORD PTR SS:[EBP+404EFD],EBX        ; [00414251]


004121A8    53              PUSH EBX


004121A9    8F85 F34C4000   POP DWORD PTR SS:[EBP+404CF3]            ; [00414047]



004121BB    8B59 38         MOV EBX,DWORD PTR DS:[ECX+38]            ; FirstThunk(Kernel32.dll)           


004121BE    03DA            ADD EBX,EDX


004121C0    8B3B            MOV EDI,DWORD PTR DS:[EBX]               ; KERNEL32.LoadLibraryA


004121C2    89BD A24F4000   MOV DWORD PTR SS:[EBP+404FA2],EDI        ; [004142F6]


004121C8    8D5B 04         LEA EBX,DWORD PTR DS:[EBX+4]


004121CB    8B1B            MOV EBX,DWORD PTR DS:[EBX]               ; KERNEL32.GetProcAddress


004121CD    899D A74F4000   MOV DWORD PTR SS:[EBP+404FA7],EBX        ; [004142FB]



// 下面这段循环比较巧妙, 壳反复使用这种技巧,  仔细体会



004121FD    BB 27000000     MOV EBX,27


00412202    B9 84120000     MOV ECX,1284                             ; 长度


00412207    8DBD D84F4000   LEA EDI,DWORD PTR SS:[EBP+404FD8]        ; 41432C


0041220D    4F              DEC EDI


0041221A    301C39          XOR BYTE PTR DS:[ECX+EDI],BL             ; SMC 代码


0041221D    FECB            DEC BL


0041221F    49              DEC ECX


00412220    9C              PUSHFD                                   ; 这里很关键, 当 ECX=0, 影响 00412245 结果


0041222A    C12C24 06       SHR DWORD PTR SS:[ESP],6


0041222E    F71424          NOT DWORD PTR SS:[ESP]


00412231    832424 01       AND DWORD PTR SS:[ESP],1


00412235    50              PUSH EAX


00412236    52              PUSH EDX


00412237    B8 79B2DC12     MOV EAX,12DCB279


0041223C    05 444D23ED     ADD EAX,ED234D44


00412241    F76424 08       MUL DWORD PTR SS:[ESP+8]


00412245    8D8428 092F4000 LEA EAX,DWORD PTR DS:[EAX+EBP+402F09]    ; ECX=0 时, EAX=0, 可直接计算出口地址


0041224C    894424 08       MOV DWORD PTR SS:[ESP+8],EAX


00412250    5A              POP EDX


00412251    58              POP EAX


00412252    8D6424 04       LEA ESP,DWORD PTR SS:[ESP+4]


00412256    FF6424 FC       JMP DWORD PTR SS:[ESP-4]                 ; 0041221A(ECX>0), 0041225D(ECX=0), 第一次


0041225D   /EB 01           JMP SHORT PESpin.00412260



004122E8  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                 ; 00412294(ECX>0), 004122EF(ECX=0), 第二次


004122EF    E8 02000000     CALL PESpin.004122F6



// 求 Kernel32 Base Address



0041417E    8B7C24 20       MOV EDI,DWORD PTR SS:[ESP+20]            ; KERNEL32.7C598989


00414182    81E7 0000FFFF   AND EDI,FFFF0000


00414199    BA 246BDE21     MOV EDX,21DE6B24


0041419E    81F2 6931DE21   XOR EDX,21DE3169


004141A4    66:3917         CMP WORD PTR DS:[EDI],DX                 ; "MZ"


004141A7    75 17           JNZ SHORT PESpin.004141C0


004141A9    81C2 EFA5FFFF   ADD EDX,FFFFA5EF                         ; 3C


004141AF    0FB7143A        MOVZX EDX,WORD PTR DS:[EDX+EDI]


004141B3    66:F7C2 00F8    TEST DX,0F800


004141B8    75 06           JNZ SHORT PESpin.004141C0


004141BA    3B7C3A 34       CMP EDI,DWORD PTR DS:[EDX+EDI+34]        ; KERNEL32.7C570000


004141BE   /74 08           JE SHORT PESpin.004141C8


004141C0    81EF 00000100   SUB EDI,10000


004141C6  ^ EB C0           JMP SHORT PESpin.00414188                ; 实际到 00414199


004141C8    97              XCHG EAX,EDI                             ; KERNEL32.7C570000



// 求出 壳要用的其他 API,  先比较 API 名字的第三个字符, 再比较名字的 Hash


// 这里有一些 SMC, 不是很明显



004141E0    8785 014F4000   XCHG DWORD PTR SS:[EBP+404F01],EAX       ; [00414255]


00414373    8BF0            MOV ESI,EAX                              ; KERNEL32.7C570000


00414375    0340 3C         ADD EAX,DWORD PTR DS:[EAX+3C]


00414378    FF70 7C         PUSH DWORD PTR DS:[EAX+7C]               ; ExportSize


0041437B    8F85 FC504000   POP DWORD PTR SS:[EBP+4050FC]            ; [00414450]


00414381    8B40 78         MOV EAX,DWORD PTR DS:[EAX+78]            ; ExportRVA


00414384    03C6            ADD EAX,ESI


00414386    50              PUSH EAX


00414387    8F85 F2504000   POP DWORD PTR SS:[EBP+4050F2]            ; [00414446]


0041438D    FF70 20         PUSH DWORD PTR DS:[EAX+20]               ; AddressOfNames


00414390    5B              POP EBX


00414391    03DE            ADD EBX,ESI                              ; KERNEL32.7C570000


00414393    FF70 18         PUSH DWORD PTR DS:[EAX+18]               ; NumberOfNames


00414396    8F85 DE504000   POP DWORD PTR SS:[EBP+4050DE]            ; [00414432]


0041439C    FF70 24         PUSH DWORD PTR DS:[EAX+24]               ; AddressOfNameOrdinals


0041439F    5A              POP EDX


004143A0    03D6            ADD EDX,ESI                              ; KERNEL32.7C570000


004143A2    FF70 1C         PUSH DWORD PTR DS:[EAX+1C]               ; AddressOfFunctions


004143A6    03CE            ADD ECX,ESI                              ; KERNEL32.7C570000


004143A8    898D CE504000   MOV DWORD PTR SS:[EBP+4050CE],ECX        ; [00414422]



004143B1    83C7 05         ADD EDI,5                                ; 每个 API 占 5 个 byte


004143B4    833F 00         CMP DWORD PTR DS:[EDI],0                 ; 00414264


004143B7    0F84 13010000   JE PESpin.004144D0                       ; 所有 API 处理完了, 大出口


004143BD    8A07            MOV AL,BYTE PTR DS:[EDI]


004143BF    8885 92504000   MOV BYTE PTR SS:[EBP+405092],AL          ; [004143E6]


004143C5    FF77 01         PUSH DWORD PTR DS:[EDI+1]


004143C8    8F85 BE504000   POP DWORD PTR SS:[EBP+4050BE]            ; [00414412]


004143CE    53              PUSH EBX


004143CF    52              PUSH EDX


004143D0    57              PUSH EDI


004143D1    2BC9            SUB ECX,ECX



004143DF    8B3B            MOV EDI,DWORD PTR DS:[EBX]               ; AddressOfNames


004143E1    03FE            ADD EDI,ESI                              ; KERNEL32.7C570000


004143E3    807F 02 69      CMP BYTE PTR DS:[EDI+2],69               ; 比较名字的第三个字符


004143E7   /75 43           JNZ SHORT PESpin.0041442C



004143E9    E8 02000000     CALL PESpin.004143F0                     ; 实际上 CALL 004144D6 (计算 API 名字Hash)



00414411    3D 3368EFDA     CMP EAX,DAEF6833                         ; 比较 Hash


00414416    75 14           JNZ SHORT PESpin.0041442C


00414418    8D044A          LEA EAX,DWORD PTR DS:[EDX+ECX*2]


0041441B    0FB700          MOVZX EAX,WORD PTR DS:[EAX]


0041441E    C1E0 02         SHL EAX,2


00414421    05 58425C7C     ADD EAX,7C5C4258


00414426    8B00            MOV EAX,DWORD PTR DS:[EAX]


00414428    03C6            ADD EAX,ESI


0041442A    EB 0E           JMP SHORT PESpin.0041443A                ; 找到了一个 API, 小出口



0041442C   \83C3 04         ADD EBX,4                                ; Export 中下一个


0041442F    41              INC ECX


00414430    81F9 3D030000   CMP ECX,33D


00414436  ^ 75 A7           JNZ SHORT PESpin.004143DF



                004144D6    52              PUSH EDX                                 ; 对 string 计算 Hash                                ;        


                004144D7    83CA FF         OR EDX,FFFFFFFF


                004144E6    8A07            MOV AL,BYTE PTR DS:[EDI]                 ; 指向 API 名字


                004144E8    0AC0            OR AL,AL


                004144EA   /74 32           JE SHORT PESpin.0041451E


                004144FD    47              INC EDI                                  ; KERNEL32.7C5C63CD


                004144FE    32D0            XOR DL,AL


                00414500    B0 08           MOV AL,8


                0041450E    D1EA            SHR EDX,1


                00414510   /73 06           JNB SHORT PESpin.00414518


                00414512   |81F2 2083B8ED   XOR EDX,EDB88320


                00414518   \FEC8            DEC AL


                0041451A  ^\75 E6           JNZ SHORT PESpin.00414502                ; 实际上 0041450E


                0041451C  ^\EB C8           JMP SHORT PESpin.004144E6


                0041451E    33FF            XOR EDI,EDI


                0041452C    92              XCHG EAX,EDX


                0041455F    5A              POP EDX                                  ;


                00414560    C3              RETN



0041443A    5F              POP EDI                                  ; PESpin.00414264


0041443B    5A              POP EDX


0041443C    5B              POP EBX


0041443D    0BC0            OR EAX,EAX


0041443F    0F84 8D000000   JE PESpin.004144D2


00414445    B9 30425C7C     MOV ECX,7C5C4230                         ; 再比较地址是否位于 Export 范围内, 如果是的话, 指向另一 DLL 的另一 API


0041444A    3BC1            CMP EAX,ECX


0041444C    76 63           JBE SHORT PESpin.004144B1


0041444E    81C1 115C0000   ADD ECX,5C11


00414454    3BC8            CMP ECX,EAX


00414456    76 59           JBE SHORT PESpin.004144B1



00414458    60              PUSHAD                                   ; 2K 下上面的情况我们没遇到, XP 下就会遇到                     


00414459    8DBD AC2C4000   LEA EDI,DWORD PTR SS:[EBP+402CAC]


0041445F    96              XCHG EAX,ESI


00414460    33C9            XOR ECX,ECX


00414462    8A0431          MOV AL,BYTE PTR DS:[ECX+ESI]


00414465    3C 2E           CMP AL,2E                                ; "."


00414467    74 04           JE SHORT PESpin.0041446D


00414469    41              INC ECX


0041446A    AA              STOS BYTE PTR ES:[EDI]


0041446B  ^ EB F5           JMP SHORT PESpin.00414462


0041446D    41              INC ECX


0041446E    03F1            ADD ESI,ECX


00414470    56              PUSH ESI


00414471    2C 2E           SUB AL,2E


00414473    AA              STOS BYTE PTR ES:[EDI]


00414474    2BF9            SUB EDI,ECX


00414476    57              PUSH EDI


00414477    8DBD 104F4000   LEA EDI,DWORD PTR SS:[EBP+404F10]


0041447D    B9 92000000     MOV ECX,92


00414482    FF1439          CALL DWORD PTR DS:[ECX+EDI]               ; LoadLibrary


00414491    8DBD 017F1246   LEA EDI,DWORD PTR SS:[EBP+46127F01]


00414497    81EF 7E18A845   SUB EDI,45A8187E


0041449D    81EF 73172A00   SUB EDI,2A1773


004144A3    B9 97000000     MOV ECX,97


004144A8    50              PUSH EAX


004144A9    FF1439          CALL DWORD PTR DS:[ECX+EDI]               ; GetProcAddress


004144AC    894424 1C       MOV DWORD PTR SS:[ESP+1C],EAX


004144B0    61              POPAD



004144BA    B9 E72BFFFF     MOV ECX,FFFF2BE7


004144BF    32CD            XOR CL,CH


004144C1    3808            CMP BYTE PTR DS:[EAX],CL                  ; CC, Int3


004144C3    75 03           JNZ SHORT PESpin.004144C8


004144C5    8028 00         SUB BYTE PTR DS:[EAX],0                   ; 如果有断点, 这里就会触发非法访问异常


004144C8    8947 01         MOV DWORD PTR DS:[EDI+1],EAX              ; 用 API 地址替换原来的 Hash


004144CB  ^\E9 E1FEFFFF     JMP PESpin.004143B1                       ; 下一个



004144D0    0BC0            OR EAX,EAX



用到的 API 有 ExitProcess, VirtualProtect, CloseHandle, VirtualAlloc, VirtualFree, CreateFileA, ReadFile, GetTickCount,


GetModuleHandleA, CreateThread, Sleep, GetCurrentProcessId, OpenProcess, TerminateProcess, GetFileSize, GetModuleFileNameA,


CreateMutexA, CreateProcessA, GetCommandLineA, GetLastError, GetThreadContext, SetThreadContext, VirtualProtectEx, WaitForDebugEvent,


ContinueDebugEvent, ReadProcessMemory, WriteProcessMemory, VirtualQueryEx



// 继续 SMC



00412322    2BC9            SUB ECX,ECX


00412324    80C9 25         OR CL,25


00412327    8D85 48D7460F   LEA EAX,DWORD PTR SS:[EBP+F46D748]


0041232D    85C0            TEST EAX,EAX


0041232F    81F3 4823D90E   XOR EBX,0ED92348


00412335    49              DEC ECX


00412336    9C              PUSHFD


...


0041236C  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                 ; 0041232F(ECX>0), 00412374(ECX=0), 第三次


00412374    2D A970060F     SUB EAX,0F0670A9


00412379    0BC0            OR EAX,EAX



00412390    BB 3F317A02     MOV EBX,27A313F


00412395    8DBD 1DE043ED   LEA EDI,DWORD PTR SS:[EBP+ED43E01D]


0041239B    81EF C17D03ED   SUB EDI,ED037DC1


004123A1    68 31130000     PUSH 1331


004123A6    59              POP ECX


004123A7    C1EB 03         SHR EBX,3


004123AA   /72 06           JB SHORT PESpin.004123B2


004123AC   |81EB B48765F0   SUB EBX,F06587B4


004123B2    FE07            INC BYTE PTR DS:[EDI]


004123B4    301F            XOR BYTE PTR DS:[EDI],BL


004123B6    47              INC EDI


004123B7    49              DEC ECX


004123B8    9C              PUSHFD


...


004123E8  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                 ; 004123A7(ECX>0), 004123F2(ECX=0), 第四次



00415A24    41              INC ECX


00415A25    9C              PUSHFD


...


00415A51  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                 ; 00415A09(ECX<0), 00415A72(ECX=0), 第五次



// 为父进程做标志, 为子进程选另一条路



00415A72    8D85 D8624000   LEA EAX,DWORD PTR SS:[EBP+4062D8]        ; 0041562C, "MDYGINTX"


00415A78    50              PUSH EAX


00415A79    6A 00           PUSH 0


00415A7B    6A 00           PUSH 0


00415A7D    8D85 8283C9ED   LEA EAX,DWORD PTR SS:[EBP+EDC98382]


00415A83    2D 213489ED     SUB EAX,ED893421                         ;


00415A88    FF10            CALL DWORD PTR DS:[EAX]                  ; KERNEL32.CreateMutexA


00415A8A    8985 D4624000   MOV DWORD PTR SS:[EBP+4062D4],EAX        ; [00415628]


00415A90    8D85 6C1E1F03   LEA EAX,DWORD PTR SS:[EBP+31F1E6C]


00415A96    2D FCCEDE02     SUB EAX,2DECEFC


00415A9B    FF10            CALL DWORD PTR DS:[EAX]                  ; KERNEL32.GetLastError



00415A9D    BB CA7DB9FE     MOV EBX,FEB97DCA


00415AA2    81EB 137DB9FE   SUB EBX,FEB97D13                         ; B7


00415AA8    3BC3            CMP EAX,EBX                              ; 相等表示 Mutex 已存在


00415AAA    9C              PUSHFD                                   ; 父子进程的命运在此决定 *******************************************


00415AAB    C12C24 06       SHR DWORD PTR SS:[ESP],6


00415AAF    F71424          NOT DWORD PTR SS:[ESP]


00415AB2    832424 01       AND DWORD PTR SS:[ESP],1


00415AB6    58              POP EAX


00415AB7    2BD2            SUB EDX,EDX


00415AB9    BB BAE74D02     MOV EBX,24DE7BA


00415ABE    81EB 86E74D02   SUB EBX,24DE786


00415AC4    F7E3            MUL EBX


00415AC6    81CB FE12F40E   OR EBX,0EF412FE


00415ACC    8D8428 B40291ED LEA EAX,DWORD PTR DS:[EAX+EBP+ED9102B4]


00415AD3    2D 179B50ED     SUB EAX,ED509B17


00415AD8    FFE0            JMP EAX                                  ; 父进程走 00415B25,  子进程走 00415AF1



// 我们先看看父进程



// CreateProcess



00415B36    B9 00100000     MOV ECX,1000                             ; size


00415B3B    6A 04           PUSH 4


00415B3D    68 00300000     PUSH 3000


00415B42    51              PUSH ECX


00415B43    6A 00           PUSH 0


00415B45    8D85 214F4000   LEA EAX,DWORD PTR SS:[EBP+404F21]


00415B4B    48              DEC EAX


00415B4C    FF10            CALL DWORD PTR DS:[EAX]                  ; KERNEL32.VirtualAlloc


00415B4E    8985 A0624000   MOV DWORD PTR SS:[EBP+4062A0],EAX        ; [004155F4], buffer1, 保留子进程的 ThreadID 和 hThread 用


00415B54    B9 00100000     MOV ECX,1000                             ; size


00415B59    6A 04           PUSH 4


00415B5B    68 00300000     PUSH 3000


00415B60    51              PUSH ECX


00415B61    6A 00           PUSH 0


00415B63    8D85 214F4000   LEA EAX,DWORD PTR SS:[EBP+404F21]


00415B69    48              DEC EAX


00415B6A    FF10            CALL DWORD PTR DS:[EAX]                  ; KERNEL32.VirtualAlloc


00415B6C    8985 C4624000   MOV DWORD PTR SS:[EBP+4062C4],EAX        ; [00415618], buffer2,  给 mov reg1, [reg2+offset] 用的



00415BA0    C785 EE624000 4>MOV DWORD PTR SS:[EBP+4062EE],44         ; [00415642], StartupInfo


00415BAA    8D85 6C4F4000   LEA EAX,DWORD PTR SS:[EBP+404F6C]


00415BB0    48              DEC EAX


00415BB1    FF10            CALL DWORD PTR DS:[EAX]                  ; KERNEL32.GetCommandLineA


00415BB3    8BF8            MOV EDI,EAX


00415BB5    8BD0            MOV EDX,EAX                              ; EDX -> CommandLine


00415BB7    803F 22         CMP BYTE PTR DS:[EDI],22                 ; 双引号


00415BBA    75 1A           JNZ SHORT PESpin.00415BD6



00415BBC    83C9 FF         OR ECX,FFFFFFFF


00415BBF    47              INC EDI


00415BC0    8BF7            MOV ESI,EDI


00415BC2    B0 22           MOV AL,22


00415BC4    F2:AE           REPNE SCAS BYTE PTR ES:[EDI]


00415BC6    F7D1            NOT ECX


00415BC8    49              DEC ECX                                  ; 去掉双引号的长度


00415BC9    8BBD A0624000   MOV EDI,DWORD PTR SS:[EBP+4062A0]


00415BCF    8BDF            MOV EBX,EDI                                  ; EBX -> buffer1


00415BD1    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] ; 复制到 buffer1


00415BD3    2AC0            SUB AL,AL


00415BD5    AA              STOS BYTE PTR ES:[EDI]



00415BE2    8DB5 EE624000   LEA ESI,DWORD PTR SS:[EBP+4062EE]         ; 00415642, pStartupInfo


00415BE8    8DBD 32634000   LEA EDI,DWORD PTR SS:[EBP+406332]         ; 00415686, pProcessInfo


00415BEE    8D85 5D2E8663   LEA EAX,DWORD PTR SS:[EBP+63862E5D]


00415BF4    57              PUSH EDI


00415BF5    56              PUSH ESI


00415BF6    6A 00           PUSH 0


00415BF8    6A 00           PUSH 0



00415C0B    6A 03           PUSH 3


00415C0D    6A 01           PUSH 1


00415C0F    6A 00           PUSH 0


00415C11    6A 00           PUSH 0


00415C13    2D F8DE4563     SUB EAX,6345DEF8


00415C18    52              PUSH EDX


00415C19    53              PUSH EBX


00415C1A    40              INC EAX


00415C1B    FF10            CALL DWORD PTR DS:[EAX]                   ; KERNEL32.CreateProcessA



    0012FF74   00415C1D  /CALL to CreateProcessA from PESpin.00415C1B


                0012FF78   00880000  |ModuleFileName = "E:\pespin13\PESpin.exe"


                0012FF7C   00132610  |CommandLine = ""E:\pespin13\PESpin.exe""


                0012FF80   00000000  |pProcessSecurity = NULL


                0012FF84   00000000  |pThreadSecurity = NULL


                0012FF88   00000001  |InheritHandles = TRUE


                0012FF8C   00000003  |CreationFlags = DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS


                0012FF90   00000000  |pEnvironment = NULL


                0012FF94   00000000  |CurrentDir = NULL


                0012FF98   00415642  |pStartupInfo = PESpin.00415642


                0012FF9C   00415686  \pProcessInfo = PESpin.00415686



00415C1D    0BC0            OR EAX,EAX                                 


00415C1F    0F84 68060000   JE PESpin.0041628D                        ; 不成功直接退出



// 调试循环



00415C5D    8D9D 42634000   LEA EBX,DWORD PTR SS:[EBP+406342]         ; 00415696, DebugEvent


00415C63    8D85 854F4000   LEA EAX,DWORD PTR SS:[EBP+404F85]


00415C69    6A FF           PUSH -1                                   ; 无限等待


00415C6B    53              PUSH EBX


00415C6C    48              DEC EAX


00415C6D    FF10            CALL DWORD PTR DS:[EAX]                   ; KERNEL32.WaitForDebugEvent



00415C6F    0BC0            OR EAX,EAX


00415C71    0F84 16060000   JE PESpin.0041628D                        ; 结束



00415C77    8B85 42634000   MOV EAX,DWORD PTR SS:[EBP+406342]         ; dwDebugEventCode


00415C7D    35 C19B54D3     XOR EAX,D3549BC1


00415C82    3D C29B54D3     CMP EAX,D3549BC2


00415C87    0F84 D4050000   JE PESpin.00416261                        ; CREATE_PROCESS_DEBUG_EVENT, 好象没干什么活, 最后跳到 00415CB5



00415C8D    3D C09B54D3     CMP EAX,D3549BC0


00415C92    74 50           JE SHORT PESpin.00415CE4                  ; EXCEPTION_DEBUG_EVENT



00415C94    3D C49B54D3     CMP EAX,D3549BC4


00415C99    0F84 EE050000   JE PESpin.0041628D                        ; EXIT_PROCESS_DEBUG_EVENT



00415C9F    3D C39B54D3     CMP EAX,D3549BC3


00415CA4    0F84 33050000   JE PESpin.004161DD                        ; CREATE_THREAD_DEBUG_EVENT, 增加成员到 Buffer1



00415CAA    3D C59B54D3     CMP EAX,D3549BC5


00415CAF    0F84 69050000   JE PESpin.0041621E                        ; EXIT_THREAD_DEBUG_EVENT, 减少 Buffer1 成员



00415CB5    B8 127DB87E     MOV EAX,7EB87D12


00415CBA    35 137DB9FE     XOR EAX,FEB97D13


00415CBF    50              PUSH EAX                                  ; 80010001, DBG_EXCEPTION_NOT_HANDLED


00415CC0    FFB5 4A634000   PUSH DWORD PTR SS:[EBP+40634A]            ; dwThreadId


00415CC6    FFB5 46634000   PUSH DWORD PTR SS:[EBP+406346]            ; dwProcessId


00415CCC    8D85 8A4F4000   LEA EAX,DWORD PTR SS:[EBP+404F8A]


00415CD2    48              DEC EAX


00415CD3    FF10            CALL DWORD PTR DS:[EAX]                   ; KERNEL32.ContinueDebugEvent



00415CD5    8D85 219BA74F   LEA EAX,DWORD PTR SS:[EBP+4FA79B21]


00415CDB    05 E8CD98B0     ADD EAX,B098CDE8


00415CE0    FFE0            JMP EAX                                   ; 00415C5D



// 对异常的处理



00415CE4    8B85 4E634000   MOV EAX,DWORD PTR SS:[EBP+40634E]          ; EXCEPTION_DEBUG_EVENT 的处理代码


00415CEA    35 A1B97180     XOR EAX,8071B9A1


00415CEF    3D A2B97100     CMP EAX,71B9A2


00415CF4    74 1F           JE SHORT PESpin.00415D15                  ; 80 00 00 03 Int3


00415CF6    3D A5B97100     CMP EAX,71B9A5


00415CFB    0F84 C8030000   JE PESpin.004160C9                        ; 80 00 00 04 单步


00415D01    3D BCB97140     CMP EAX,4071B9BC


00415D06    74 5E           JE SHORT PESpin.00415D66                  ; C0 00 00 1D 非法指令


00415D08    8D85 49014800   LEA EAX,DWORD PTR SS:[EBP+480149]         ; 其他异常父进程都不处理


00415D0E    2D E8970700     SUB EAX,797E8


00415D13  ^\FFE0            JMP EAX                                   ; PESpin.00415CB5



00415D15    838D B4624000 0>OR DWORD PTR SS:[EBP+4062B4],0            ; [00415608] Int3 异常次数


00415D1C    75 39           JNZ SHORT PESpin.00415D57



         // 第一次 Int3 异常


00415D1E    FF85 B4624000   INC DWORD PTR SS:[EBP+4062B4]             ; 第一次, 系统异常


00415D2E    50              PUSH EAX                                  ; DBG_CONTINUE


00415D2F    FFB5 4A634000   PUSH DWORD PTR SS:[EBP+40634A]            ; dwThreadId


00415D35    FFB5 46634000   PUSH DWORD PTR SS:[EBP+406346]            ; dwProcessId


00415D3B    8D85 0A176B51   LEA EAX,DWORD PTR SS:[EBP+516B170A]


00415D41    2D 81C72A51     SUB EAX,512AC781


00415D46    FF10            CALL DWORD PTR DS:[EAX]                   ; KERNEL32.ContinueDebugEvent


00415D48    8D85 25A9150A   LEA EAX,DWORD PTR SS:[EBP+A15A925]


00415D4E    2D 1C40D509     SUB EAX,9D5401C


00415D53    FFE0            JMP EAX                                   ; 00415C5D



        // 第二次以上子进程自己处理


00415D57    8D85 02A577EF   LEA EAX,DWORD PTR SS:[EBP+EF77A502]


00415D5D    2D A13B37EF     SUB EAX,EF373BA1


00415D62  ^ FFE0            JMP EAX                                   ; PESpin.00415CB5



        // 第一次非法指令异常到这里


00415D66  ^\E9 4AFFFFFF     JMP PESpin.00415CB5                       ; 父进程不做处理, 子进程自己处理



        // 第二次非法指令异常到这里, 代码已被改变


00415D66   /EB 00           JMP SHORT PESpin.00415D68


00415D68   \EB 01           JMP SHORT PESpin.00415D6B


00415D6B    90              NOP


00415D6C    90              NOP


00415D6D    90              NOP


00415D6E    90              NOP


00415D6F    90              NOP


00415D70    EB 07           JMP SHORT PESpin.00415D79


00415D79  ^\EB F8           JMP SHORT PESpin.00415D73


00415D73   /EB 01           JMP SHORT PESpin.00415D76


00415D76   /EB 04           JMP SHORT PESpin.00415D7C



00415D7C    8B85 36634000   MOV EAX,DWORD PTR SS:[EBP+406336]          ; hThread


00415D82    F785 A4624000 F>TEST DWORD PTR SS:[EBP+4062A4],FFFFFFFF    ; [004155F8], 子进程有没有创建其他线程(0没有)


00415D8C   /74 33           JE SHORT PESpin.00415DC1



00415D8E    8BB5 A0624000   MOV ESI,DWORD PTR SS:[EBP+4062A0]          ; 存放线程信息的 Buffer1         


00415D94    8B8D A4624000   MOV ECX,DWORD PTR SS:[EBP+4062A4]          ; 已使用字节数


00415D9A    8B85 4A634000   MOV EAX,DWORD PTR SS:[EBP+40634A]          ; dwThreadID


00415DA9    3906            CMP DWORD PTR DS:[ESI],EAX


00415DAB   /74 1C           JE SHORT PESpin.00415DC9                   ; 相等表示异常不是主线程中发生的


00415DAD   |83C6 08         ADD ESI,8


00415DBC    83E9 08         SUB ECX,8


00415DBF  ^ 75 E8           JNZ SHORT PESpin.00415DA9



00415DC1    8B85 36634000   MOV EAX,DWORD PTR SS:[EBP+406336]          ; hThread, 主线程


00415DC7    EB 03           JMP SHORT PESpin.00415DCC



00415DC9    8B46 04         MOV EAX,DWORD PTR DS:[ESI+4]               ; hThread, 从线程 (异常发生在从线程, 从表中取 hThread)



00415DCC    E8 03000000     CALL PESpin.00415DD4


00415DDD    8985 A8624000   MOV DWORD PTR SS:[EBP+4062A8],EAX          ; [004155FC]


00415DE3    B8 13000100     MOV EAX,10013


00415DE8    8D95 4754AE34   LEA EDX,DWORD PTR SS:[EBP+34AE5447]


00415DEE    81EA 0CE16D34   SUB EDX,346DE10C


00415DF4    FFD2            CALL EDX                                   ; PESpin.0041668F, 类似 004166D5 调用  GetThreadContext


00415DF6    93              XCHG EAX,EBX


...


0041675F    8B041A          MOV EAX,DWORD PTR DS:[EDX+EBX]             ; EDX = B0h, regEax=0


00416762    8907            MOV DWORD PTR DS:[EDI],EAX                 ; [004155B0]


00416764    BA B3E40D00     MOV EDX,0DE4B3


00416769    81F2 1FE40D00   XOR EDX,0DE41F


0041676F    8B041A          MOV EAX,DWORD PTR DS:[EDX+EBX]             ; EDX = ACh, regEcx=0


00416772    8947 04         MOV DWORD PTR DS:[EDI+4],EAX



0041677E    BA 2700EC00     MOV EDX,0EC0027


00416783    81EA 7FFFEB00   SUB EDX,0EBFF7F


00416789    8B041A          MOV EAX,DWORD PTR DS:[EDX+EBX]             ; EDX = A8h, regEdx=-1


0041678C    8947 08         MOV DWORD PTR DS:[EDI+8],EAX



004167BD    BA 27EF0D00     MOV EDX,0DEF27


004167C2    81F2 83EF0D00   XOR EDX,0DEF83


004167C8    8B041A          MOV EAX,DWORD PTR DS:[EDX+EBX]             ; EDX = A4h, regEbx=7FFDF000


004167CB    8947 0C         MOV DWORD PTR DS:[EDI+C],EAX



004167CE    BA 5102FFFF     MOV EDX,FFFF0251


004167D3    81C2 73FE0000   ADD EDX,0FE73


004167D9    8B041A          MOV EAX,DWORD PTR DS:[EDX+EBX]             ; EDX = C4h, regEsp=12FFC4


004167DC    8947 10         MOV DWORD PTR DS:[EDI+10],EAX



004167EB    BA E5720C00     MOV EDX,0C72E5


004167F0    81EA 31720C00   SUB EDX,0C7231


004167F6    8B041A          MOV EAX,DWORD PTR DS:[EDX+EBX]             ; EDX = B4h, regEbp=12FFF0


004167F9    8947 14         MOV DWORD PTR DS:[EDI+14],EAX



0041682E    BA C1A3F9FF     MOV EDX,FFF9A3C1


00416833    81C2 DF5C0600   ADD EDX,65CDF


00416839    8B041A          MOV EAX,DWORD PTR DS:[EDX+EBX]             ; EDX = A0h, regEsi=1


0041683C    8947 18         MOV DWORD PTR DS:[EDI+18],EAX



0041683F    BA D5FB0900     MOV EDX,9FBD5


00416844    81EA 39FB0900   SUB EDX,9FB39


0041684A    8B041A          MOV EAX,DWORD PTR DS:[EDX+EBX]             ; EDX = 9Ch, regEdi=414913


0041684D    8947 1C         MOV DWORD PTR DS:[EDI+1C],EAX



00415E16    BA 2A14FFFF     MOV EDX,FFFF142A


00415E1B    8D92 8EEC0000   LEA EDX,DWORD PTR DS:[EDX+EC8E]


00415E21    8B0413          MOV EAX,DWORD PTR DS:[EBX+EDX]             ; EDX = B8h, regEip=4098F8( 已经进入程序代码空间) ***************************************************



00415E24    8DBD E1624000   LEA EDI,DWORD PTR SS:[EBP+4062E1]          ; 00415635


...


00415E8C  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                   ; 00415E5D(ECX>0), 00415E9A(ECX=0)


00415ED5   /FF6424 FC       JMP DWORD PTR SS:[ESP-4]                   ; PESpin.00415EE3


00415F14   /FF6424 FC       JMP DWORD PTR SS:[ESP-4]                   ; PESpin.00415F2F


00415F66  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                   ; 00415E41(ECX>0), 00415F70(ECX=0)  以上 4 个是嵌套的, 最终出口 415F70


                                                                       ; 作用就是把 Address->String(8位16进制)


...


00415F81    C647 08 00      MOV BYTE PTR DS:[EDI+8],0                  ; 00415635 "004098F8"


00415F85    8D85 901B1F13   LEA EAX,DWORD PTR SS:[EBP+131F1B90]


00415F8B    2D 0ECADE12     SUB EAX,12DECA0E


00415F90    FFD0            CALL EAX                                   ; PESpin.004144D6 (计算 Hash)



00415F92    8DBD BFAF530F   LEA EDI,DWORD PTR SS:[EBP+F53AFBF]         ; 破坏字符串


00415F98    81EF DE4C130F   SUB EDI,0F134CDE                           ; 00415635


00415F9E    B9 DE4613ED     MOV ECX,ED1346DE


00415FA3    BB B60D385A     MOV EBX,5A380DB6


00415FA8    2BCB            SUB ECX,EBX


00415FAA    C1E9 1C         SHR ECX,1C


00415FAD    2BDB            SUB EBX,EBX                                ; EBX = 0


00415FAF    49              DEC ECX                                    ; ECX = 8


00415FB0    8D95 A2D1540F   LEA EDX,DWORD PTR SS:[EBP+F54D1A2]


00415FB6    81EA 3665140F   SUB EDX,0F146536


00415FBC    03D1            ADD EDX,ECX


00415FBE    FFE2            JMP EDX


00415FC8    49              DEC ECX


...


00415FF8  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                   ; 00415FC8(ECX>0), 00416003(ECX=0)



0041600F    BF F36B4100     MOV EDI,PESpin.00416BF3                    ; 父进程放一个表, 处理子进程到 OEP 后的异常


00416014    B9 55010000     MOV ECX,155                                ; 总长 155 字节


0041602A    3B07            CMP EAX,DWORD PTR DS:[EDI]


0041602C   /74 26           JE SHORT PESpin.00416054                   ; 找到了, 出口


0041602E   |83C7 0B         ADD EDI,0B                                 ; 每段 0B 字节


0041603D    83E9 0B         SUB ECX,0B


00416040    0BC9            OR ECX,ECX


00416042  ^ 77 D5           JA SHORT PESpin.00416019                   ; 实际到 0041602A



00416044    8D85 D1C51E13     LEA EAX,DWORD PTR SS:[EBP+131EC5D1]      ; 找不到, 子进程自己处理


0041604A    2D 705CDE12       SUB EAX,12DE5C70


0041604F    FFE0              JMP EAX                                  ; 00415CB5



                00416BF3  9A 78 C3 A0 1E 00 00 00 03 01 02          ; 4098F8 , 对应的地址


                          82 14 AA 21 94 00 00 00 03 00 06          ; 409912


                          9F 92 FD DD 05 00 00 00 01 03 02          ; 40993E


                          8A 9E 73 E9 05 00 00 00 01 20 02          ; 409992


                          31 1E B4 EC 05 00 00 00 01 54 02          ; 4099BA


                          79 FB C9 4C 5F 00 00 00 03 00 02          ; 4099C7


                          FF DB C5 85 9C 04 00 00 03 00 06          ; 4099CD


                          BE 6D 88 03 27 00 00 00 03 00 02          ; 4099D7


                          38 4D 84 CA 34 04 00 00 03 00 06          ; 4099DD


                          FF 5C 93 1A 19 04 00 00 03 00 06          ; 4099E7         


                          09 AA DD D8 0F 04 00 00 03 00 06          ; 4099F1


                          88 89 37 FC C4 04 00 00 03 00 06          ; 409A05


                          46 4C 46 95 F0 03 00 00 03 00 06          ; 409A10


                    56 5C 4D 2B E9 04 00 00 03 00 06          ; 409A1B


                          C7 2D B7 CC 05 00 00 00 01 30 02          ; 409C4A


                          82 5E 96 2E 27 00 00 00 03 00 02          ; 409C72


                          8B 8A F0 97 03 00 00 00 01 71 02          ; 409C7D


                          58 C1 F1 70 16 00 00 00 03 00 02          ; 409CAC


                          EF 81 F2 34 20 00 00 00 03 01 02          ; 409CE6


                          98 2B EE 7A 20 00 00 00 03 01 02          ; 409D16


                          DD DF 99 07 20 00 00 00 03 01 02          ; 409D46


                          6B C1 25 32 11 00 00 00 03 01 02          ; 409D85


                          17 50 F5 E7 11 00 00 00 03 00 02          ; 409DB5


                          3B 31 FB 09 14 00 00 00 00 75 03          ; 409DB7


                          39 71 2B 0C 14 00 00 00 00 45 03          ; 409E17


                          30 A5 4D B5 08 00 00 00 00 40 03          ; 409E1A


                          75 D6 6C 57 07 00 00 00 03 00 02          ; 409E22


                          54 A6 68 64 10 00 00 00 00 5D 03          ; 409E6F


                          36 D6 4A 23 1B 00 00 00 03 00 02          ; 409E99


                          8A FC 63 5E 1C 00 00 00 03 01 02          ; 409ED7


                          DA 9E 64 97 01 00 00 00 01 03 02          ; 409F14                        



    structure table


    {


        dword AddressHash;


        dword offset;


        byte  Type;


        byte  Reg;


        byte  Length;(被偷指令长度)


    }



    对 Type = 0, Reg 表示两个 reg,    (3-5)reg1, (0-2)reg2, offset 表示偏移(1 or 4 byte),  mov reg1, [reg2+offset]


               


                对 Type = 1, Reg 表示两个 reg,    (4-7)reg1, (0-3)reg2, offset 表示五种运算  xxx reg1, reg2


               


                对 Type = 3, Reg=1 表示 JNZ,  Reg=0 表示 JZ,  offset 表示偏移(最高位表示方向, 1 or 4 byte)


               


                0 or ,  1 and , 2 xor, 3 add, 4 sub, 5 mov


                00 EAX, 01 ECX, 02 EDX, 03 EBX, 04 ESP, 05 EBP, 06 ESI, 07 EDI


               


                写一个程序, 计算 Hash 对应的地址和对应的二进制代码, 结果如下



deNanomite STRUCT


        dwAddr           DD ?               ; 对应的地址


        dwLen            DD ?               ; 代码长度


        dbCode           DB 8 dup(?)        ; 二进制代码


deNanomite ENDS


               


F8 98 40 00 02 00 00 00 75 1E 00 00 00 00 00 00


12 99 40 00 06 00 00 00 0F 84 94 00 00 00 00 00


3E 99 40 00 02 00 00 00 8B C3 00 00 00 00 00 00


92 99 40 00 02 00 00 00 8B D0 00 00 00 00 00 00


BA 99 40 00 02 00 00 00 8B EC 00 00 00 00 00 00


C7 99 40 00 02 00 00 00 74 5F 00 00 00 00 00 00


CD 99 40 00 06 00 00 00 0F 84 9C 04 00 00 00 00


D7 99 40 00 02 00 00 00 74 27 00 00 00 00 00 00


DD 99 40 00 06 00 00 00 0F 84 34 04 00 00 00 00


E7 99 40 00 06 00 00 00 0F 84 19 04 00 00 00 00


F1 99 40 00 06 00 00 00 0F 84 0F 04 00 00 00 00


05 9A 40 00 06 00 00 00 0F 84 C4 04 00 00 00 00


10 9A 40 00 06 00 00 00 0F 84 F0 03 00 00 00 00


1B 9A 40 00 06 00 00 00 0F 84 E9 04 00 00 00 00



4A 9C 40 00 02 00 00 00 8B D8 00 00 00 00 00 00


72 9C 40 00 02 00 00 00 74 27 00 00 00 00 00 00  


7D 9C 40 00 02 00 00 00 03 F9 00 00 00 00 00 00


AC 9C 40 00 02 00 00 00 74 16 00 00 00 00 00 00


E6 9C 40 00 02 00 00 00 75 20 00 00 00 00 00 00


16 9D 40 00 02 00 00 00 75 20 00 00 00 00 00 00


46 9D 40 00 02 00 00 00 75 20 00 00 00 00 00 00


85 9D 40 00 02 00 00 00 75 11 00 00 00 00 00 00


B5 9D 40 00 02 00 00 00 74 11 00 00 00 00 00 00


B7 9D 40 00 03 00 00 00 8B 75 14 00 00 00 00 00



17 9E 40 00 03 00 00 00 8B 45 14 00 00 00 00 00


1A 9E 40 00 03 00 00 00 8B 40 08 00 00 00 00 00


22 9E 40 00 02 00 00 00 74 07 00 00 00 00 00 00


6F 9E 40 00 03 00 00 00 8B 5D 10 00 00 00 00 00


99 9E 40 00 02 00 00 00 74 1B 00 00 00 00 00 00


D7 9E 40 00 02 00 00 00 75 1C 00 00 00 00 00 00



14 9F 40 00 02 00 00 00 23 C3 00 00 00 00 00 00



00416054    BE 0FD4FAFE     MOV ESI,FEFAD40F


00416059    81EE 137DB9FE   SUB ESI,FEB97D13                           ; 004156FC, pContext


0041605F    8D85 990880E1   LEA EAX,DWORD PTR SS:[EBP+E1800899]


00416065    2D 1B983FE1     SUB EAX,E13F981B


0041606A    FFD0            CALL EAX                                   ; 004163D2, 实际到 004163E3, 见后面, 很关键 ********************************************



0041607D    B8 FBCEEA6C     MOV EAX,6CEACEFB


00416082    2D F8CEE96C     SUB EAX,6CE9CEF8                           ; 10003


00416087    8D9D EDA354B8   LEA EBX,DWORD PTR SS:[EBP+B854A3ED]


0041608D    81EB DE3014B8   SUB EBX,B81430DE


00416093    FFD3            CALL EBX                                   ; 00416663, 类同 004168B0 去调用 SetThreadContext



00416095    B8 117DB8FE     MOV EAX,FEB87D11


0041609A    35 137DB9FE     XOR EAX,FEB97D13


0041609F    50              PUSH EAX                                  ; DBG_CONTINUE


004160A0    FFB5 4A634000   PUSH DWORD PTR SS:[EBP+40634A]


004160A6    FFB5 46634000   PUSH DWORD PTR SS:[EBP+406346]


004160AC    8D85 A46744F9   LEA EAX,DWORD PTR SS:[EBP+F94467A4]


004160B2    2D 1B1804F9     SUB EAX,F904181B


004160B7    FF10            CALL DWORD PTR DS:[EAX]                   ; KERNEL32.ContinueDebugEvent


004160B9    8D85 7C47EC80   LEA EAX,DWORD PTR SS:[EBP+80EC477C]


004160BF    2D 73DEAB80     SUB EAX,80ABDE73


004160C4    FFE0            JMP EAX                                   ; 00415C5D



004160C9   /EB 04           JMP SHORT PESpin.004160CF


004160D2    F785 B8624000 F>TEST DWORD PTR SS:[EBP+4062B8],FFFFFFFF   ; [0041560C]  单步异常次数


004160DC   /75 71           JNZ SHORT PESpin.0041614F



         // 第一次单步异常                                                


004160DE    FFB5 D4624000   PUSH DWORD PTR SS:[EBP+4062D4]            ; [00415628], hMutex


004160E4    8D85 1C4F4000   LEA EAX,DWORD PTR SS:[EBP+404F1C]


004160EA    48              DEC EAX


004160EB    FF10            CALL DWORD PTR DS:[EAX]                   ; KERNEL32.CloseHandle, 释放 Mutex



004160FE    B8 09311793     MOV EAX,93173109


00416103    05 F8CEE96C     ADD EAX,6CE9CEF8                          ; 10001


00416108    8D9D 5D704512   LEA EBX,DWORD PTR SS:[EBP+1245705D]


0041610E    81EB E5FC0412   SUB EBX,1204FCE5


00416114    FFD3            CALL EBX                                  ; 004166D5 去调用 GetThreadContext



                004166D5    A3 FC564100     MOV DWORD PTR DS:[4156FC],EAX            ; 10001


                004166DA    68 FC564100     PUSH PESpin.004156FC                     ; pContext


                004166DF    FFB5 36634000   PUSH DWORD PTR SS:[EBP+406336]           ; [0041568A], hThread


                004166F0    FF10            CALL DWORD PTR DS:[EAX]                  ; KERNEL32.GetThreadContext


                004166F2    0BC0            OR EAX,EAX


                004166F4    74 05           JE SHORT PESpin.004166FB


                004166F6    B8 FC564100     MOV EAX,PESpin.004156FC


                004166FB    C3              RETN


               


00416116    96              XCHG EAX,ESI                              ; pContext->ESI


00416117    B8 9A81FFFF     MOV EAX,FFFF819A


0041611C    8D80 1E7F0000   LEA EAX,DWORD PTR DS:[EAX+7F1E]           ; B8           


00416122    810406 1E000000 ADD DWORD PTR DS:[ESI+EAX],1E             ; regEip + 1E,  00415AF2->00415B10


00416129    B8 C09B55D3     MOV EAX,D3559BC0


0041612E    35 C19B54D3     XOR EAX,D3549BC1                          ; 10001


00416133    8D9D 53650E35   LEA EBX,DWORD PTR SS:[EBP+350E6553]


00416139    81EB F7EFCD34   SUB EBX,34CDEFF7


0041613F    FFD3            CALL EBX                                  ; 004168B0 去调用 SetThreadContext



                004168C1    A3 FC564100     MOV DWORD PTR DS:[4156FC],EAX         


                004168C6    68 FC564100     PUSH PESpin.004156FC


                004168CB    FFB5 36634000   PUSH DWORD PTR SS:[EBP+406336]        ; hThread


                004168D1    8D85 336C66D6   LEA EAX,DWORD PTR SS:[EBP+D6666C33]


                004168D7    2D B91C26D6     SUB EAX,D6261CB9


                004168DC    FF10            CALL DWORD PTR DS:[EAX]               ; KERNEL32.SetThreadContext


                004168DE    C3              RETN



00416141    8D9D 37510614   LEA EBX,DWORD PTR SS:[EBP+14065137]


00416147    81EB C3E2C513   SUB EBX,13C5E2C3


0041614D    FFE3            JMP EBX                                   ; 004161C8



0041614F    EB 04           JMP SHORT PESpin.00416155                 ; 实际到 416158


00416158    83BD B8624000 0>CMP DWORD PTR SS:[EBP+4062B8],1           ; 是第二次单步异常吗


0041615F    75 67           JNZ SHORT PESpin.004161C8



         // 第二次单步异常


00416161    B8 20451CD0     MOV EAX,D01C4520                          ; 第二次单步异常父进程 SMC 本身五个字节


00416166    35 CB45F7D1     XOR EAX,D1F745CB                          ; 01EB00EB


0041616B    8DBD 126A4000   LEA EDI,DWORD PTR SS:[EBP+406A12]         ; 00415D66,


00416171    AB              STOS DWORD PTR ES:[EDI]


00416172    B0 D3           MOV AL,0D3


00416174    AA              STOS BYTE PTR ES:[EDI]


0041617F    35 A1B97180     XOR EAX,8071B9A1                          ; 10001


00416184    8D9D 7472FE10   LEA EBX,DWORD PTR SS:[EBP+10FE7274]


0041618A    81EB FCFEBD10   SUB EBX,10BDFEFC


00416190    FFD3            CALL EBX                                  ; PESpin.004166CC,  类同 004166D5 去调用 GetThreadContext



00416192    96              XCHG EAX,ESI                              ; PESpin.004156FC


00416193    B8 B6810200     MOV EAX,281B6


00416198    35 0E810200     XOR EAX,2810E                             ; B8


0041619D    810406 2B000000 ADD DWORD PTR DS:[ESI+EAX],2B             ; regEip + 2B,  41638B->4163B6


004161A4    EB 07           JMP SHORT PESpin.004161AD



004161B0    B8 F9CEEA6C     MOV EAX,6CEACEF9


004161B5    2D F8CEE96C     SUB EAX,6CE9CEF8                          ; 10001


004161BA    8D9D 908539DF   LEA EBX,DWORD PTR SS:[EBP+DF398590]


004161C0    81EB 3410F9DE   SUB EBX,DEF91034


004161C6    FFD3            CALL EBX                                  ; 004168B0 去调用 SetThreadContext



       // 第三次以上单步异常


004161C8    FF85 B8624000   INC DWORD PTR SS:[EBP+4062B8]             ; 单步次数加 1


004161CE    8D85 302B129F   LEA EAX,DWORD PTR SS:[EBP+9F122B30]


004161D4    2D EFBDD19E     SUB EAX,9ED1BDEF


004161D9    FFE0            JMP EAX                                   ; 00416095, 父进程已处理, 子进程不用处理



// 新线程创建的处理


004161DD    E8 03000000     CALL PESpin.004161E5


004161EE    8B85 4A634000   MOV EAX,DWORD PTR SS:[EBP+40634A]         ; dwThreadID(新)


004161F4    8BBD A0624000   MOV EDI,DWORD PTR SS:[EBP+4062A0]         ; EDI-> buffer1


004161FA    03BD A4624000   ADD EDI,DWORD PTR SS:[EBP+4062A4]         ; 已使用字节数


00416200    AB              STOS DWORD PTR ES:[EDI]                   ; dwThreadID                  



00416201    8B85 4E634000   MOV EAX,DWORD PTR SS:[EBP+40634E]          ; hThread(新)


00416207    AB              STOS DWORD PTR ES:[EDI]


00416208    8385 A462400008 ADD DWORD PTR SS:[EBP+4062A4],8           ; 用了 8 字节



0041620F    8D85 80277209     LEA EAX,DWORD PTR SS:[EBP+9722780]


00416215    2D 1FBE3109       SUB EAX,931BE1F


0041621A  ^\FFE0              JMP EAX                                 ; PESpin.00415CB5, 父进程保留 dwThreadID 和 hThread



// 新线程退出的处理


0041621E    8BB5 A0624000     MOV ESI,DWORD PTR SS:[EBP+4062A0]       ; ESI->Buffer1


00416224    8B8D A4624000     MOV ECX,DWORD PTR SS:[EBP+4062A4]       ; 已使用字节数      


0041622A    8B85 4A634000     MOV EAX,DWORD PTR SS:[EBP+40634A]       ; 退出的线程 ID


00416230    8D1C31            LEA EBX,DWORD PTR DS:[ECX+ESI]


00416233    3906              CMP DWORD PTR DS:[ESI],EAX              ; 搜索数组


00416235    74 0A             JE SHORT PESpin.00416241


00416237    83C6 08           ADD ESI,8


0041623A    83E9 08           SUB ECX,8


0041623D  ^ 75 F4             JNZ SHORT PESpin.00416233


0041623F    EB 12             JMP SHORT PESpin.00416253               ; 没有, 直接退出



00416241    8BFE              MOV EDI,ESI                             ; 找到了, 去掉该成员


00416243    83C6 08           ADD ESI,8


00416246    83AD A4624000 08  SUB DWORD PTR SS:[EBP+4062A4],8


0041624D    87CB              XCHG EBX,ECX


0041624F    2BCE              SUB ECX,ESI


00416251    F3:A4             REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]



00416253    8D85 F5D86D01     LEA EAX,DWORD PTR SS:[EBP+16DD8F5]


00416259    2D 946F2D01       SUB EAX,12D6F94


0041625E  ^\FFE0              JMP EAX                                 ; PESpin.00415CB5



       //  处理子进程的的关键代码


004163E3    60              PUSHAD


004163E4    0FB647 08       MOVZX EAX,BYTE PTR DS:[EDI+8]             ; Table.Type


004163E8    8D9D 54C01F02   LEA EBX,DWORD PTR SS:[EBP+21FC054]


004163EE    81EB EE4FDF01   SUB EBX,1DF4FEE                           ; 004163BA


004163F4    8B0483          MOV EAX,DWORD PTR DS:[EBX+EAX*4]


004163F7    2D 6FD45CE3     SUB EAX,E35CD46F


004163FC    03C5            ADD EAX,EBP                               ; 0-41641D       1-41647F        3-416539


0041640F   /FFE0            JMP EAX                                   ; EAX



0041641D   /EB 04           JMP SHORT PESpin.00416426


00416426    0FB65F 09       MOVZX EBX,BYTE PTR DS:[EDI+9]             ; Table.Reg


0041642A    2BC0            SUB EAX,EAX


0041642C    8AC3            MOV AL,BL


0041642E    24 07           AND AL,7


00416430    C1E0 02         SHL EAX,2                                 ; * 4


00416433    8B8428 5C624000 MOV EAX,DWORD PTR DS:[EAX+EBP+40625C]     ; reg2


0041643A    807F 0A 03      CMP BYTE PTR DS:[EDI+A],3                 ; offset 是 dword or byte?


0041643E    75 16           JNZ SHORT PESpin.00416456



00416440    0FBA67 04 07    BT DWORD PTR DS:[EDI+4],7                 ; 符号位


00416445    73 0F           JNB SHORT PESpin.00416456


00416447    8B4F 04         MOV ECX,DWORD PTR DS:[EDI+4]


0041644A    F7D9            NEG ECX                                   ; 取反


0041644C    81E1 FF000000   AND ECX,0FF


00416452    2BC1            SUB EAX,ECX                                ; reg2+offset( 1 byte, 负数)


00416454    EB 03           JMP SHORT PESpin.00416459



00416456    0347 04         ADD EAX,DWORD PTR DS:[EDI+4]               ; reg2+offset



00416459    2BC9            SUB ECX,ECX


0041645B    80C9 04         OR CL,4


0041645E    E8 9F020000     CALL PESpin.00416702                       ; ReadProcessMemory [reg2+offset], 见下面


00416463    8B00            MOV EAX,DWORD PTR DS:[EAX]                 ; [reg2+offset]


00416465    C0EB 03         SHR BL,3                                   


00416468    80E3 07         AND BL,7                                   ; (3-5)


0041646B    C1E3 02         SHL EBX,2


0041646E    8B9C2B 80624000 MOV EBX,DWORD PTR DS:[EBX+EBP+406280]      


00416475    890433          MOV DWORD PTR DS:[EBX+ESI],EAX             ; reg1


00416478    E9 BB010000     JMP PESpin.00416638



0041647F    0FB647 09       MOVZX EAX,BYTE PTR DS:[EDI+9]             ; Table.Reg


00416483    2BDB            SUB EBX,EBX


00416485    8AD8            MOV BL,AL


00416487    80E3 0F         AND BL,0F


0041648A    C0C8 04         ROR AL,4                                  ; (4-7)


0041648D    24 0F           AND AL,0F


0041648F    8B9C9D 5C624000 MOV EBX,DWORD PTR SS:[EBP+EBX*4+40625C]   ; reg2


00416496    8B9485 5C624000 MOV EDX,DWORD PTR SS:[EBP+EAX*4+40625C]   ; reg1


0041649D    8B8485 80624000 MOV EAX,DWORD PTR SS:[EBP+EAX*4+406280]   ; 004155D4


004164A4    834F 04 00      OR DWORD PTR DS:[EDI+4],0


004164A8    75 04           JNZ SHORT PESpin.004164AE


004164AA    0BD3            OR EDX,EBX                                ; 0 = or


004164AC    EB 30           JMP SHORT PESpin.004164DE


004164AE    837F 04 01      CMP DWORD PTR DS:[EDI+4],1


004164B2    75 04           JNZ SHORT PESpin.004164B8


004164B4    23D3            AND EDX,EBX                               ; 1 = and


004164B6    EB 26           JMP SHORT PESpin.004164DE


004164B8    837F 04 02      CMP DWORD PTR DS:[EDI+4],2


004164BC    75 04           JNZ SHORT PESpin.004164C2


004164BE    33D3            XOR EDX,EBX                               ; 2 = xor


004164C0    EB 1C           JMP SHORT PESpin.004164DE


004164C2    837F 04 03      CMP DWORD PTR DS:[EDI+4],3


004164C6    75 04           JNZ SHORT PESpin.004164CC


004164C8    03D3            ADD EDX,EBX                               ; 3 = add


004164CA    EB 12           JMP SHORT PESpin.004164DE


004164CC    837F 04 04      CMP DWORD PTR DS:[EDI+4],4


004164D0    75 04           JNZ SHORT PESpin.004164D6


004164D2    2BD3            SUB EDX,EBX                               ; 4 = sub


004164D4    EB 08           JMP SHORT PESpin.004164DE


004164D6    837F 04 05      CMP DWORD PTR DS:[EDI+4],5


004164DA    87D3            XCHG EBX,EDX                              ; 其他 mov


004164DC    EB 0F           JMP SHORT PESpin.004164ED


004164DE    9C              PUSHFD


004164DF    BB B8CFE96C     MOV EBX,6CE9CFB8


004164E4    81EB F8CEE96C   SUB EBX,6CE9CEF8                          ; C0, Elags


004164EA    8F0433          POP DWORD PTR DS:[EBX+ESI]                ; 除了 Mov, 其他还需要处理标志位


004164ED    891430          MOV DWORD PTR DS:[EAX+ESI],EDX


004164F0    E9 43010000     JMP PESpin.00416638



00416539    BB 61BA7180     MOV EBX,8071BA61                          ; Type = 3


0041653E    81EB A1B97180   SUB EBX,8071B9A1                          ; C0


00416544    8B1433          MOV EDX,DWORD PTR DS:[EBX+ESI]            ; ESI = 004156FC, regEflag


00416547    C1EA 06         SHR EDX,6


00416553    8B47 04         MOV EAX,DWORD PTR DS:[EDI+4]              ; Table.offset


00416556    0FB65F 09       MOVZX EBX,BYTE PTR DS:[EDI+9]             ; Table.Reg


0041655A    83FB 00         CMP EBX,0


0041655D    74 02           JE SHORT PESpin.00416561


0041655F    F7D2            NOT EDX


00416561    83E2 01         AND EDX,1                                 ; Zf = 1 吗


00416564    4A              DEC EDX


00416565    0F85 CD000000   JNZ PESpin.00416638



0041656B    807F 0A 02      CMP BYTE PTR DS:[EDI+A],2                 ; Table.Length


0041656F   /74 0A           JE SHORT PESpin.0041657B


00416571   |0FBAE0 1F       BT EAX,1F                                 ; 31 位


00416575   |73 2A           JNB SHORT PESpin.004165A1


00416577   |F7D8            NEG EAX                                   ; 对 负数取反


00416579   |EB 0D           JMP SHORT PESpin.00416588


0041657B   \0FBAE0 07       BT EAX,7                                  ; 7 位


0041657F    73 20           JNB SHORT PESpin.004165A1


00416581    F7D8            NEG EAX                                   ; 对 负数取反



00416583    25 FF000000     AND EAX,0FF                               ; 对 Length = 2, 只取一个 byte


00416588    BB B1E50000     MOV EBX,0E5B1


0041658D    81EB F9E40000   SUB EBX,0E4F9                             ; B8


00416593    0FB657 0A       MOVZX EDX,BYTE PTR DS:[EDI+A]


00416597    2BC2            SUB EAX,EDX


00416599    290433          SUB DWORD PTR DS:[EBX+ESI],EAX


0041659C    E9 AD000000     JMP PESpin.0041664E



004165A1    BB 59FF0000     MOV EBX,0FF59


004165A6    81EB A1FE0000   SUB EBX,0FEA1                             ; B8


004165AC    0FB657 0A       MOVZX EDX,BYTE PTR DS:[EDI+A]


004165B0    03C2            ADD EAX,EDX


004165B2    010433          ADD DWORD PTR DS:[EBX+ESI],EAX            ; regEip 4098F8+20=409918


004165B5    E9 94000000     JMP PESpin.0041664E



00416638   /EB 07           JMP SHORT PESpin.00416641                 


00416641  ^\EB F8           JMP SHORT PESpin.0041663B


0041663B   /EB 01           JMP SHORT PESpin.0041663E


0041663E   /EB 04           JMP SHORT PESpin.00416644



00416644    0FB647 0A       MOVZX EAX,BYTE PTR DS:[EDI+A]             ; 跳过该条指令长度


00416648    0186 B8000000   ADD DWORD PTR DS:[ESI+B8],EAX



0041664E    E8 03000000     CALL PESpin.00416656                      ; 花指令


0041665F    61              POPAD


00416660    C3              RETN



// mov reg1, [reg2+offset] 专用的一段程序



00416702    60              PUSHAD


00416703    8BBD C4624000   MOV EDI,DWORD PTR SS:[EBP+4062C4]          ; buffer2


00416709    6A 00           PUSH 0


0041670B    51              PUSH ECX                                   ; 4 byte


0041670C    57              PUSH EDI                                   ; buffer2


0041670D    50              PUSH EAX                                   ; address


0041670E    FFB5 32634000   PUSH DWORD PTR SS:[EBP+406332]             ; hProcess


00416720    8D85 BFA356E9   LEA EAX,DWORD PTR SS:[EBP+E956A3BF]


00416726    2D 315416E9     SUB EAX,E9165431


0041672B    FF10            CALL DWORD PTR DS:[EAX]                    ; KERNEL32.ReadProcessMemory


0041672D    61              POPAD


0041672E    8B85 C4624000   MOV EAX,DWORD PTR SS:[EBP+4062C4]          ; buffer2


00416734    C3              RETN



父进程就这么多了.



// 接下来我们看看子进程



00415AF1    F1              INT1                                      ; 单步异常, 由父进程处理 ****************************************************


00415AF2    E8 1C030000     CALL PESpin.00415E13                      ; eip -> 00415B10



00415B10    8B85 D4624000   MOV EAX,DWORD PTR SS:[EBP+4062D4]         ; hMutex


00415B16    50              PUSH EAX


00415B17    8D85 D8A388ED   LEA EAX,DWORD PTR SS:[EBP+ED88A3D8]


00415B1D    2D BD5448ED     SUB EAX,ED4854BD


00415B22    FF10            CALL DWORD PTR DS:[EAX]                   ; KERNEL32.CloseHandle


00415B24    C3              RETN                                      ; 004123F5



...



00414ADB    49              DEC ECX


00414ADC    9C              PUSHFD


...


00414B09  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                 ; 00414ACE(ECX>0), 00414B13(ECX=0)



...


004124FB    E8 00000000     CALL PESpin.00412500


00412500    58              POP EAX


00412501    05 36000000     ADD EAX,36


00412506    8D9D FC4F4000   LEA EBX,DWORD PTR SS:[EBP+404FFC]


0041250C    8918            MOV DWORD PTR DS:[EAX],EBX                ; PESpin.00414350


0041250E    33DB            XOR EBX,EBX


00412510    8D4424 F8       LEA EAX,DWORD PTR SS:[ESP-8]


00412514    64:8703         XCHG DWORD PTR FS:[EBX],EAX


00412517    8D9D D3314000   LEA EBX,DWORD PTR SS:[EBP+4031D3]


0041251D    53              PUSH EBX


0041251E    50              PUSH EAX


0041251F    83CF FF         OR EDI,FFFFFFFF


00412522    0BCF            OR ECX,EDI


00412524    F3:AE           REPE SCAS BYTE PTR ES:[EDI]               ; 非法访问异常, 子进程自己处理 *************************************************



00412540    83CD FF         OR EBP,FFFFFFFF                           ; 异常处理完, 这里继续



0041255A    5B              POP EBX                                   ; PESpin.00412559


0041255B    81C3 1E000000   ADD EBX,1E


00412561    8DB5 AC2C4000   LEA ESI,DWORD PTR SS:[EBP+402CAC]


00412567    68 FF000000     PUSH 0FF


0041256C    56              PUSH ESI


0041256D    6A 00           PUSH 0


0041256F    53              PUSH EBX


00412570  - FFA5 5C4F4000   JMP DWORD PTR SS:[EBP+404F5C]             ; KERNEL32.GetModuleFileNameA



0041257D    5B              POP EBX                                   ; PESpin.0041257C


0041257E    81C3 25000000   ADD EBX,25


00412584    6A 00           PUSH 0


00412586    68 80000000     PUSH 80


0041258B    6A 03           PUSH 3


0041258D    6A 00           PUSH 0


0041258F    6A 01           PUSH 1


00412591    68 00000080     PUSH 80000000


00412596    56              PUSH ESI


00412597    53              PUSH EBX


00412598  - FFA5 2A4F4000   JMP DWORD PTR SS:[EBP+404F2A]             ; KERNEL32.CreateFileA



004125A7    5A              POP EDX                                   ; PESpin.004125A6


004125A8    81C2 1A000000   ADD EDX,1A


004125AE    8985 AD754000   MOV DWORD PTR SS:[EBP+4075AD],EAX


004125B4    93              XCHG EAX,EBX


004125B5    6A 00           PUSH 0


004125B7    53              PUSH EBX


004125B8    52              PUSH EDX


004125B9  - FFA5 574F4000   JMP DWORD PTR SS:[EBP+404F57]              ; KERNEL32.GetFileSize



004125C6    5A              POP EDX                                    ; PESpin.004125C5


004125C7    81C2 24000000   ADD EDX,24


004125CD    8BD8            MOV EBX,EAX


004125CF    53              PUSH EBX


004125D0    8F85 B9754000   POP DWORD PTR SS:[EBP+4075B9]


004125D6    6A 04           PUSH 4


004125D8    68 00300000     PUSH 3000


004125DD    50              PUSH EAX


004125DE    6A 00           PUSH 0


004125E0    52              PUSH EDX


004125E1  - FFA5 204F4000   JMP DWORD PTR SS:[EBP+404F20]              ; KERNEL32.VirtualAlloc


004125E9    50              PUSH EAX


004125EA    8F85 E54E4000   POP DWORD PTR SS:[EBP+404EE5]              ; [00414239], bufferForFile



004125FC    5A              POP EDX                                    ; PESpin.004125FB


004125FD    81C2 1E000000   ADD EDX,1E


00412603    6A 00           PUSH 0


00412605    51              PUSH ECX


00412606    53              PUSH EBX


00412607    50              PUSH EAX


00412608    FFB5 AD754000   PUSH DWORD PTR SS:[EBP+4075AD]


0041260E    52              PUSH EDX


0041260F  - FFA5 2F4F4000   JMP DWORD PTR SS:[EBP+404F2F]               ; KERNEL32.ReadFile



0041261F    5A              POP EDX


00412620    81C2 17000000   ADD EDX,17


00412626    FFB5 AD754000   PUSH DWORD PTR SS:[EBP+4075AD]


0041262C    52              PUSH EDX


0041262D  - FFA5 1B4F4000   JMP DWORD PTR SS:[EBP+404F1B]               ; KERNEL32.CloseHandle



00412635    FFB5 B9754000   PUSH DWORD PTR SS:[EBP+4075B9]


0041263B    59              POP ECX                                     ; FileSize


0041263C    81E9 EC1C0000   SUB ECX,1CEC                                ; 一部分不检查


00412642    8DBD E54E4000   LEA EDI,DWORD PTR SS:[EBP+404EE5]


00412648    8B3F            MOV EDI,DWORD PTR DS:[EDI]


0041264A    8D85 8E6F6038   LEA EAX,DWORD PTR SS:[EBP+38606F8E]


00412650    0BC0            OR EAX,EAX



0041266D    2D 7F162038     SUB EAX,3820167F


00412672    FFD0            CALL EAX                                    ; PESpin.00414C63, 计算校验和


00412674    2985 C1754000   SUB DWORD PTR SS:[EBP+4075C1],EAX           ; [00416915]



00412680    5A              POP EDX


00412681    81C2 1E000000   ADD EDX,1E


00412687    68 00800000     PUSH 8000


0041268C    6A 00           PUSH 0


0041268E    FFB5 E54E4000   PUSH DWORD PTR SS:[EBP+404EE5]              ; bufferForFile


00412694    52              PUSH EDX


00412695  - FFA5 254F4000   JMP DWORD PTR SS:[EBP+404F25]               ; KERNEL32.VirtualFree



0041269D    BB 380D581C     MOV EBX,1C580D38


004126B3    33C0            XOR EAX,EAX


004126B5    68 95334000     PUSH PESpin.00403395


004126BA    64:FF30         PUSH DWORD PTR FS:[EAX]


004126BD    016C24 04       ADD DWORD PTR SS:[ESP+4],EBP                ; SEH = 004126E9


004126C1    64:8920         MOV DWORD PTR FS:[EAX],ESP


004126C4    C1EB 02         SHR EBX,2


004126C7    81EB 4E031607   SUB EBX,716034E


004126D0    F6F3            DIV BL                                      ; 除零异常, 子进程自己处理 ********************************************



0041432D    90              NOP                                         ; 异常处理完这里继续


0041432F    33DB            XOR EBX,EBX


00414331    64:8F03         POP DWORD PTR FS:[EBX]


00414334    5B              POP EBX


00414335    81EB 16000000   SUB EBX,16



0041433E    803B CC         CMP BYTE PTR DS:[EBX],0CC                   ; 004126D3 有没有断点


00414341   /75 0B           JNZ SHORT PESpin.0041434E


00414343   |81E4 FFFF0000   AND ESP,0FFFF


00414349   |E8 1A000000     CALL PESpin.00414368                        ; game over


0041434E  ^\FFE3            JMP EBX                                     ; PESpin.004126D3



004126D3    8DB5 4CC83F00   LEA ESI,DWORD PTR SS:[EBP+3FC84C]


004126D9    BA E71A0000     MOV EDX,1AE7


004126E1    C1E2 02         SHL EDX,2


004126E4    03F2            ADD ESI,EDX


004126E6    FFE6            JMP ESI                                     ; 0041273C



0041274D    0FB78D E34E4000 MOVZX ECX,WORD PTR SS:[EBP+404EE3]          ; [00414237]=04 (区段数)


00412754    8B95 E94E4000   MOV EDX,DWORD PTR SS:[EBP+404EE9]           ; [0041423D]=00400060, PE 头


0041275A    81C2 F8000000   ADD EDX,0F8                                 ; Section Header


00412760    8B9D B1754000   MOV EBX,DWORD PTR SS:[EBP+4075B1]           ; [00416905]=07, 前面 3 个区段都需要解密, 后面的不用


00412766    33C0            XOR EAX,EAX


00412779    51              PUSH ECX


0041277A    0FA3C3          BT EBX,EAX                                  ; 前面 3 个区段都需要解密, 后面的不用


0041277D   /73 67           JNB SHORT PESpin.004127E6



0041277F    52              PUSH EDX                                     ; PESpin.00400158


00412791    8B7A 0C         MOV EDI,DWORD PTR DS:[EDX+C]                 ; Voffset


00412794    03BD DF4E4000   ADD EDI,DWORD PTR SS:[EBP+404EDF]            ; Base


0041279A    8B4A 10         MOV ECX,DWORD PTR DS:[EDX+10]                ; RawSize


0041279D    8B95 C1754000   MOV EDX,DWORD PTR SS:[EBP+4075C1]            ; [00416915] 前面的文件校验值



004127A3    D1EA            SHR EDX,1


004127A5    72 06           JB SHORT PESpin.004127AD


004127A7    81F2 31AF43ED   XOR EDX,ED43AF31


004127AD    3017            XOR BYTE PTR DS:[EDI],DL                     ; 用文件校验值来解密


004127AF    47              INC EDI


004127E2    49              DEC ECX


004127E3  ^ 75 BE           JNZ SHORT PESpin.004127A3



004127E5    5A              POP EDX                                       ; PESpin.00400158



004127E6    40              INC EAX


004127E7    83C2 28         ADD EDX,28                                    ; 下一个区段


004127EA    59              POP ECX



004127FC    49              DEC ECX


004127FD    9C              PUSHFD



0041282A  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                      ; 00412779(ECX>0), 00412831(ECX=0)


00412831    E8 03000000     CALL PESpin.00412839



00412842    838D 8A614000 0>OR DWORD PTR SS:[EBP+40618A],0                ; [004154DE] ???


00412849   /74 0D           JE SHORT PESpin.00412858



0041284B    8D85 B5594000   LEA EAX,DWORD PTR SS:[EBP+4059B5]


00412851    2D D1030000     SUB EAX,3D1


00412856    FFD0            CALL EAX                                      ; 00414938



00412858    68 80010000     PUSH 180                                      ; 这里开始不要单步走, 直到 004128F7


0041285D    59              POP ECX


...


004128F1  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                      ; 00412891(ECX>0), 004128F7(ECX=0)



004128F7    8D85 EC968D65   LEA EAX,DWORD PTR SS:[EBP+658D96EC]


004128FD    BB D09EA632     MOV EBX,32A69ED0


00412902    D1E3            SHL EBX,1


00412904    2BC3            SUB EAX,EBX


00412906    50              PUSH EAX


00412907    C3              RETN                                          ; 00414CA0 就对了, 否则 over



00414CA3    8DBD B4354000   LEA EDI,DWORD PTR SS:[EBP+4035B4]             ; 00412908


00414CA9    B9 A1010000     MOV ECX,1A1


...


00414D0C  ^\FF6424 FC       JMP DWORD PTR SS:[ESP-4]                      ; 00414CB7(ECX>0), 00414D15(ECX=0)



00414D15    55              PUSH EBP


00414D16    9C              PUSHFD


00414D17    E8 77000000     CALL PESpin.00414D93



00414D1D    8B5424 08            MOV EDX,DWORD PTR SS:[ESP+8]             ; 一开始的 SEH = 00414D1D


00414D21    8B4424 0C            MOV EAX,DWORD PTR SS:[ESP+C]


00414D25    8142 04 35000000     ADD DWORD PTR DS:[EDX+4],35              ; SEH 00414D1D-> 00414D52


00414D2C    81CA 29242123        OR EDX,23212429


00414D32    2BC9                 SUB ECX,ECX


00414D34    2148 04              AND DWORD PTR DS:[EAX+4],ECX


00414D37    2148 08              AND DWORD PTR DS:[EAX+8],ECX


00414D3A    2148 0C              AND DWORD PTR DS:[EAX+C],ECX


00414D3D    2148 10              AND DWORD PTR DS:[EAX+10],ECX


00414D40    8160 14 F00FFFFF     AND DWORD PTR DS:[EAX+14],FFFF0FF0


00414D47    C740 18 55010000     MOV DWORD PTR DS:[EAX+18],155


00414D4E    33C0                 XOR EAX,EAX


00414D50    C3                   RETN                                     ; 改一下 SEH, 返回后还是同样的异常, 只是 SEH 变了



00414D93    FF0424          INC DWORD PTR SS:[ESP]                         ; PESpin.00414D1C+1


00414D96    2BDB            SUB EBX,EBX


00414D98    64:FF33         PUSH DWORD PTR FS:[EBX]


00414D9B    64:8923         MOV DWORD PTR FS:[EBX],ESP


00414D9E    FB              STI                                            ; 特权指令异常(第一次到 00414D1D, 第二次到 00414D52) ************************************



00414D52    8B5424 08            MOV EDX,DWORD PTR SS:[ESP+8]


00414D56    8142 04 1B000000     ADD DWORD PTR DS:[EDX+4],1B               ; SEH 00414D52-> 00414D6D,  第二次改变


00414D60    33DB                 XOR EBX,EBX


00414D62    D7                   XLAT BYTE PTR DS:[EBX+AL]                 ; 在异常处理中又遇到了非法访问异常, 先去系统中走一走,不能处理, 最后还是到 414D6D



00414D6D    8B6424 08            MOV ESP,DWORD PTR SS:[ESP+8]              ; 414D6D 直接恢复 ESP


00414D71    2BD2                 SUB EDX,EDX


00414D73    75 1C                JNZ SHORT PESpin.00414D91


00414D75   /74 01                JE SHORT PESpin.00414D78



00414D78    64:8F02              POP DWORD PTR FS:[EDX]                    ; 0012FFE0


00414D7B    5A                   POP EDX


00414D7C    81E2 30313431        AND EDX,31343130


00414D82    9D                   POPFD


00414D83    5D                   POP EBP



00414DAB    8DBD 55374000        LEA EDI,DWORD PTR SS:[EBP+403755]         ; 00412AA9


00414DB1    B9 57110000          MOV ECX,1157


...


00414E14  ^\FF6424 FC            JMP DWORD PTR SS:[ESP-4]                  ; 00414DBF(ECX>0), 00414E1A(ECX=0)


00414E1A  ^\E9 E9DAFFFF          JMP PESpin.00412908



00412908    0FB78D E34E4000      MOVZX ECX,WORD PTR SS:[EBP+404EE3]        ; 区段数, 再解密一次数据


0041290F    8B95 E94E4000        MOV EDX,DWORD PTR SS:[EBP+404EE9]


00412915    81C2 F8000000        ADD EDX,0F8


00412924    68 07000000          PUSH 7                                     ; 前三个区段需要解密


00412929    5B                   POP EBX


0041293A    51                   PUSH ECX                                   ; 区段数



00412947    0FA3C3               BT EBX,EAX


0041294A   /73 79                JNB SHORT PESpin.004129C5



0041297A    8B7A 0C              MOV EDI,DWORD PTR DS:[EDX+C]               ; Voffset


0041297D    03BD DF4E4000        ADD EDI,DWORD PTR SS:[EBP+404EDF]          ; Base


00412983    8B4A 10              MOV ECX,DWORD PTR DS:[EDX+10]              ; RawSize


00412986    50                   PUSH EAX


00412987    8A07                 MOV AL,BYTE PTR DS:[EDI]


...


004129AE    49                   DEC ECX


004129C0    0BC9                 OR ECX,ECX


004129C2  ^ 75 C3                JNZ SHORT PESpin.00412987


004129C4    58                   POP EAX


004129C5    40                   INC EAX


004129C6    83C2 28              ADD EDX,28



004129D3    49                   DEC ECX


004129D4    9C                   PUSHFD



00412A01  ^\FF6424 FC            JMP DWORD PTR SS:[ESP-4]                    ; 0041293A(ECX>0), 00412A08(ECX=0)


00412A08    E8 01000000          CALL PESpin.00412A0E



0041489E    33DB                 XOR EBX,EBX


004148A0    55                   PUSH EBP


004148A1    E8 16000000          CALL PESpin.004148BC



004148A6    2BDB                 SUB EBX,EBX                                 ; SEH = 004148A6


004148B1    8B6424 08            MOV ESP,DWORD PTR SS:[ESP+8]                ; 直接恢复 ESP


004148B5    64:8F03              POP DWORD PTR FS:[EBX]


004148B8    5B                   POP EBX


004148B9    5D                   POP EBP


004148BA   /EB 4A                JMP SHORT PESpin.00414906



004148BC    64:FF33              PUSH DWORD PTR FS:[EBX]


004148BF    64:8923              MOV DWORD PTR FS:[EBX],ESP


004148C2    83E0 00              AND EAX,0


004148C5    64:3343 30           XOR EAX,DWORD PTR FS:[EBX+30]               ; PEB


004148C9   /79 1B                JNS SHORT PESpin.004148E6                   ; NT 跳



004148F2    8B40 0C              MOV EAX,DWORD PTR DS:[EAX+C]


004148F5    8B40 0C              MOV EAX,DWORD PTR DS:[EAX+C]


00414901    4B                   DEC EBX


00414902    0958 20              OR DWORD PTR DS:[EAX+20],EBX                ; 破坏 ImageSize, Skip *****************************************************


00414905    D7                   XLAT BYTE PTR DS:[EBX+AL]                   ; 非法访问异常, SEH = 004148A6 **********************************************



00414906    6A F9                PUSH -7


00414908    5A                   POP EDX


00414909    59                   POP ECX


0041490A    8D6424 04            LEA ESP,DWORD PTR SS:[ESP+4]


00414917    03D1                 ADD EDX,ECX


00414919  ^ FFE2                 JMP EDX                                      ; PESpin.00412A16



...


00412A58    E8 03000000          CALL PESpin.00412A60



00412A6A    33DB                 XOR EBX,EBX


00412A6C    8D4424 F4            LEA EAX,DWORD PTR SS:[ESP-C]


00412A70    64:8703              XCHG DWORD PTR FS:[EBX],EAX


00412A73    55                   PUSH EBP


00412A74    8D9D 95334000        LEA EBX,DWORD PTR SS:[EBP+403395]            ; SEH = 004126E9


00412A7A    53                   PUSH EBX


00412A7B    33DB                 XOR EBX,EBX



00412A86    8918                 MOV DWORD PTR DS:[EAX],EBX                   ; EAX=0, 非法访问异常 *******************************************************



004126E9    8B4424 04            MOV EAX,DWORD PTR SS:[ESP+4]                 ; SEH


004126ED    8B4C24 0C            MOV ECX,DWORD PTR SS:[ESP+C]


004126F1    8B00                 MOV EAX,DWORD PTR DS:[EAX]


004126F3    35 5B011238          XOR EAX,3812015B


004126F8    3D 5E0112F8          CMP EAX,F812015E


004126FD    75 0F                JNZ SHORT PESpin.0041270E


004126FF    8181 B8000000 E42000>ADD DWORD PTR DS:[ECX+B8],20E4               ; EIP 00412A86->00414B6A


00412709    EB 27                JMP SHORT PESpin.00412732


0041270E    3D 460112F8          CMP EAX,F8120146


00412713    75 0C                JNZ SHORT PESpin.00412721


00412715    8181 B8000000 720100>ADD DWORD PTR DS:[ECX+B8],172


0041271F    EB 11                JMP SHORT PESpin.00412732


00412721    3D CF0112F8          CMP EAX,F81201CF


00412726    75 0A                JNZ SHORT PESpin.00412732


00412728    8181 B8000000 5D1C00>ADD DWORD PTR DS:[ECX+B8],1C5D


00412732    33C0                 XOR EAX,EAX


00412734    C3                   RETN



00414B6A    2BC0                 SUB EAX,EAX


00414B6C    EB 04                JMP SHORT PESpin.00414B72



00414B75    64:8F00              POP DWORD PTR FS:[EAX]                       ; 0012FFE0


00414B78    58                   POP EAX


00414B79    5D                   POP EBP


00414B7A    8D85 55374000        LEA EAX,DWORD PTR SS:[EBP+403755]            ; 00412AA9


00414B80    68 57110000          PUSH 1157


00414B85    59                   POP ECX


00414B86    68 C3FDE514          PUSH 14E5FDC3


00414B8B    5A                   POP EDX


00414B8C    D1EA                 SHR EDX,1


00414B8E   /73 06                JNB SHORT PESpin.00414B96


00414B90   |81F2 32AF43ED        XOR EDX,ED43AF32


00414B96   \3010                 XOR BYTE PTR DS:[EAX],DL                     ; SMC 解密代码


00414B98    40                   INC EAX


00414B99    49                   DEC ECX



00414BD0  ^\FF6424 FC            JMP DWORD PTR SS:[ESP-4]                     ; 00414B8C(ECX>0), 00414BD9(ECX=0)


00414BD9    2D 57110000          SUB EAX,1157


00414BDE  ^ FFE0                 JMP EAX                                      ; PESpin.00412AA9



...


00412ADB    8B95 E94E4000        MOV EDX,DWORD PTR SS:[EBP+404EE9]            ; PESpin.00400060


00412AE1    81C2 F8000000        ADD EDX,0F8


00412AE7    8B7A 0C              MOV EDI,DWORD PTR DS:[EDX+C]                 ; Voffset


00412AEA    03BD DF4E4000        ADD EDI,DWORD PTR SS:[EBP+404EDF]            ; +Base, edi=401000


00412AF0    6A 20                PUSH 20


00412AF2    59                   POP ECX                                      ; 校验 20h 字节



00412B04    E8 02000000          CALL PESpin.00412B0B


00412B0B    58                   POP EAX


00412B0C    05 16000000          ADD EAX,16


00412B11    50                   PUSH EAX                                     ; 00412B1F 返回地址



00412B12    8D85 4DB8A5E5        LEA EAX,DWORD PTR SS:[EBP+E5A5B84D]


00412B18    2D 776065E5          SUB EAX,E5656077


00412B1D    FFE0                 JMP EAX                                       ; 00414B2A(另一种 Hash 算法)


00412B1F    2985 B5754000        SUB DWORD PTR SS:[EBP+4075B5],EAX             ; [00416909] 这里放着 401000-401020 的校验


00412B28   /0F85 4E150000        JNZ PESpin.0041407C                           ; 跳 over *************************************************************


00412B2E    E8 03000000          CALL PESpin.00412B36



00412B3F    8D9D 19034900        LEA EBX,DWORD PTR SS:[EBP+490319]


00412B45    81EB 15A30800        SUB EBX,8A315                                 ; 00415358


00412B73    FFD3                 CALL EBX                                      ; PESpin.00415358



;=====================================================================================================================


00414B2A


00414B3B    52                   PUSH EDX                                      ; PESpin.00400158


00414B3C    33D2                 XOR EDX,EDX


00414B3E    8A0439               MOV AL,BYTE PTR DS:[ECX+EDI]                  ; 401020


00414B41    32D0                 XOR DL,AL


00414B43    B0 06                MOV AL,6



00414B45    D1EA                 SHR EDX,1


00414B47    72 06                JB SHORT PESpin.00414B4F


00414B49    81F2 20292D3A        XOR EDX,3A2D2920


00414B4F    0FBAE2 08            BT EDX,8


00414B53   /73 03                JNB SHORT PESpin.00414B58


00414B55   |80E6 FE              AND DH,0FE


00414B58   \FEC8                 DEC AL


00414B5A  ^\75 E9                JNZ SHORT PESpin.00414B45



00414B5C    49                   DEC ECX


00414B5D  ^ 75 DF                JNZ SHORT PESpin.00414B3E


00414B5F    92                   XCHG EAX,EDX



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

收藏
免费 7
支持
分享
最新回复 (22)
雪    币: 303
活跃值: (476)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习ING
2005-8-5 09:12
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
牛,收藏先。
2005-8-5 09:16
0
雪    币: 898
活跃值: (4044)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
很有耐心
2005-8-5 09:20
0
雪    币: 267
活跃值: (235)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
牛人,支持!
2005-8-5 09:41
0
雪    币: 267
活跃值: (44)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
6
强,支持,学习中
2005-8-5 10:41
0
雪    币: 209
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵,瞧瞧,看看能不能从里面学点写壳经验
2005-8-5 10:41
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
支持!
2005-8-5 10:45
0
雪    币: 323
活跃值: (589)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
9
辛苦了!
2005-8-5 10:50
0
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
强人..学习ing~
2005-8-5 11:11
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
11
这个壳花了我很多时间, 尤其是找暗桩,  
差不多把 PESpin 的加壳代码分析了一遍
.

谁叫你捉着不放

真是5体投d
2005-8-5 11:23
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
12
顶~
2005-8-5 12:34
0
雪    币: 442
活跃值: (1246)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
13
牛X,顶
2005-8-5 12:42
0
雪    币: 690
活跃值: (1862)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
14
高,辛苦啦
2005-8-5 13:15
0
雪    币: 2657
活跃值: (505)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
acprotect->pespin
2005-8-5 17:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习中.........
2005-8-5 18:37
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习
辛苦啦
2005-8-6 01:33
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
好也66666666666666666
2005-8-7 16:37
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
19
真是个牛孩
2005-8-7 19:06
0
雪    币: 102389
活跃值: (201659)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习加研究。
2005-8-7 20:34
0
雪    币: 217
活跃值: (15)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
佩服!:)
2005-8-10 10:18
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
22
支持!牛人
2005-8-10 16:16
0
雪    币: 221
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gcf
23
好长的文章啊,看到头都疼了
2005-8-12 17:17
0
游客
登录 | 注册 方可回帖
返回