• 标 题:PECompact 2.07主程序的脱壳+日期破解
  • 作 者:实习生
  • 时 间:004-05-07,17:26
  • 链 接:http://bbs.pediy.com

【  标题  】 PECompact 2.07主程序的脱壳+日期破解
【  作者  】 实习生
【破解平台】 Win98
【下载地址】 http://www.bitsum.com/files/pec2setup.zip
【软件简介】 PECompact是一个能压缩可执行文件的工具,通过压缩代码、数据、相关资源使压缩能达到100%,由于在运行时不需要恢复磁盘上压缩后的数据,所以与没有压缩的程序在运行时没有明显的速度差异,在某种程度上还有所改善
【  声明  】 我是我,你是你,我只是学习你,研究你,打扰了I'm Sorry!
OD异常设置忽略所有异常,
pec2gui.exe
00401000 >  B8 B4F14100     MOV EAX,PEC2GUI.0041F1B4 //OD载入停在这,保存Seh入口(记住它),先在Seh入口下断,F9运行。
00401005    50              PUSH EAX
00401006    64:FF35 0000000>PUSH DWORD PTR FS:[0]
0040100D    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00401014    33C0            XOR EAX,EAX
00401016    8908            MOV DWORD PTR DS:[EAX],ECX //典型PECompact 2.0X内存异常。

0041F1B4    B8 5DE141F0     MOV EAX,F041E15D //Seh入口
0041F1B9    8D88 7A100010   LEA ECX,DWORD PTR DS:[EAX+1000107A]
0041F1BF    8941 01         MOV DWORD PTR DS:[ECX+1],EAX
0041F1C2    8B5424 04       MOV EDX,DWORD PTR SS:[ESP+4]
0041F1C6    8B52 0C         MOV EDX,DWORD PTR DS:[EDX+C]
0041F1C9    C602 E9         MOV BYTE PTR DS:[EDX],0E9
0041F1CC    83C2 05         ADD EDX,5
0041F1CF    2BCA            SUB ECX,EDX
0041F1D1    894A FC         MOV DWORD PTR DS:[EDX-4],ECX
0041F1D4    33C0            XOR EAX,EAX
0041F1D6    C3              RETN
//直接运行或Shif+F9会停在这条死循环指令上:
0041F1D7  - E9 FBFFFFFF     JMP PEC2GUI.0041F1D7 //Die for ever!
0041F1DC    64:8F05 0000000>POP DWORD PTR FS:[0]

//取消断点,Ctrl+F9,内存异常取消打钩,F8一下停在这个异常指令上
0041F1C9    C602 E9         MOV BYTE PTR DS:[EDX],0E9
//重新忽略内存异常,重复在Seh入口41F1B4下断,Shift+F9过异常,中断后取消断点,在当前位置直接Ctrl+F向下找 jmp eax ,并在上面F2下断点,F9运行,停在jmp eax指令上,F7或F8一下就到OEP了!

0040D037    6A 18           PUSH 18 //OEP,破解了日期后再用Lordpe脱壳,ImportREC进行Fixed!
0040D039    68 A04C4100     PUSH PEC2GUI.00414CA0
0040D03E    E8 1D020000     CALL PEC2GUI.0040D260

破解过期线索:Software\Microsoft\Windows\CurrentVersion\COMCTL
//反汇编查找字符串"Software\Microsoft\Windows\CurrentVersion\COMCTL",它的位置在下面:
00402202    68 C0444100     PUSH PEC2GUI.004144C0                    ; ASCII "Software\Microsoft\Windows\CurrentVersion\COMCTL"
找到了再向下找到这样的代码:
004022EA    2BC6            SUB EAX,ESI  //eax为试用的天数,esi为使用过压缩以来的天数。
004022EC    5F              POP EDI
004022ED    8903            MOV DWORD PTR DS:[EBX],EAX //这个是你剩下使用的天数。
004022EF    85C0            TEST EAX,EAX
004022F1    5E              POP ESI
004022F2    0F9EC0          SETLE AL
004022F5    5B              POP EBX
004022F6    83C4 1C         ADD ESP,1C
004022F9    C2 0C00         RETN 0C

修改(随你喜欢怎么改)后:
004022EA    5F              POP EDI
004022EB    C703 6D010000   MOV DWORD PTR DS:[EBX],16D //每年都有365日给你用啦!
004022F1    5E              POP ESI
004022F2    33C0            XOR EAX,EAX
004022F4    90              NOP
004022F5    5B              POP EBX
004022F6    83C4 1C         ADD ESP,1C
004022F9    C2 0C00         RETN 0C
//日期破解完毕,就Dump和Fixed吧!


