johnroot 发表于 2007-11-1 12:00:13

EncryptPE V2.2007.4.11主程序破解分析

文章标题】: EncryptPE V2.2007.4.11主程序破解分析
【文章作者】: johnroot
【软件名称】: EncryptPE V2.2007.4.11主程序
【下载地址】: 自己搜索下载
【保护方式】: EncryptPE V2.2007.4.11
【编写语言】: DELPHI
【使用工具】: OLLYDBG
【操作平台】: WIN32
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】1。脱壳我就不在这多罗嗦了,详细请参考DarkBull大侠的文章。

2。修补被KEY文件偷走的3段代码:

找个注册版,DUMP就可以找到
004C4F6D    8D45 EC         LEA EAX,DWORD PTR SS:
004C4F70    BA F4B44C00   MOV EDX,EncryptP.004CB4F4
004C4F75    E8 3EF9F3FF   CALL EncryptP.004048B8
004C4F7A    8D95 48FFFFFF   LEA EDX,DWORD PTR SS:

004C5CFE    8D85 48FFFFFF   LEA EAX,DWORD PTR SS:
004C5D04    E8 1FF0F3FF   CALL EncryptP.00404D28
004C5D09    C600 06         MOV BYTE PTR DS:,6

004C832E    66:A1 605D4D00MOV AX,WORD PTR DS:
004C8334    66:83C0 1C      ADD AX,1C
004C8338    66:0305 405D4D0>ADD AX,WORD PTR DS:
004C833F    66:0305 445D4D0>ADD AX,WORD PTR DS:
004C8346    66:83E8 02      SUB AX,2
004C834A    66:BA 0400      MOV DX,4
004C834E    E8 418BFAFF   CALL EncryptP.00470E94
004C8353    8BD0            MOV EDX,EAX
004C8355    8D85 68FFFFFF   LEA EAX,DWORD PTR SS:
004C835B    B9 04000000   MOV ECX,4
004C8360    E8 13F6F3FF   CALL EncryptP.00407978
004C8365    8D85 44FFFFFF   LEA EAX,DWORD PTR SS:
004C836B    8B95 68FFFFFF   MOV EDX,DWORD PTR SS:
004C8371    E8 E6CAF3FF   CALL EncryptP.00404E5C
004C8376    66:A1 605D4D00MOV AX,WORD PTR DS:
004C837C    66:83C0 1C      ADD AX,1C
004C8380    66:0305 405D4D0>ADD AX,WORD PTR DS:
004C8387    66:0305 445D4D0>ADD AX,WORD PTR DS:
004C838E    66:83C0 02      ADD AX,2
004C8392    66:8B95 68FFFFF>MOV DX,WORD PTR SS:
004C8399    E8 F68AFAFF   CALL EncryptP.00470E94
004C839E    50            PUSH EAX
004C839F    8D85 44FFFFFF   LEA EAX,DWORD PTR SS:
004C83A5    E8 7EC9F3FF   CALL EncryptP.00404D28
004C83AA    8B8D 68FFFFFF   MOV ECX,DWORD PTR SS:
004C83B0    5A            POP EDX
004C83B1    E8 C2F5F3FF   CALL EncryptP.00407978
004C83B6    8B95 44FFFFFF   MOV EDX,DWORD PTR SS:
004C83BC    8B45 E0         MOV EAX,DWORD PTR SS:
004C83BF    8B08            MOV ECX,DWORD PTR DS:
004C83C1    FF51 2C         CALL DWORD PTR DS:


3。找出壳的数据文件:
004D045C >55            PUSH EBP               OEP
004D045D    8BEC            MOV EBP,ESP
004D045F    83C4 F0         ADD ESP,-10
004D0462    B8 4C024D00   MOV EAX,EncryptP.004D024C
004D0467    E8 B868F3FF   CALL EncryptP.00406D24
004D046C    E8 3FE5FEFF   CALL EncryptP.004BE9B0   跟进

004BE9C2    66:BA 1C00      MOV DX,1C                数据大小
004BE9C6    66:B8 0100      MOV AX,1               数据起始位置
004BE9CA    E8 C524FBFF   CALL EncryptP.00470E94   获取壳数据
004BE9CF    8B10            MOV EDX,DWORD PTR DS:   

004BE9C2    66:BA 1C00      MOV DX,1C
修改此处命令为 mov DX,F0000,来获取全部数据

004BE9CF    8B10            MOV EDX,DWORD PTR DS: F4我们停在着查看 EAX的数据就是壳的数据

用WINHEX获取EAX处数据长度为F000,另存为文件 EPE.DAT

看看壳的数据:

Offset      01234567   89ABCDEF

00000000   38 A8 CB EE 7C 69 CC EED8 0B CC EE FC FE CC EE   8ㄋ顋i填?填?填
00000010   FC BB CC EE 40 E2 0B 00D5 06 00 00 CB CE CC E5   ?填@?.?..宋体
00000020   00 00 00 00 FF FF FF FF04 00 00 00 BE AF B8 E6   ....

johnroot 发表于 2007-11-1 12:06:48

呵呵!是我们想要的,数据前面5个地址(每个地址4字节),是壳加密了的子程序地址。
Address是函数真实地址与保护密码的HASH值前八位(不足八位则前补0)转换过来的数以及特征整数两次异或过的,
自己处理下就可以用了。


4。找出壳的特征数值和原加壳机器的机器号:

用WINHEX搜索“EncryptPE(未注册)”可以找到

Offset      01234567   89ABCDEF

