手动脱壳“ASProtect 1.2x - 1.3x”(2/2)

 

00D3FA0A    C3              RETN                                     ; (39) 跳到这里后,[F8]返回。
            .
            .
            .
00D3E8A8    C3              RETN                                     ; (40) 返回到这里后,[F8]返回。
            .
            .
            .
00D3FA1D    E8 1EF4FFFF     CALL 00D3EE40                            ; (41) 返回到这里,[F8]单步向下走。
00D3FA22    A1 F02BD400     MOV EAX,DWORD PTR DS:[D42BF0]
00D3FA27    8B00            MOV EAX,DWORD PTR DS:[EAX]
00D3FA29    8B70 1C         MOV ESI,DWORD PTR DS:[EAX+1C]
00D3FA2C    A1 F02BD400     MOV EAX,DWORD PTR DS:[D42BF0]
00D3FA31    8B00            MOV EAX,DWORD PTR DS:[EAX]
00D3FA33    8B38            MOV EDI,DWORD PTR DS:[EAX]
00D3FA35    A1 F02BD400     MOV EAX,DWORD PTR DS:[D42BF0]
00D3FA3A    8B00            MOV EAX,DWORD PTR DS:[EAX]
00D3FA3C    8D58 18         LEA EBX,DWORD PTR DS:[EAX+18]
00D3FA3F    833B 00         CMP DWORD PTR DS:[EBX],0
00D3FA42    75 20           JNZ SHORT 00D3FA64
00D3FA44    83C6 20         ADD ESI,20
00D3FA47    A1 682AD400     MOV EAX,DWORD PTR DS:[D42A68]
00D3FA4C    80B8 2D010000 0>CMP BYTE PTR DS:[EAX+12D],0
00D3FA53    75 0F           JNZ SHORT 00D3FA64
00D3FA55    B8 1F000000     MOV EAX,1F
00D3FA5A    E8 652EFCFF     CALL 00D028C4
00D3FA5F    C1E0 02         SHL EAX,2
00D3FA62    2BF0            SUB ESI,EAX
00D3FA64    E8 33EBFFFF     CALL 00D3E59C
00D3FA69    833B 00         CMP DWORD PTR DS:[EBX],0
00D3FA6C    74 05           JE SHORT 00D3FA73
00D3FA6E    A3 8CB6D400     MOV DWORD PTR DS:[D4B68C],EAX
00D3FA73    8B13            MOV EDX,DWORD PTR DS:[EBX]
00D3FA75    891424          MOV DWORD PTR SS:[ESP],EDX
00D3FA78    897424 08       MOV DWORD PTR SS:[ESP+8],ESI
00D3FA7C    894424 0C       MOV DWORD PTR SS:[ESP+C],EAX
00D3FA80    A1 9C2BD400     MOV EAX,DWORD PTR DS:[D42B9C]
00D3FA85    C600 E1         MOV BYTE PTR DS:[EAX],0E1
00D3FA88    A1 58B6D400     MOV EAX,DWORD PTR DS:[D4B658]
00D3FA8D    E8 EE5DFFFF     CALL 00D35880
00D3FA92    A1 88B6D400     MOV EAX,DWORD PTR DS:[D4B688]
00D3FA97    894424 04       MOV DWORD PTR SS:[ESP+4],EAX
00D3FA9B    897C24 10       MOV DWORD PTR SS:[ESP+10],EDI
00D3FA9F    A1 242BD400     MOV EAX,DWORD PTR DS:[D42B24]
00D3FAA4    8B00            MOV EAX,DWORD PTR DS:[EAX]
00D3FAA6    E8 6931FCFF     CALL 00D02C14
00D3FAAB    A1 58B6D400     MOV EAX,DWORD PTR DS:[D4B658]
00D3FAB0    E8 5F31FCFF     CALL 00D02C14
00D3FAB5    A1 9C2BD400     MOV EAX,DWORD PTR DS:[D42B9C]
00D3FABA    C600 E3         MOV BYTE PTR DS:[EAX],0E3
00D3FABD    8BD4            MOV EDX,ESP
00D3FABF    A1 94B6D400     MOV EAX,DWORD PTR DS:[D4B694]
00D3FAC4    E8 23B9FFFF     CALL 00D3B3EC
00D3FAC9    E8 8E3CFFFF     CALL 00D3375C
00D3FACE    E8 61EDFFFF     CALL 00D3E834                            ; (42) 这个CALL要[F7]单步步入。
00D3FAD3    83C4 24         ADD ESP,24
00D3FAD6    5F              POP EDI
00D3FAD7    5E              POP ESI
00D3FAD8    5B              POP EBX
00D3FAD9    C3              RETN
            .
            .
            .
; (43) 步入后来到地址“00D3E834”处。地址“00D3E834”处后面的代码(函数“00D3E834”内的代码)都是随机变化的。我们[F8]一直向下走,经过数次小的跳转后,会来到汇编指令“RETN”处,然后[F8]返回。
            .
            .
            .
