首页
社区
课程
招聘
[原创]某字体软件的破解过程
发表于: 2011-2-22 17:04 5562

[原创]某字体软件的破解过程

2011-2-22 17:04
5562

目标程序:字体试衣间 v3.2.2 豪华版

一、去除 NAG 窗

载入运行,出现试用框后F12暂停程序,堆栈中找到
0012F90C  /0012FCD4
0012F910  |004445F2  返回到 ffr.004445F2 来自 <jmp.&MFC80U.#2011>
0012F914  |9713812D

来到
004445AC     391D 60075100             cmp dword ptr ds:[510760],ebx            ; [510760] = 0 即可
004445B2     75 08                     jnz short 004445BC
004445B4     3BFB                      cmp edi,ebx
004445B6     0F84 D8010000             je 00444794
004445BC     E8 53BD0700               call <jmp.&MFC80U.#1086>
004445C1     3BC3                      cmp eax,ebx
004445C3     74 0B                     je short 004445D0
004445C5     8B10                      mov edx,dword ptr ds:[eax]
004445C7     8BC8                      mov ecx,eax
004445C9     8B42 7C                   mov eax,dword ptr ds:[edx+7C]
004445CC     FFD0                      call eax
004445CE     EB 02                     jmp short 004445D2
004445D0     33C0                      xor eax,eax
004445D2     50                        push eax
004445D3     8D8C24 9C010000           lea ecx,dword ptr ss:[esp+19C]
004445DA     E8 8149FEFF               call 00428F60
004445DF     8D8C24 98010000           lea ecx,dword ptr ss:[esp+198]
004445E6     899C24 10030000           mov dword ptr ss:[esp+310],ebx
004445ED     E8 0AC00700               call <jmp.&MFC80U.#2011>
004445F2     83F8 02                   cmp eax,2
004445F5     8B2D 84245100             mov ebp,dword ptr ds:[512484]            ; USER32.PostMessageW
004445FB     75 34                     jnz short 00444631

往上到
00444570     6A FF                     push -1                                  ; 这里F2下断
00444572     68 C67F4C00               push 004C7FC6
00444577     64:A1 00000000            mov eax,dword ptr fs:[0]
0044457D     50                        push eax
0044457E     81EC F4020000             sub esp,2F4

重新载入运行,断下后看堆栈
0012FC28   7831338D  返回到 MFC80U.7831338D
0012FC2C   00000000
0012FC30   00000000
0012FC34   11677F39
0012FC38   0000047A                ; 这个值就是调用NAG窗口的 PostMessageW 的消息ID
0012FC3C   00D3B274
0012FC40   00000111

查找常量 47A,找到
004507BA   push 47A
00451347   push 47A
0045457D   push 47A
00464251   push 47A

全部F2下断,重新载入运行,第一次断在
00451347     68 7A040000               push 47A
0045134C     50                        push eax
0045134D     FF15 84245100             call dword ptr ds:[512484]               ; USER32.PostMessageW

往上到
00451307     813D 50085100 1A300A00    cmp dword ptr ds:[510850],0A301A         ; 关键比较
00451311     0F87 E7000000             ja 004513FE                              ; 这里要跳

查找常量 00510850,找到下一处
0045B425    > \85C0                    test eax,eax
0045B427    .  75 23                   jnz short 0045B44C                       ; 这里显然不能跳
0045B429    .  8B45 EC                 mov eax,dword ptr ss:[ebp-14]
0045B42C    .  50                      push eax                                 ; /<%s>
0045B42D    .  68 A85A4D00             push 004D5AA8                            ; |format = "%s"
0045B432    .  68 D8245100             push 005124D8                            ; |wstr = ffr.005124D8
0045B437    .  C705 50085100 87190E00  mov dword ptr ds:[510850],0E1987         ; |
0045B441    .  FF15 48534D00           call dword ptr ds:[<&MSVCR80._swprintf>] ; \_swprintf

继续往上到
0045B050    .  55                      push ebp
0045B051    .  8DAC24 2CFAFFFF         lea ebp,dword ptr ss:[esp-5D4]
0045B058    .  81EC D4050000           sub esp,5D4
0045B05E    .  6A FF                   push -1
0045B060    .  68 E29A4C00             push 004C9AE2
0045B065    .  64:A1 00000000          mov eax,dword ptr fs:[0]
0045B06B    .  50                      push eax
0045B06C    .  83EC 6C                 sub esp,6C
0045B06F    .  A1 D0225100             mov eax,dword ptr ds:[5122D0]