00EF4790   4E 0D 0A 44 31 38 44 4645 45 36 30 38 31 45 36   N..D18DFEE6081E6
00EF47A0   33 34 32 46 37 45 31 3943 42 44 0D 0A 6A 6F 68   342F7E19CBD..joh
00EF47B0   6E 72 6F 6F 74 0D 0A 3636 36 36 36 36 36 36 36   nroot..666666666
00EF47C0   36 36 36 36 36 36 0D 0A45 6E 63 72 79 70 74 50   666666..EncryptP
00EF47D0   45 28 CE B4 D7 A2 B2 E129 0D 0A 31 0D 0A 30 0D   E(未注册)..1..0.
00EF47E0   0A 30 0D 0A 32 30 30 3731 30 31 37 0D 0A 32 30   .0..20071017..20
00EF47F0   30 38 30 36 33 30 0D 0A33 30 30 0D 0A 33 35 0D   080630..300..35.
00EF4800   0A 33 30 30 0D 0A 31 3032 30 0D 0A 30 44 35 43   .300..1020..0D5C
00EF4810   30 31 35 45 34 42 31 3045 41 45 42 35 45 44 43   015E4B10EAEB5EDC
00EF4820   32 31 42 33 37 46 30 4334 42 36 41 44 30 30 46   21B37F0C4B6AD00F
00EF4830   37 38 44 41 45 43 31 4438 46 31 42 44 33 46 44   78DAEC1D8F1BD3FD
00EF4840   43 43 42 38 30 42 38 4636 31 30 34 37 46 33 30   CCB80B8F61047F30
00EF4850   32 46 37 39 36 35 31 3146 30 45 41 45 39 0D 0A   2F796511F0EAE9..
00EF4860   31 46 30 43 39 33 41 4346 46 46 41 37 31 43 32   1F0C93ACFFFA71C2
00EF4870   30 30 30 35 38 45 33 440D                        00058E3D.
由上数据可得知 :
特征整数为:1020
保密码的Hash值:0D5C015E4B10EAEB5EDC21B37F0C4B6AD00F78DAEC1D8F1BD3FDCCB80B8F61047F302F796511F0EAE9
原加壳机器的机器号:1F0C93ACFFFA71C200058E3D
限制试用天数、次数为:300
过期日期为:20080630



5。EncryptPE V2.2007.4.11的效验:
主程序里:
::004C431C::A1 60444D00            MOV EAX,                        
::004C4321::8B00                     MOV EAX,                           
::004C4323::BA 0F000000            MOV EDX,F                              
::004C4328::8B18                     MOV EBX,                           
::004C432A::FF53 0C                  CALL                   获取原加壳机器的机器码         
::004C432D::8B45 E4                  MOV EAX,                        
::004C4330::B9 04000000            MOV ECX,4                        取4位      
::004C4335::BA 09000000            MOV EDX,9                        第9位起      
::004C433A::E8 F109F4FF            CALL 00404D30                           \:JMPUP
::004C433F::8B45 E8                  MOV EAX,                        
::004C4342::BA 50444C00            MOV EDX,4C4450                              \->: FFFA   比较是不是“FFFA”
::004C4347::E8 D008F4FF            CALL 00404C1C                           \:JMPUP
::004C434C::74 07                  JE SHORT 004C4355                     \:JMPDOWN
这样的效验有4处,还有效验特征整数

DLL里:
::71201035::80B8 6E030000 07         CMP   BYTE PTR , 7         
::7120103C::73 6B                  JNB   SHORT 712010A9                  \:JMPDOWN//判断是不是EncryptPE主程序


::7120108B::BA FC112071            MOV   EDX, 712011FC                     \->: TEncryptPEForm //如果不是主程序,就判断主窗体
::71201090::E8 7F3EF2FF            CALL    71124F14                        \:JMPUP
::71201095::75 12                  JNZ   SHORT 712010A9                  \:JMPDOWN
::71201097::8B45 F8                  MOV   EAX,                   
::7120109A::05 58030000            ADD   EAX, 358                        
::7120109F::BA E8112071            MOV   EDX, 712011E8                     \->: EncryptPE    如果不是主程序,而主窗体 是 “TEncryptPEForm”就使加解密字符串结果为“EncryptPE”
::712010A4::E8 C33AF2FF            CALL    71124B6C                        \:JMPUP


由上面可知,我们只要把DUMP下的程序还原成原程序一样,它的效验就失效了

特征整数为:1020,使自己的机器号为:1F0C93ACFFFA71C200058E3D,选上开始获取的处理好的壳数据,自己再加
EncryptPE壳,到此EncryptPE V2.2007.4.11的注册权就由自己控制了。


--------------------------------------------------------------------------------

small-q 发表于 2007-11-1 14:34:34

强!!!呵呵,有空搞个动画来

[ 本帖最后由 small-q 于 2007-11-1 14:35 编辑 ]

Nisy 发表于 2007-11-1 14:41:31

江山待有牛人出 各领风骚数百年   /:09

网游难民 发表于 2007-11-1 14:44:57

无语中~~
不是一般的强/:good

ZHOU2X 发表于 2007-11-1 14:54:08

/:good 实在是牛/:09

bbyl 发表于 2007-11-1 15:11:46

太有才了!期待搞个破解版来。

playboyjin 发表于 2007-11-1 15:40:34

强,,,学习也学不到。。

cxh852456 发表于 2007-11-1 21:19:26

强悍/:good
老王/:002

CxLrb 发表于 2007-11-2 17:16:14

学习!完美!
页: [1] 2 3 4 5
查看完整版本: EncryptPE V2.2007.4.11主程序破解分析