01EA0000    66:81CB 4DF7    OR BX,0F74D                              ; (43) 返回到这里,[F8]单步向下走。
01EA0005    E8 07000000     CALL 01EA0011                            ; (44) 这个CALL要[F7]单步步入。
01EA000A    1350 49         ADC EDX,DWORD PTR DS:[EAX+49]
01EA000D    4E              DEC ESI
01EA000E    6F              OUTS DX,DWORD PTR ES:[EDI]               ; I/O 命令
01EA000F    7C 05           JL SHORT 01EA0016
01EA0011    68 68B6F00A     PUSH 0AF0B668                            ; (45) 步入后来到这里。[F8]单步向下走。
01EA0016    E9 0C000000     JMP 01EA0027                             ; (46) 跳。
            .
            .
            .
01EA0027    58              POP EAX                                  ; (47) 跳到这里后,[F8]单步向下走。
01EA0028    5F              POP EDI
01EA0029    68 5710C331     PUSH 31C31057
01EA002E    0F89 14000000   JNS 01EA0048
01EA0034    E8 0E000000     CALL 01EA0047                            ; (48) 这个CALL要[F7]单步步入。
01EA0039    AE              SCAS BYTE PTR ES:[EDI]
01EA003A    4F              DEC EDI
01EA003B    DCE5            FSUBR ST(5),ST
01EA003D    BA 6BC86186     MOV EDX,8661C86B
01EA0042    47              INC EDI
01EA0043 - 74 9D           JE SHORT 01E9FFE2
01EA0045    12E3            ADC AH,BL
01EA0047    59              POP ECX                                  ; (49) 步入后来到这里。[F8]单步向下走。
01EA0048    59              POP ECX
01EA0049    81C7 DA000000   ADD EDI,0DA
01EA004F    0F8F 10000000   JG 01EA0065                              ; (50) 跳。
01EA0055    E9 0B000000     JMP 01EA0065
01EA005A    37              AAA
01EA005B    A4              MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
01EA005C    0D C2D31009     OR EAX,910D3C2
01EA0061    0E              PUSH CS
01EA0062    2F              DAS
01EA0063    3C C5           CMP AL,0C5
01EA0065    BA 00000000     MOV EDX,0                                ; (51) 跳到这里后,[F8]单步向下走。
01EA006A    66:B8 276B      MOV AX,6B27
01EA006E    8B3417          MOV ESI,DWORD PTR DS:[EDI+EDX]
01EA0071    B4 96           MOV AH,96
01EA0073    81C6 9E9FAE11   ADD ESI,11AE9F9E
01EA0079    0F81 03000000   JNO 01EA0082
01EA007F    0FB7C2          MOVZX EAX,DX
01EA0082    81C6 7F4A304E   ADD ESI,4E304A7F
01EA0088    52              PUSH EDX
01EA0089    0FB7C3          MOVZX EAX,BX
01EA008C    5B              POP EBX
01EA008D    81EE 4C9A7C5E   SUB ESI,5E7C9A4C
01EA0093    80CD 88         OR CH,88
01EA0096    56              PUSH ESI
01EA0097    B9 5D802A31     MOV ECX,312A805D
01EA009C    8F0417          POP DWORD PTR DS:[EDI+EDX]
01EA009F    B4 C5           MOV AH,0C5
01EA00A1    66:BB 2AA5      MOV BX,0A52A
01EA00A5    83EA 04         SUB EDX,4
01EA00A8    66:B8 CD3A      MOV AX,3ACD
01EA00AC    81FA D4FFFFFF   CMP EDX,-2C
01EA00B2 ^ 0F85 B6FFFFFF   JNZ 01EA006E                             ; (52) 这里是用来动态解密后文汇编代码的循环,可以不去重复跟。
01EA00B8    66:B9 EFF8      MOV CX,0F8EF                             ; (53) 直接[F4]执行到这里。
            .
            .
            .
01EA00B8    66:B9 EFF8      MOV CX,0F8EF                             ; (54) 解密后的汇编代码如下,[F8]单步向下走。
01EA00BC    83DB 39         SBB EBX,39
01EA00BF    BB 6A444700     MOV EBX,47446A
01EA00C4    5B              POP EBX
01EA00C5    81F0 3AD8FFCF   XOR EAX,CFFFD83A
01EA00CB    58              POP EAX
01EA00CC    8D80 91102CAB   LEA EAX,DWORD PTR DS:[EAX+AB2C1091]
01EA00D2    03C3            ADD EAX,EBX
01EA00D4    5C              POP ESP
01EA00D5    FFE0            JMP EAX                                  ; (55) “ASProtect”加密壳结束处的跨段跳转。
01EA00D7    B2 66           MOV DL,66
01EA00D9    57              PUSH EDI
01EA00DA    3C 37           CMP AL,37
01EA00DC    82DE AA         SBB DH,-56
01EA00DF    99              CDQ
01EA00E0    52              PUSH EDX
01EA00E1    1B88 790A5770   SBB ECX,DWORD PTR DS:[EAX+70570A79]
01EA00E7    49              DEC ECX
01EA00E8    AD              LODS DWORD PTR DS:[ESI]
01EA00E9    2D 00000000     SUB EAX,0
01EA00EE    0000            ADD BYTE PTR DS:[EAX],AL
01EA00F0    0000            ADD BYTE PTR DS:[EAX],AL
01EA00F2    0000            ADD BYTE PTR DS:[EAX],AL
01EA00F4    0000            ADD BYTE PTR DS:[EAX],AL
            .
            .
            .