这里开始验证注册信息,具体算法跟踪从略;

将 0045B427 处nop掉,保存后运行时出现程序校验警告;

二、去除自校验

用 MessageBoxW 断点断下,堆栈中找到
0012FC44  |00450E30  RETURN to ffr.00450E30 from <jmp.&MFC80U.#1117>                        ; 调用警告框
0012FC48  |000000C2
0012FC4C  |00000000
0012FC50  |FFFFFFFF
0012FC54  |00450DF0  ffr.00450DF0
0012FC58  |783131F2  RETURN to MFC80U.783131F2
0012FC5C  |2AF505C4       
0012FC60  |0000046D                ; 消息ID
0012FC64  |00E1A978  ASCII "LLN"
0012FC68  |0015D100

查找常量 46D 到
004448BE     E8 DBB40700               call <jmp.&WINTRUST.WinVerifyTrust>      ; 校验程序
004448C3     3D 00010B80               cmp eax,800B0100                         ; TRUST_E_NOSIGNATURE
004448C8     75 19                     jnz short 004448E3                       ; 改 jmp 即可
004448CA     56                        push esi
004448CB     FF15 58554D00             call dword ptr ds:[<&USER32.IsWindow>]   ; USER32.IsWindow
004448D1     85C0                      test eax,eax
004448D3     74 0E                     je short 004448E3
004448D5     53                        push ebx
004448D6     53                        push ebx
004448D7     68 6D040000               push 46D                                 ; 消息ID
004448DC     56                        push esi
004448DD     FF15 84245100             call dword ptr ds:[512484]               ; PostMessageW

总结:

00451311    /0F87 E7000000             ja 004513FE                                ; 改 jmp
0045B427     75 23                     jnz short 0045B44C                ; nop掉
004448C8     75 19                     jnz short 004448E3                ; 改 jmp

注册码任意:
----------------------------------------------------------------
REGEDIT4

[HKEY_CURRENT_USER\Software\Apolisoft\Font Fitting Room Deluxe]
"name"="加密值"
"key"="加密值"
----------------------------------------------------------------

补充:

若干天后出现暗桩,跟进 47A 常量,找到时间验证
0045A980  /$  55                      push ebp
0045A981  |.  8BEC                    mov ebp,esp
0045A983  |.  83E4 F8                 and esp,FFFFFFF8
0045A986  |.  6A FF                   push -1
0045A988  |.  68 6B9A4C00             push 004C9A6B
0045A98D  |.  64:A1 00000000          mov eax,dword ptr fs:[0]
0045A993  |.  50                      push eax
0045A994  |.  81EC BC000000           sub esp,0BC
0045A99A  |.  53                      push ebx
0045A99B  |.  55                      push ebp
0045A99C  |.  56                      push esi
0045A99D  |.  57                      push edi
0045A99E  |.  A1 D0225100             mov eax,dword ptr ds:[5122D0]
0045A9A3  |.  33C4                    xor eax,esp
0045A9A5  |.  50                      push eax
0045A9A6  |.  8D8424 D0000000         lea eax,dword ptr ss:[esp+D0]
0045A9AD  |.  64:A3 00000000          mov dword ptr fs:[0],eax
0045A9B3  |.  8BF9                    mov edi,ecx
0045A9B5  |.  897C24 34               mov dword ptr ss:[esp+34],edi
0045A9B9  |.  8B35 14534D00           mov esi,dword ptr ds:[<&MSVCR80._time64>]     ;  MSVCR80._time64
0045A9BF  |.  33DB                    xor ebx,ebx
0045A9C1  |.  53                      push ebx
0045A9C2  |.  899C24 90000000         mov dword ptr ss:[esp+90],ebx
0045A9C9  |.  C74424 70 01000000      mov dword ptr ss:[esp+70],1
0045A9D1  |.  899C24 94000000         mov dword ptr ss:[esp+94],ebx
0045A9D8  |.  C74424 64 90100000      mov dword ptr ss:[esp+64],1090
0045A9E0  |.  FFD6                    call esi                                      ;  <&MSVCR80._time64>
0045A9E2  |.  D9EE                    fldz

返回值必须大于 004E6820 处的值,将此处改为 0 保存即可;

如果有其他暗桩,查找 46D 和 47A 解决;


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 15
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
有点迷惑  lz能将软件发下?
2011-3-26 11:33
0
雪    币: 56
活跃值: (276)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主可以详细讲一下找到自校验的方法和过程么?
2011-6-17 21:33
0
游客
登录 | 注册 方可回帖
返回
//