一、破解目标: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 ; 存用户名和注册码
再修改程序几个地方,懒得写了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)