一、破解目标:Asprotect 2.0 加壳的 超级转换秀 v8.0

二、破解工具:OllyDbg v1.10,ImportREC 1.6 Final,WinHex 11.2

三、破解作者:DarkBull@email.com.cn

四、破解过程:

1.寻找OEP

用OllyDbg载入,选IsDebuggerPresent插件隐藏OD,入口如下:

Conversi.>  68 01809100 PUSH Conversi.00918001
00401005    E8 01000000 CALL Conversi.0040100B
0040100A    C3          RETN
0040100B    C3          RETN

通过最后一个异常后,下断HE 0012FFC0,拦截后代码如下:

011A6AF0    FF35 40241B>PUSH DWORD PTR DS:[11B2440]
011A6AF6    C3          RETN          ; 返回到变形的OEP

****************************************************************
013A02D6    55          PUSH EBP        ; 1.OEP一般都长成这样
013A02D7    03EF        ADD EBP,EDI
013A02D9    81DD F05200>SBB EBP,FE0052F0
013A02DF    8D6C24 1B   LEA EBP,DWORD PTR SS:[ESP+1B]
013A02E3    8D6C0D E5   LEA EBP,DWORD PTR SS:[EBP+ECX-1B]
013A02E7    64:EB 02    JMP SHORT 013A02EC                   
013A02EA    CD 20       INT 20
013A02EC    2BE9        SUB EBP,ECX        ; 2.MOV  EBP,ESP
013A02EE    6A FF       PUSH -1          ; 3.PUSH -1
013A02F0    6A BE       PUSH -42
013A02F2    66:9C       PUSHF
013A02F4    51          PUSH ECX
013A02F5    F2:         PREFIX REPNE:                        
013A02F6    EB 01       JMP SHORT 013A02F9
013A02F8    F2:         PREFIX REPNE:                        
013A02F9    8D4C75 70   LEA ECX,DWORD PTR SS:[EBP+ESI*2+70]
013A02FD    EB 01       JMP SHORT 013A0300
013A02FF    F0:8D4C19 9>LOCK LEA ECX,DWORD PTR DS:[ECX+EBX-7>
013A0304    2BCB        SUB ECX,EBX
013A0306    B9 EEF64200 MOV ECX,42F6EE
013A030B    034C24 18   ADD ECX,DWORD PTR SS:[ESP+18]
013A030F    8D4C24 0F   LEA ECX,DWORD PTR SS:[ESP+F]
013A0313    F3:         PREFIX REP:                          
013A0314    EB 02       JMP SHORT 013A0318
013A0316    CD 20       INT 20
013A0318    65:EB 01    JMP SHORT 013A031C                   
013A031B    9A 8D4C21F1>CALL FAR 4C8D:F1214C8D               
013A0322    0106        ADD DWORD PTR DS:[ESI],EAX
013A0324    2BC8        SUB ECX,EAX
013A0326    EB 02       JMP SHORT 013A032A
013A0328    CD 20       INT 20
013A032A    FF7424 18   PUSH DWORD PTR SS:[ESP+18]
013A032E    50          PUSH EAX
013A032F    334424 08   XOR EAX,DWORD PTR SS:[ESP+8]
013A0333    B8 AABA4200 MOV EAX,42BAAA
013A0338    C1C0 0D     ROL EAX,0D
013A033B    F2:         PREFIX REPNE:                        
013A033C    EB 01       JMP SHORT 013A033F
013A033E    F0:83E8 BF  LOCK SUB EAX,-41                    
013A0342    8D4424 5E   LEA EAX,DWORD PTR SS:[ESP+5E]
013A0346    EB 02       JMP SHORT 013A034A
013A0348    CD 20       INT 20
013A034A    8D4408 A2   LEA EAX,DWORD PTR DS:[EAX+ECX-5E]
013A034E    2BC1        SUB EAX,ECX
013A0350    83C0 04     ADD EAX,4
013A0353    C700 30154D>MOV DWORD PTR DS:[EAX],4D1530    ; 4.PUSH 004D1530
013A0359    58          POP EAX
013A035A    EB 02       JMP SHORT 013A035E
013A035C    CD 20       INT 20
013A035E    8F4421 00   POP DWORD PTR DS:[ECX]
013A0362    59          POP ECX
013A0363    66:9D       POPF
013A0365    E9 15000000 JMP 013A037F
013A036A    F2:         PREFIX REPNE:                        
013A036B    EB 01       JMP SHORT 013A036E
013A036D    C7          ???                                  
013A036E    FF31        PUSH DWORD PTR DS:[ECX]
013A0370    B9 82334200 MOV ECX,423382
013A0375    334C24 28   XOR ECX,DWORD PTR SS:[ESP+28]
013A0379    59          POP ECX
013A037A    E9 C0030000 JMP 013A073F
013A037F    68 5458F46F PUSH 6FF45854
013A0384    F2:         PREFIX REPNE:                       
013A0385    EB 01       JMP SHORT 013A0388
013A0387    9A 669C5513>CALL FAR EBE9:13559C66              
013A038E    02CD        ADD CL,CH
013A0390    2081 E58FFD>AND BYTE PTR DS:[ECX+74FD8FE5],AL
013A0396  ^ 79 8D       JNS SHORT 013A0325
013A0398    6C          INS BYTE PTR ES:[EDI],DX            
013A0399    24 0C       AND AL,0C
013A039B    83ED 0C     SUB EBP,0C
013A039E    8D6C05 06   LEA EBP,DWORD PTR SS:[EBP+EAX+6]
013A03A2    2BE8        SUB EBP,EAX
013A03A4    F2:         PREFIX REPNE:                        
013A03A5    EB 01       JMP SHORT 013A03A8
013A03A7  - E9 568D3407 JMP 086E9102
013A03AC    81DE FA2005>SBB ESI,F40520FA
013A03B2    8DB42B A4D1>LEA ESI,DWORD PTR DS:[EBX+EBP+45D1A4]  ; 5.PUSH 0045D1A4
013A03B9    2BF5        SUB ESI,EBP
013A03BB    2BF3        SUB ESI,EBX
013A03BD    F2:         PREFIX REPNE:                        
013A03BE    EB 01       JMP SHORT 013A03C1
013A03C0  - E9 F3EB02CD JMP CE3CEFB8
013A03C5    2056 8F     AND BYTE PTR DS:[ESI-71],DL
013A03C8    44          INC ESP                              
013A03C9    25 005E5D66 AND EAX,665D5E00
013A03CE    9D          POPFD
013A03CF    64:A1 00000>MOV EAX,DWORD PTR FS:[0]    ; 6. \
013A03D5    50          PUSH EAX        ; 7. |
013A03D6    64:8925 000>MOV DWORD PTR FS:[0],ESP    ; 8. |
013A03DD    83EC 68     SUB ESP,68        ; 9. |
013A03E0    53          PUSH EBX        ; 10 |
013A03E1    56          PUSH ESI        ; 11  =-原代码
013A03E2    57          PUSH EDI        ; 12 |
013A03E3    8965 E8     MOV DWORD PTR SS:[EBP-18],ESP    ; 13 |
013A03E6    33DB        XOR EBX,EBX        ; 14 |
013A03E8    895D FC     MOV DWORD PTR SS:[EBP-4],EBX    ; 15 |
013A03EB    6A 02       PUSH 2          ; 16 /
013A03ED    FF15 68BA4C>CALL NEAR DWORD PTR DS:[4CBA68]          ; 17.msvcrt.__set_app_type
013A03F3    59          POP ECX          ; 18 \
013A03F4    830D A4A366>OR DWORD PTR DS:[66A3A4],FFFFFFFF  ; 19  =-原代码
013A03FB    830D A8A366>OR DWORD PTR DS:[66A3A8],FFFFFFFF  ; 20 /
013A0402    FF15 6CBA4C>CALL NEAR DWORD PTR DS:[4CBA6C]         ; 21.msvcrt.__p__fmode
013A0408    03CF        ADD ECX,EDI
013A040A    81E1 984DC8>AND ECX,B1C84D98
013A0410    8D8B F03B66>LEA ECX,DWORD PTR DS:[EBX+663BF0]  ; 22.MOV ECX,DWORD PTR DS:[663BF0]
013A0416    EB 01       JMP SHORT 013A0419
013A0418    E8 2BCBFF31 CALL 3339CF48
013A041D    B9 4E714A00 MOV ECX,4A714E
013A0422    EB 01       JMP SHORT 013A0425
013A0424    9A 334C2408>CALL FAR 8959:08244C33              
013A042B    08FF        OR BH,BH        ; 23.MOV DWORD PTR DS:[EAX],ECX
013A042D    15 70BA4C00 ADC EAX,4CBA70        ; 24.CALL NEAR DWORD PTR DS:[4CBA70]
013A0432    B9 C2EA4A00 MOV ECX,4AEAC2
013A0437    C1C9 DD     ROR ECX,0DD                          
013A043A    034C24 18   ADD ECX,DWORD PTR SS:[ESP+18]
013A043E    83C9 87     OR ECX,FFFFFF87
013A0441    EB 02       JMP SHORT 013A0445
013A0443    CD 20       INT 20
013A0445    8D8A EC3B66>LEA ECX,DWORD PTR DS:[EDX+663BEC]  ; 25.MOV ECX,DWORD PTR DS:[663BEC]
013A044B    F2:         PREFIX REPNE:                        
013A044C    EB 01       JMP SHORT 013A044F
013A044E    F2:         PREFIX REPNE:                        
013A044F    2BCA        SUB ECX,EDX
013A0451    FF31        PUSH DWORD PTR DS:[ECX]
013A0453    034C24 38   ADD ECX,DWORD PTR SS:[ESP+38]
013A0457    65:EB 01    JMP SHORT 013A045B                   
013A045A    E8 B9C47E45 CALL 46B8C918
013A045F    0059 89     ADD BYTE PTR DS:[ECX-77],BL
013A0462    08B8 62D748>OR BYTE PTR DS:[EAX+48D762],BH    ; 26.MOV DWORD PTR DS:[EAX],ECX
013A0468    B8 5ACC4500 MOV EAX,45CC5A
013A046D    26:EB 02    JMP SHORT 013A0472                   
013A0470    CD 20       INT 20
013A0472    B8 F6C64200 MOV EAX,42C6F6
013A0477    034424 38   ADD EAX,DWORD PTR SS:[ESP+38]
013A047B    8D8422 74BA>LEA EAX,DWORD PTR DS:[EDX+4CBA74]  ; 27.MOV EAX,DWORD PTR DS:[4CBA74]
013A0482    2BC2        SUB EAX,EDX
013A0484    8B00        MOV EAX,DWORD PTR DS:[EAX]    ; 28.原代码
013A0486    E9 C8040000 JMP 013A0953

由于篇幅有限,省略一些ASPr的垃圾代码。只要找一个Vc的程序,对照一下就明白了,后面的就自己加吧。
        
29.MOV DWORD PTR DS:[66A3A0],EAX
30.CALL 0045D1D7
31.CMP DWORD PTR DS:[500588],EBX
32.JNZ 0045D0AB              ; 定位后的值
33.PUSH 0045D1D4
34.CALL NEAR DWORD PTR DS:[4CBA60]        ; msvcrt.__setusermatherr
35.POP ECX
36.CALL PROC1

PROC1:
1.PUSH 30000
2.PUSH 10000
3.CALL 0045D1D8              ; <JMP.&msvcrt._controlfp>
4.POP ECX
5.POP ECX
6.RETN

37.PUSH 004FB07C
38.PUSH 004FB078
39.CALL 0045D1BC            ; <JMP.&msvcrt._initterm>
40.EAX,DWORD PTR DS:[663BE8]
41.MOV DWORD PTR SS:[EBP-6C],EAX
42.LEA EAX,DWORD PTR SS:[EBP-6C]
43.PUSH EAX
44.PUSH DWORD PTR DS:[663BE4]
45.LEA EAX,DWORD PTR SS:[EBP-64]
46.PUSH EAX
47.LEA EAX,DWORD PTR SS:[EBP-70]
48.PUSH EAX
49.LEA EAX,DWORD PTR SS:[EBP-60]
50.PUSH EAX
51.CALL NEAR DWORD PTR DS:[4CBA58]        ; msvcrt.__getmainargs
52.PUSH 004FB074
53.PUSH 004FB000
54.CALL 0045D1BC            ; <JMP.&msvcrt._initterm>
55.ADD ESP,24
56.MOV EAX,DWORD PTR DS:[4CBA54]
57.MOV ESI,DWORD PTR DS:[EAX]
58.MOV DWORD PTR SS:[EBP-74],ESI
59.CMP BYTE PTR DS:[ESI],22
60.JNZ SHORT 0045D11B            ; 定位后的值
61.INC ESI
62.MOV DWORD PTR SS:[EBP-74],ESI
63.MOV AL,BYTE PTR DS:[ESI]
64.CMP AL,BL
65.JE SHORT 0045D125            ; 定位后的值
66.CMP AL,20
67.JBE SHORT 0045D117            ; 定位后的值
68.MOV DWORD PTR SS:[EBP-30],EBX
69.LEA EAX,DWORD PTR SS:[EBP-5C]
70.PUSH EAX
71.CALL NEAR DWORD PTR DS:[4CB228]                         ; GetStartupInfoA
72.TEST BYTE PTR SS:[EBP-30],1
73.JE SHORT 0045D149            ; 定位后的值
74.MOVZX EAX,WORD PTR SS:[EBP-2C]
75.JMP SHORT 0045D14C            ; 定位后的值 
76.CMP BYTE PTR DS:[ESI],20
77.JBE SHORT 0045D11B             ; 定位后的值
78.INC ESI
79.MOV DWORD PTR SS:[EBP-74],ESI
80.JMP SHORT 0045D13E             ; 定位后的值
81.PUSH 0A
82.POP EAX
83.PUSH EAX
84.PUSH ESI
85.PUSH EBX
86.PUSH EBX  
87.CALL NEAR DWORD PTR DS:[4CB1F8]                         ; GetModuleHandleA
88.PUSH EAX
89.CALL Proc2

Proc2:
1.FF7424 10 PUSH DWORD PTR SS:[ESP+10]
2.FF7424 10 PUSH DWORD PTR SS:[ESP+10]
3.FF7424 10 PUSH DWORD PTR SS:[ESP+10]
4.FF7424 10 PUSH DWORD PTR SS:[ESP+10]
5.CALL 004C0FA0                                           ;  <JMP.&mfc42.#1576_AfxWinMain>
6.RETN 10


90.MOV DWORD PTR SS:[EBP-68],EAX
91.PUSH EAX
92.CALL NEAR DWORD PTR DS:[4CBA50]                        ; exit
93.MOV EAX,DWORD PTR SS:[EBP-14]  
94.MOV ECX,DWORD PTR DS:[EAX]
95.MOV ECX,DWORD PTR DS:[ECX]
96.MOV DWORD PTR SS:[EBP-78],ECX
97.PUSH EAX
98.PUSH ECX
100.CALL 0045D1B6                                           ;  <JMP.&msvcrt._XcptFilter>
101.POP ECX
102.POP ECX
103.RETN

找出原代码后,定位代码地址:OEP为0045D028,Proc1为0045D1C2,Proc2为004C0DA0。

2.寻找IAT

下断BP GetProcAddress,执行到返回,见如下代码:
0119CB4E    AD         LODS DWORD PTR DS:[ESI]      ; AL=0
0119CB4F    09C0       OR EAX,EAX
0119CB51    74 4A      JE SHORT 0119CB9D
0119CB53    89C7       MOV EDI,EAX
0119CB55    037D F8    ADD EDI,DWORD PTR SS:[EBP-8]
0119CB58    897D F4    MOV DWORD PTR SS:[EBP-C],EDI
0119CB5B    89F3       MOV EBX,ESI
0119CB5D    31C9       XOR ECX,ECX
0119CB5F    49         DEC ECX
0119CB60    87FE       XCHG ESI,EDI
0119CB62    30C0       XOR AL,AL
0119CB64    F2:AE      REPNE SCAS BYTE PTR ES:[EDI]
0119CB66    87FE       XCHG ESI,EDI
0119CB68    AC         LODS BYTE PTR DS:[ESI]      ; 按F8执行到这里
0119CB69    80F8 00    CMP AL,0  
0119CB6C  ^ 74 E0      JE SHORT 0119CB4E
0119CB6E    80F8 01    CMP AL,1
0119CB71    75 06      JNZ SHORT 0119CB79
0119CB73    8345 F4 04 ADD DWORD PTR SS:[EBP-C],4    ; AL=1
0119CB77  ^ EB EF      JMP SHORT 0119CB68
0119CB79    53         PUSH EBX
0119CB7A    56         PUSH ESI
0119CB7B    53         PUSH EBX
0119CB7C    8D5D F4    LEA EBX,DWORD PTR SS:[EBP-C]
0119CB7F    53         PUSH EBX
0119CB80    80F8 05    CMP AL,5
0119CB83    74 06      JE SHORT 0119CB8B
0119CB85    0FB60E     MOVZX ECX,BYTE PTR DS:[ESI]    ; AL=2\6
0119CB88    41         INC ECX
0119CB89    EB 05      JMP SHORT 0119CB90
0119CB8B    B9 0400000>MOV ECX,4        ; AL=5
0119CB90    01CE       ADD ESI,ECX
0119CB92    FF75 F0    PUSH DWORD PTR SS:[EBP-10]
0119CB95    E8 36FEFFF>CALL 0119C9D0        ; 写入IAT
0119CB9A    5B         POP EBX
0119CB9B  ^ EB CB      JMP SHORT 0119CB68
0119CB9D    5F         POP EDI
0119CB9E    5E         POP ESI
0119CB9F    5B         POP EBX
0119CBA0    5A         POP EDX
0119CBA1    59         POP ECX
0119CBA2    8BC3       MOV EAX,EBX
0119CBA4    5B         POP EBX
0119CBA5    8BE5       MOV ESP,EBP
0119CBA7    5D         POP EBP
0119CBA8    C3         RETN

当AL=2或6时,F7进入0119C9D0,直到如下代码处:
0119CA58    6A 00      PUSH 0
0119CA5A    68 08BC190>PUSH 119BC08
0119CA5F    8D4D FC    LEA ECX,DWORD PTR SS:[EBP-4]
0119CA62    8BD3       MOV EDX,EBX
0119CA64    8BC6       MOV EAX,ESI
0119CA66    E8 01F9FFF>CALL 0119C36C        ; 加函数地址
0119CA6B    8B55 0C    MOV EDX,DWORD PTR SS:[EBP+C]
0119CA6E    8B12       MOV EDX,DWORD PTR DS:[EDX]
0119CA70    891A       MOV DWORD PTR DS:[EDX],EBX    ; 将EAX改为EBX
0119CA72    EB 5C      JMP SHORT 0119CAD0

然后再按F9运行,出现异常时,请出ImportREC,获得完整的IID,再修复DUMP文件即可。

3.爆破

先创建以下键值:
[HKEY_LOCAL_MACHINE\SOFTWARE\ConversionShow]
"isrun"="C:\\Program Files\\超级转换秀\\ConversionShow.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\PowerrSoft]
"ConversionShow"="1234567890"          ; 机器码
[HKEY_LOCAL_MACHINE\SOFTWARE\System32NewLogo]
"LogoNumber"="9876543210"          ; 注册码

再创建以下文件:
WINDOWS目录下的PSCONFIRMCS.INI          ; 用于检查状态
程序文件下的datafile.cfg          ; 存用户名和注册码

再修改程序几个地方,懒得写了。