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

 


文件名称:手动脱壳“ASProtect 1.2x - 1.3x”
目标程序:病毒样本
操作环境:Windows XP-SP2
使用工具:Ollydbg 1.10版
编写作者:Coderui
编写时间:2009年01月05日
联系方式:[email protected]
作者博客:http://hi.baidu.com/coderui
---------------------------------------------------------------------------------------------
介绍:

    “ASProtect”加密壳是一款商业壳,由于版本和其中的设置众多,所以加壳后的样本总是五花八门,都不好脱。最近准备利用工作之余把“ASProtect”加密壳的所有版本都试着脱一下(从低版本开始),顺便记点笔记以备后期查阅时使用!下文如有表达错误的地方还请多多指正,谢谢!
---------------------------------------------------------------------------------------------
OD设置:(OD设置为不忽略任何异常。[F2]:下软断点、[F4]:执行到当前代码处、[F7]:单步步入、[F8]单步步过、[F9]运行。)
请按照注解顺序观看(00)-(01)-(02)…(99),不然很容易混乱。

; (00) 病毒样本载入后,OD提示错误“不知如何继续,因为内存地址 E072C4B2 不可读. 请尝试更改 EIP 或忽略程序异常.”
; (01) 我们使用[Shift+F9]忽略异常。

10034000 > 68 01500610     PUSH virus.10065001                      ; (02) OD停在这里,我们[F9]运行。
10034005    E8 01000000     CALL virus.1003400B
1003400A    C3              RETN
1003400B    C3              RETN
            .
            .
            .
00D3FF66    0000            ADD BYTE PTR DS:[EAX],AL                 ; (03) OD停在这里,提示“内存访问”异常。我们使用[Shift+F9]忽略异常,并继续运行。
00D3FF68    E8 33C05A59     CALL 5A2EBFA0
00D3FF6D    59              POP ECX
00D3FF6E    64:8910         MOV DWORD PTR FS:[EAX],EDX
00D3FF71    EB 0F           JMP SHORT 00D3FF82
00D3FF73 ^ E9 F02EFCFF     JMP 00D02E68
00D3FF78    E8 67FBFFFF     CALL 00D3FAE4
00D3FF7D    E8 4232FCFF     CALL 00D031C4
00D3FF82    E8 05E9FFFF     CALL 00D3E88C
00D3FF87    33C0            XOR EAX,EAX
00D3FF89    5A              POP EDX
00D3FF8A    59              POP ECX
00D3FF8B    59              POP ECX
00D3FF8C    64:8910         MOV DWORD PTR FS:[EAX],EDX
00D3FF8F    68 A4FFD300     PUSH 0D3FFA4
00D3FF94    8D45 F4         LEA EAX,DWORD PTR SS:[EBP-C]
00D3FF97    E8 5C37FCFF     CALL 00D036F8
00D3FF9C    C3              RETN
            .
            .
            .
00D3E2BB    90              NOP                                      ; (04) OD停在这里,提示“INT3”异常。我们使用[Shift+F9]忽略异常,并继续运行。
00D3E2BC    EB 01           JMP SHORT 00D3E2BF
00D3E2BE    6966 81 FE47467>IMUL ESP,DWORD PTR DS:[ESI-7F],744647FE
00D3E2C5    05 31C040EB     ADD EAX,EB40C031
00D3E2CA    0231            ADD DH,BYTE PTR DS:[ECX]
00D3E2CC    C031 DB         SAL BYTE PTR DS:[ECX],0DB                ; 移位常量超出 1..31 的范围
00D3E2CF    64:8F03         POP DWORD PTR FS:[EBX]
00D3E2D2    83C4 04         ADD ESP,4
00D3E2D5    EB 01           JMP SHORT 00D3E2D8
            .
            .
            .