10034050    60              PUSHAD                                  ; (56) 这里也许是另一个新壳的入口,但不知道是什么壳。
10034051    FC              CLD
10034052    0FB605 344C0310 MOVZX EAX,BYTE PTR DS:[10034C34]
10034059    85C0            TEST EAX,EAX
1003405B    75 31           JNZ SHORT virus.1003408E
1003405D    B8 50400310     MOV EAX,virus.10034050
10034062    2B05 044C0310   SUB EAX,DWORD PTR DS:[10034C04]
10034068    A3 304C0310     MOV DWORD PTR DS:[10034C30],EAX
1003406D    A1 004C0310     MOV EAX,DWORD PTR DS:[10034C00]
10034072    0305 304C0310   ADD EAX,DWORD PTR DS:[10034C30]
10034078    A3 384C0310     MOV DWORD PTR DS:[10034C38],EAX
1003407D    E8 9A000000     CALL virus.1003411C                     ; (57) [F8]直接步过,里边是在解密或修复输入表。
10034082    A3 504C0310     MOV DWORD PTR DS:[10034C50],EAX
10034087    C605 344C0310 0>MOV BYTE PTR DS:[10034C34],1
1003408E    833D 504C0310 0>CMP DWORD PTR DS:[10034C50],0
10034095    75 07           JNZ SHORT virus.1003409E
10034097    61              POPAD
10034098    FF25 384C0310   JMP DWORD PTR DS:[10034C38]             ; (58) 这里是该壳结束处的跨段跳转。
            .
            .
            .
10001DC1      8B            DB 8B                                   ; (59) 跳出壳后,这里就是病毒样本的真实入口地址了。
10001DC2      EC            DB EC
10001DC3      83            DB 83
10001DC4      C4            DB C4
10001DC5      F0            DB F0
10001DC6      53            DB 53                                    ; CHAR 'S'
10001DC7      B8            DB B8
10001DC8      88            DB 88
10001DC9      1D            DB 1D
10001DCA      00            DB 00
10001DCB      10            DB 10
10001DCC      E8            DB E8
10001DCD      C7            DB C7
10001DCE      FA            DB FA
10001DCF      FF            DB FF
10001DD0      FF            DB FF
10001DD1      6A            DB 6A                                    ; CHAR 'j'
10001DD2      0A            DB 0A
10001DD3      68            DB 68                                    ; CHAR 'h'
10001DD4      20            DB 20                                    ; CHAR ' '
            .
            .
            .
10001DC1    8BEC            MOV EBP,ESP                              ; (60) 把病毒样本入口处的代码进行重新分析,分析后的反汇编代码如下。使用“PEID”中的“核心扫描”功能,显示病毒样本采用的开发编译器名称为“Borland Delphi 6.0 - 7.0”。
10001DC3    83C4 F0         ADD ESP,-10
10001DC6    53              PUSH EBX
10001DC7    B8 881D0010     MOV EAX,virus.10001D88
10001DCC    E8 C7FAFFFF     CALL virus.10001898
10001DD1    6A 0A           PUSH 0A
10001DD3    68 201E0010     PUSH virus.10001E20                      ; ASCII "HEART"
10001DD8    A1 14310010     MOV EAX,DWORD PTR DS:[10003114]
10001DDD    50              PUSH EAX
10001DDE    E8 71FBFFFF     CALL virus.10001954                      ; JMP 到 kernel32.FindResourceA
10001DE3    8BD8            MOV EBX,EAX
10001DE5    85DB            TEST EBX,EBX
10001DE7    74 2F           JE SHORT virus.10001E18
10001DE9    53              PUSH EBX
10001DEA    A1 14310010     MOV EAX,DWORD PTR DS:[10003114]
10001DEF    50              PUSH EAX
10001DF0    E8 97FBFFFF     CALL virus.1000198C                      ; JMP 到 kernel32.SizeofResource
10001DF5    85C0            TEST EAX,EAX
10001DF7    74 1F           JE SHORT virus.10001E18
10001DF9    53              PUSH EBX
10001DFA    A1 14310010     MOV EAX,DWORD PTR DS:[10003114]
10001DFF    50              PUSH EAX
10001E00    E8 5FFBFFFF     CALL virus.10001964                      ; JMP 到 kernel32.LoadResource

; (61) 脱壳后,使用“ImportREC”工具来修复病毒样本的输入表,简单修复后则可以正常运行。
---------------------------------------------------------------------------------------------

你可能感兴趣的:(手动脱壳“ASProtect 1.2x - 1.3x”(2/2))