PEC2.exe脱壳破解与Gui主程序方法相同:
00401000 >  B8 5C4C4200     MOV EAX,PEC2.00424C5C //OD载入停在这,保存Seh入口。
00401005    50              PUSH EAX
00401006    64:FF35 0000000>PUSH DWORD PTR FS:[0]
0040100D    64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00401014    33C0            XOR EAX,EAX
00401016    8908            MOV DWORD PTR DS:[EAX],ECX //典型PECompact 2.0X内存异常。
//直接去SEH入口下断点,F9运行停在Seh入口,清除断点

00424C5C    B8 053C42F0     MOV EAX,F0423C05 // here!
00424C61    8D88 7A100010   LEA ECX,DWORD PTR DS:[EAX+1000107A]
00424C67    8941 01         MOV DWORD PTR DS:[ECX+1],EAX
00424C6A    8B5424 04       MOV EDX,DWORD PTR SS:[ESP+4]
00424C6E    8B52 0C         MOV EDX,DWORD PTR DS:[EDX+C]
00424C71    C602 E9         MOV BYTE PTR DS:[EDX],0E9 //存放解码
00424C74    83C2 05         ADD EDX,5
00424C77    2BCA            SUB ECX,EDX
00424C79    894A FC         MOV DWORD PTR DS:[EDX-4],ECX //存放解码
00424C7C    33C0            XOR EAX,EAX
00424C7E    C3              RETN
直接运行或Shif+F9会停在这条死循环指令上:
00424C7F  - E9 FBFFFFFF     JMP PEC2.00424C7F //Die for ever
00424C84    64:8F05 0000000>POP DWORD PTR FS:[0]
//取消断点,Ctrl+F9,内存异常取消打钩,F8一下停在这个异常指令上
00424C71    C602 E9         MOV BYTE PTR DS:[EDX],0E9 //上面的F8到了这里异常了

00424C5C    B8 053C42F0     MOV EAX,F0423C05 //再次在这设断,Shif+F9运行又停在这,该动手了,直接Ctrl+F向下找 jmp eax 

00424D2C    FFE0            JMP EAX //F2下断点,F9运行停在这,eax为00413392,借用一下“飞向光明之巅”。
00424D2E    0000            ADD BYTE PTR DS:[EAX],AL
00424D30    0000            ADD BYTE PTR DS:[EAX],AL

00413392    6A 18           PUSH 18 //OEP,破解了日期后再用Lordpe脱壳,ImportREC进行Fixed!
00413394    68 C8D64100     PUSH PEC2.0041D6C8
00413399    E8 22020000     CALL PEC2.004135C0

00401CA0  /$  83EC 1C       SUB ESP,1C  // call入口
……找到关键地方
00401CC2  |.  68 90B24100   PUSH PEC2.0041B290                       ; |Subkey = "Software\Microsoft\Windows\CurrentVersion\COMCTL"

向下找到这样的代码:
00401DAA  |.  2BC6          SUB EAX,ESI  //eax为试用的天数,esi为使用过压缩以来的天数。
00401DAC  |.  5F            POP EDI
00401DAD  |.  8903          MOV DWORD PTR DS:[EBX],EAX //这个是你剩下使用的天数。
00401DAF  |.  85C0          TEST EAX,EAX
00401DB1  |.  5E            POP ESI
00401DB2  |.  0F9EC0        SETLE AL
00401DB5  |.  5B            POP EBX
00401DB6  |.  83C4 1C       ADD ESP,1C
00401DB9  \.  C2 0C00       RETN 0C
修改后:
00401DAA      5F            POP EDI
00401DAB      C703 6D010000 MOV DWORD PTR DS:[EBX],16D //每年都有365日给你用啦!
00401DB1      5E            POP ESI
00401DB2      33C0          XOR EAX,EAX
00401DB4      90            NOP
00401DB5  |.  5B            POP EBX
00401DB6  |.  83C4 1C       ADD ESP,1C
00401DB9  \.  C2 0C00       RETN 0C
//日期破解完毕,就Dump和Fixed吧!
测试一下,正常运行加壳!破解日期方面简单点你也可以让其检测Software\Microsoft\Windows\CurrentVersion\COMCTL下面的判断不跳,则每次启动都作为首次使用日期登记到注册表。Enjoy!