00D3F004    0000            ADD BYTE PTR DS:[EAX],AL                 ; (05) OD停在这里,提示“内存访问”异常。我们使用[Shift+F9]忽略异常,并继续运行。
00D3F006    E8 33C05A59     CALL 5A2EB03E
00D3F00B    59              POP ECX
00D3F00C    64:8910         MOV DWORD PTR FS:[EAX],EDX
00D3F00F    EB 0F           JMP SHORT 00D3F020
00D3F011 ^ E9 523EFCFF     JMP 00D02E68
00D3F016    E8 A5FEFFFF     CALL 00D3EEC0
00D3F01B    E8 A441FCFF     CALL 00D031C4
00D3F020    A1 9C2BD400     MOV EAX,DWORD PTR DS:[D42B9C]
00D3F025    C600 CF         MOV BYTE PTR DS:[EAX],0CF
00D3F028    EB 7E           JMP SHORT 00D3F0A8
00D3F02A    E8 1D35FCFF     CALL 00D0254C
            .
            .
            .
00D3F382    0000            ADD BYTE PTR DS:[EAX],AL                 ; (06) OD停在这里,提示“内存访问”异常。我们使用[Shift+F9]忽略异常,并继续运行。
00D3F384    E8 33C05A59     CALL 5A2EB3BC
00D3F389    59              POP ECX
00D3F38A    64:8910         MOV DWORD PTR FS:[EAX],EDX
00D3F38D    EB 2F           JMP SHORT 00D3F3BE
00D3F38F ^ E9 D43AFCFF     JMP 00D02E68
00D3F394    8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
00D3F397    50              PUSH EAX
00D3F398    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
00D3F39B    50              PUSH EAX
00D3F39C    A1 242BD400     MOV EAX,DWORD PTR DS:[D42B24]
00D3F3A1    8B00            MOV EAX,DWORD PTR DS:[EAX]
00D3F3A3    E8 B45DFFFF     CALL 00D3515C
            .
            .
            .
00D3E2BB    90              NOP                                      ; (07) OD停在这里,提示“INT3”异常。这里是最后一处异常,也是一处反调试的暗桩。这里不能使用[Shift+F9]去忽略异常,那样会使程序退出。这里我们应该单步[F8]直接走过去。
00D3E2BC    EB 01           JMP SHORT 00D3E2BF                       ; (08) 跳。
00D3E2BE    6966 81 FE47467>IMUL ESP,DWORD PTR DS:[ESI-7F],744647FE
00D3E2C5    05 31C040EB     ADD EAX,EB40C031
00D3E2CA    0231            ADD DH,BYTE PTR DS:[ECX]
00D3E2CC    C031 DB         SAL BYTE PTR DS:[ECX],0DB                ; 移位常量超出 1..31 的范围
00D3E2CF    64:8F03         POP DWORD PTR FS:[EBX]
00D3E2D2    83C4 04         ADD ESP,4
00D3E2D5    EB 01           JMP SHORT 00D3E2D8
            .
            .
            .
00D3E2BF    66:81FE 4746    CMP SI,4647                              ; (09) 跳到这里后,[F8]单步向下走。
00D3E2C4    74 05           JE SHORT 00D3E2CB                        ; (10) 跳。
00D3E2C6    31C0            XOR EAX,EAX
00D3E2C8    40              INC EAX
00D3E2C9    EB 02           JMP SHORT 00D3E2CD
00D3E2CB    31C0            XOR EAX,EAX                              ; (11) 跳到这里后,[F8]单步向下走。
00D3E2CD    31DB            XOR EBX,EBX
00D3E2CF    64:8F03         POP DWORD PTR FS:[EBX]
00D3E2D2    83C4 04         ADD ESP,4
00D3E2D5    EB 01           JMP SHORT 00D3E2D8                       ; (12) 跳。
            .
            .
            .
00D3E2D8    5F              POP EDI                                  ; (13) 跳到这里后,[F8]单步向下走。
00D3E2D9    5E              POP ESI
00D3E2DA    5B              POP EBX
00D3E2DB    C3              RETN                                     ; (14) 返回。
            .
            .
            .
