Nisy 发表于 2014-6-15 23:32:31

DFX 验证分析





应某人之约,特做此图文教程。
DFX 是一款PC的音效增强软件,未注册版无法使用3D音效环绕(3D Surround),点关于也显示未注册(Unregistered(Trial Mode))。

程序没有注册的窗口,早期版本注册文件保存在注册表中,8.X 之后的注册文件保存在KeyFile。我们不看算法,简单的看下注册流程。

OD 搜索未注册字符串:



双击未注册,来到代码:


0043E017   .8B83 A4C40100 MOV   EAX, DWORD PTR DS:
0043E01D   .3BC5          CMP   EAX, EBP
0043E01F   .75 53         JNZ   SHORT DFX.0043E074
0043E021   .8D4424 18   LEA   EAX, DWORD PTR SS:
0043E025   .83C0 FE       ADD   EAX, -2
0043E028   .EB 06         JMP   SHORT DFX.0043E030
0043E02A      8D9B 00000000 LEA   EBX, DWORD PTR DS:
0043E030   >66:8B48 02    MOV   CX, WORD PTR DS:
0043E034   .03C5          ADD   EAX, EBP
0043E036   .66:85C9       TEST    CX, CX
0043E039   .^ 75 F5         JNZ   SHORT DFX.0043E030
0043E03B   .8B15 942A4E00 MOV   EDX, DWORD PTR DS:       ;Registered    // 这里是注册版 ...
0043E041   .8B0D 982A4E00 MOV   ECX, DWORD PTR DS:       ;gistered
0043E047   .8910          MOV   DWORD PTR DS:, EDX          ;ntdll.KiFastSystemCallRet
0043E049   .8B15 9C2A4E00 MOV   EDX, DWORD PTR DS:       ;stered
0043E04F   .8948 04       MOV   DWORD PTR DS:, ECX
0043E052   .8B0D A02A4E00 MOV   ECX, DWORD PTR DS:       ;ered
0043E058   .8950 08       MOV   DWORD PTR DS:, EDX      ;ntdll.KiFastSystemCallRet
0043E05B   .8B15 A42A4E00 MOV   EDX, DWORD PTR DS:       ;ed
0043E061   .8948 0C       MOV   DWORD PTR DS:, ECX
0043E064   .66:8B0D A82A4>MOV   CX, WORD PTR DS:
0043E06B   .8950 10       MOV   DWORD PTR DS:, EDX       ;ntdll.KiFastSystemCallRet
0043E06E   .66:8948 14    MOV   WORD PTR DS:, CX
0043E072   .EB 3A         JMP   SHORT DFX.0043E0AE
0043E074   >8D7C24 18   LEA   EDI, DWORD PTR SS:
0043E078   .83C7 FE       ADD   EDI, -2
0043E07B   .83F8 03       CMP   EAX, 3
0043E07E   .75 17         JNZ   SHORT DFX.0043E097
0043E080   >66:8B47 02    MOV   AX, WORD PTR DS:
0043E084   .03FD          ADD   EDI, EBP
0043E086   .66:85C0       TEST    AX, AX
0043E089   .^ 75 F5         JNZ   SHORT DFX.0043E080
0043E08B   .B9 0C000000   MOV   ECX, 0C
0043E090   .BE 642A4E00   MOV   ESI, DFX.004E2A64                ;Registration Unverified   // 这里是未注册
0043E095   .EB 15         JMP   SHORT DFX.0043E0AC
0043E097   >66:8B47 02    MOV   AX, WORD PTR DS:
0043E09B   .03FD          ADD   EDI, EBP
0043E09D   .66:85C0       TEST    AX, AX
0043E0A0   .^ 75 F5         JNZ   SHORT DFX.0043E097
0043E0A2   .B9 0D000000   MOV   ECX, 0D
0043E0A7   .BE 302A4E00   MOV   ESI, DFX.004E2A30                ;Unregistered (Trial Mode)// 未注册
0043E0AC   >F3:A5         REP   MOVSD
0043E0AE   >39AB F4C40100 CMP   DWORD PTR DS:, EBP
0043E0B4   .8DAB 28180000 LEA   EBP, DWORD PTR DS:

我们观察到:
0043E017   .8B83 A4C40100 MOV   EAX, DWORD PTR DS:
0043E01D   .3BC5          CMP   EAX, EBP
0043E01F   .75 53         JNZ   SHORT DFX.0043E074

只要这里不跳转,就不会走到未注册流程,而是现实注册。

所以猜测这里是是否注册的全局变量保存值。

我们右键查找地址常量,观察一下该数据在哪里赋值的:



只有一处赋值:


我们双击到代码:

0040879F|.FFD2          CALL    NEAR EDX                         ;ntdll.KiFastSystemCallRet
004087A1|>83BB 00C50100>CMP   DWORD PTR DS:, 0
004087A8|.74 2B         JE      SHORT DFX.004087D5
004087AA|.83BB E0C40100>CMP   DWORD PTR DS:, 0A
004087B1|.75 22         JNZ   SHORT DFX.004087D5
004087B3|.C783 A4C40100>MOV   DWORD PTR DS:, 2
004087BD|>33C0          XOR   EAX, EAX
004087BF|.5B            POP   EBX                              ;kernel32.7C816037


// 猜测这里应该是对全局变量赋值为 2 代表注册:
MOV   DWORD PTR DS:, 2

所以将上方两处挑战NOP掉



选中修改,右键另存为,将修改文件保存:




运行选中文件,查看程序关于,显示已注册,3D环绕功能已经可以使用。





至此,程序已成功暴破。

qinccckencn 发表于 2014-6-16 00:05:57

学习一下N大的思路,谢谢

l0v3cr4ck 发表于 2014-6-16 02:12:03

感谢老师分享,学习了。

small-q 发表于 2014-6-16 08:00:52

学习~~~~~~~~~

cfc1680 发表于 2014-6-16 08:17:31

学习了,支持N大,赞一个

mod5689 发表于 2014-6-25 22:29:42

是不是程序都会有全局变量?

pyingyue 发表于 2014-6-29 05:56:09

学习了 支持一下

GeekCat 发表于 2014-6-29 09:37:23

学习N大的思路

montana 发表于 2014-7-11 17:34:28

向N大学习了。

阳光宅男 发表于 2014-7-11 22:26:04

学习一下了,感谢N大
页: [1] 2
查看完整版本: DFX 验证分析