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环绕功能已经可以使用。
至此,程序已成功暴破。
学习一下N大的思路,谢谢 感谢老师分享,学习了。 学习~~~~~~~~~ 学习了,支持N大,赞一个 是不是程序都会有全局变量? 学习了 支持一下 学习N大的思路 向N大学习了。 学习一下了,感谢N大
页:
[1]
2