00D3E48C    84C0            TEST AL,AL                               ; (15) 返回到这里,[F8]单步向下走。
00D3E48E    74 1B           JE SHORT 00D3E4AB
00D3E490    45              INC EBP
00D3E491    EB 18           JMP SHORT 00D3E4AB
00D3E493    8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]
00D3E496    8A00            MOV AL,BYTE PTR DS:[EAX]
00D3E498    84C0            TEST AL,AL
00D3E49A    74 04           JE SHORT 00D3E4A0
00D3E49C    3C 02           CMP AL,2
00D3E49E    75 0B           JNZ SHORT 00D3E4AB
00D3E4A0    8B5D F4         MOV EBX,DWORD PTR SS:[EBP-C]
00D3E4A3    FF53 FC         CALL DWORD PTR DS:[EBX-4]
00D3E4A6    84C0            TEST AL,AL
00D3E4A8    74 01           JE SHORT 00D3E4AB
00D3E4AA    45              INC EBP
00D3E4AB    33C0            XOR EAX,EAX
00D3E4AD    5A              POP EDX
00D3E4AE    59              POP ECX
00D3E4AF    59              POP ECX
00D3E4B0    64:8910         MOV DWORD PTR FS:[EAX],EDX
00D3E4B3    EB 2E           JMP SHORT 00D3E4E3
00D3E4B5 ^ E9 AE49FCFF     JMP 00D02E68
00D3E4BA    8D55 EC         LEA EDX,DWORD PTR SS:[EBP-14]
00D3E4BD    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
00D3E4C0    E8 E78BFCFF     CALL 00D070AC
00D3E4C5    8B4D EC         MOV ECX,DWORD PTR SS:[EBP-14]
00D3E4C8    8D45 F0         LEA EAX,DWORD PTR SS:[EBP-10]
00D3E4CB    BA 28E5D300     MOV EDX,0D3E528                          ; ASCII "90_"
00D3E4D0    E8 CB54FCFF     CALL 00D039A0
00D3E4D5    8B45 F0         MOV EAX,DWORD PTR SS:[EBP-10]
00D3E4D8    50              PUSH EAX
00D3E4D9    E8 F277FDFF     CALL 00D15CD0
00D3E4DE    E8 E14CFCFF     CALL 00D031C4
00D3E4E3    FF45 FC         INC DWORD PTR SS:[EBP-4]
00D3E4E6    8345 F4 08      ADD DWORD PTR SS:[EBP-C],8
00D3E4EA    837D FC 05      CMP DWORD PTR SS:[EBP-4],5
00D3E4EE ^ 0F85 71FFFFFF   JNZ 00D3E465                             ; (16) 这里是循环,可以不去重复跟。
00D3E4F4    33C0            XOR EAX,EAX                              ; (17) 直接[F4]执行到这里。
00D3E4F6    5A              POP EDX
00D3E4F7    59              POP ECX
00D3E4F8    59              POP ECX
00D3E4F9    64:8910         MOV DWORD PTR FS:[EAX],EDX
00D3E4FC    68 16E5D300     PUSH 0D3E516
00D3E501    8D45 EC         LEA EAX,DWORD PTR SS:[EBP-14]
00D3E504    BA 02000000     MOV EDX,2
00D3E509    E8 0E52FCFF     CALL 00D0371C
00D3E50E    C3              RETN                                     ; (18) 返回。
            .
            .
            .
00D3E516    5F              POP EDI                                  ; (19) 返回到这里,[F8]单步向下走。
00D3E517    5E              POP ESI
00D3E518    5B              POP EBX
00D3E519    8BE5            MOV ESP,EBP
00D3E51B    5D              POP EBP
00D3E51C    C3              RETN                                     ; (20) 返回。
            .
            .
            .
00D401AB    E8 CCF6FFFF     CALL 00D3F87C                            ; (21) 返回到这里,[F8]单步向下走。
00D401B0    A3 88B6D400     MOV DWORD PTR DS:[D4B688],EAX
00D401B5    E8 8EABFFFF     CALL 00D3AD48
00D401BA    E8 D55CFEFF     CALL 00D25E94
00D401BF    59              POP ECX
00D401C0    5A              POP EDX
00D401C1    5B              POP EBX
00D401C2    C3              RETN                                     ; (22) 返回。
            .
            .
            .
00D0ED08    68 1F8724DD     PUSH DD24871F                            ; (23) 返回到这里,[F8]单步向下走。
00D0ED0D    68 2C2A0000     PUSH 2A2C
00D0ED12    68 900A0200     PUSH 20A90
00D0ED17    68 C0200000     PUSH 20C0
00D0ED1C    68 44CC0000     PUSH 0CC44
00D0ED21    68 00F00400     PUSH 4F000
00D0ED26    FF35 D434D400   PUSH DWORD PTR DS:[D434D4]
00D0ED2C    E8 23D1FFFF     CALL 00D0BE54
00D0ED31    310424          XOR DWORD PTR SS:[ESP],EAX
00D0ED34    8B05 D434D400   MOV EAX,DWORD PTR DS:[D434D4]
00D0ED3A    010424          ADD DWORD PTR SS:[ESP],EAX
00D0ED3D    C3              RETN                                     ; (24) 返回。
00D0ED3E    C3              RETN
            .
            .
            .
00D401D8    68 E1288508     PUSH 88528E1                             ; (25) 返回到这里,[F8]单步向下走。
00D401DD    68 E0020000     PUSH 2E0
00D401E2    68 04590100     PUSH 15904
00D401E7    68 C4170000     PUSH 17C4
00D401EC    68 10EA0300     PUSH 3EA10
00D401F1    68 00F00400     PUSH 4F000
00D401F6    FF35 D434D400   PUSH DWORD PTR DS:[D434D4]
00D401FC    E8 01000000     CALL 00D40202                            ; (26) 这个CALL要[F7]单步步入。
00D40201    8183 C404E84A B>ADD DWORD PTR DS:[EBX+4AE804C4],E8FFFCBC
00D4020B    0100            ADD DWORD PTR DS:[EAX],EAX
00D4020D    0000            ADD BYTE PTR DS:[EAX],AL
00D4020F    8183 C4043104 2>ADD DWORD PTR DS:[EBX+43104C4],1E824
00D40219    0000            ADD BYTE PTR DS:[EAX],AL
00D4021B    68 83C4048B     PUSH 8B04C483
00D40220    05 D434D400     ADD EAX,0D434D4
00D40225    E8 02000000     CALL 00D4022C
00D4022A    E8 6883C404     CALL 05988597
00D4022F    010424          ADD DWORD PTR SS:[ESP],EAX
00D40232    C3              RETN
00D40233    C3              RETN
            .
            .
            .
00D40202    83C4 04         ADD ESP,4                                ; (27) 步入后来到这里。[F8]单步向下走。
00D40205    E8 4ABCFCFF     CALL 00D0BE54                            ; (28) [F8]单步步过。
00D4020A    E8 01000000     CALL 00D40210                            ; (29) 这个CALL要[F7]单步步入。
00D4020F    8183 C4043104 2>ADD DWORD PTR DS:[EBX+43104C4],1E824
00D40219    0000            ADD BYTE PTR DS:[EAX],AL
00D4021B    68 83C4048B     PUSH 8B04C483
00D40220    05 D434D400     ADD EAX,0D434D4
00D40225    E8 02000000     CALL 00D4022C
00D4022A    E8 6883C404     CALL 05988597
00D4022F    010424          ADD DWORD PTR SS:[ESP],EAX
00D40232    C3              RETN
00D40233    C3              RETN
            .
            .
            .
00D40210    83C4 04         ADD ESP,4                                ; (30) 步入后来到这里。[F8]单步向下走。
00D40213    310424          XOR DWORD PTR SS:[ESP],EAX
00D40216    E8 01000000     CALL 00D4021C                            ; (31) 这个CALL要[F7]单步步入。
00D4021B    68 83C4048B     PUSH 8B04C483
00D40220    05 D434D400     ADD EAX,0D434D4
00D40225    E8 02000000     CALL 00D4022C
00D4022A    E8 6883C404     CALL 05988597
00D4022F    010424          ADD DWORD PTR SS:[ESP],EAX
00D40232    C3              RETN
            .
            .
            .
00D4021C    83C4 04         ADD ESP,4                                ; (32) 步入后来到这里。[F8]单步向下走。
00D4021F    8B05 D434D400   MOV EAX,DWORD PTR DS:[D434D4]
00D40225    E8 02000000     CALL 00D4022C                            ; (33) 这个CALL要[F7]单步步入。
00D4022A    E8 6883C404     CALL 05988597
00D4022F    010424          ADD DWORD PTR SS:[ESP],EAX
00D40232    C3              RETN
00D40233    C3              RETN
            .
            .
            .
00D4022C    83C4 04         ADD ESP,4                                ; (34) 步入后来到这里。[F8]单步向下走。
00D4022F    010424          ADD DWORD PTR SS:[ESP],EAX
00D40232    C3              RETN                                     ; (35) 返回。
00D40233    C3              RETN
            .
            .
            .
00D3FADC    E8 E7FEFFFF     CALL 00D3F9C8                            ; (36) 返回到这里。这个CALL要[F7]单步步入。
00D3FAE1    C3              RETN
            .
            .
            .
00D3F9C8    53              PUSH EBX                                 ; (37) 步入后来到这里。[F8]单步向下走。
00D3F9C9    56              PUSH ESI
00D3F9CA    57              PUSH EDI
00D3F9CB    83C4 DC         ADD ESP,-24
00D3F9CE    A1 9C2BD400     MOV EAX,DWORD PTR DS:[D42B9C]
00D3F9D3    C600 DF         MOV BYTE PTR DS:[EAX],0DF
00D3F9D6    A1 50B6D400     MOV EAX,DWORD PTR DS:[D4B650]
00D3F9DB    894424 14       MOV DWORD PTR SS:[ESP+14],EAX
00D3F9DF    B8 34E8D300     MOV EAX,0D3E834
00D3F9E4    894424 18       MOV DWORD PTR SS:[ESP+18],EAX
00D3F9E8    BA C8F9D300     MOV EDX,0D3F9C8
00D3F9ED    2BD0            SUB EDX,EAX
00D3F9EF    895424 1C       MOV DWORD PTR SS:[ESP+1C],EDX
00D3F9F3    B8 40E6D300     MOV EAX,0D3E640
00D3F9F8    8B15 F02BD400   MOV EDX,DWORD PTR DS:[D42BF0]
00D3F9FE    8B12            MOV EDX,DWORD PTR DS:[EDX]
00D3FA00    2B02            SUB EAX,DWORD PTR DS:[EDX]
00D3FA02    894424 20       MOV DWORD PTR SS:[ESP+20],EAX
00D3FA06    EB 06           JMP SHORT 00D3FA0E
00D3FA08    FF25 C3EB01E8   JMP DWORD PTR DS:[E801EBC3]
00D3FA0E    68 A7E8D300     PUSH 0D3E8A7
00D3FA13    58              POP EAX
00D3FA14    40              INC EAX
00D3FA15    68 1DFAD300     PUSH 0D3FA1D
00D3FA1A    50              PUSH EAX
00D3FA1B ^ EB ED           JMP SHORT 00D3FA0A                       ; (38) 跳。

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