- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
应某人之约,特做此图文教程。
DFX 是一款PC的音效增强软件,未注册版无法使用3D音效环绕(3D Surround),点关于也显示未注册(Unregistered(Trial Mode))。
程序没有注册的窗口,早期版本注册文件保存在注册表中,8.X 之后的注册文件保存在KeyFile。我们不看算法,简单的看下注册流程。
OD 搜索未注册字符串:
双击未注册,来到代码:
- 0043E017 . 8B83 A4C40100 MOV EAX, DWORD PTR DS:[EBX+1C4A4]
- 0043E01D . 3BC5 CMP EAX, EBP
- 0043E01F . 75 53 JNZ SHORT DFX.0043E074
- 0043E021 . 8D4424 18 LEA EAX, DWORD PTR SS:[ESP+18]
- 0043E025 . 83C0 FE ADD EAX, -2
- 0043E028 . EB 06 JMP SHORT DFX.0043E030
- 0043E02A 8D9B 00000000 LEA EBX, DWORD PTR DS:[EBX]
- 0043E030 > 66:8B48 02 MOV CX, WORD PTR DS:[EAX+2]
- 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:[4E2A94] ; Registered // 这里是注册版 ...
- 0043E041 . 8B0D 982A4E00 MOV ECX, DWORD PTR DS:[4E2A98] ; gistered
- 0043E047 . 8910 MOV DWORD PTR DS:[EAX], EDX ; ntdll.KiFastSystemCallRet
- 0043E049 . 8B15 9C2A4E00 MOV EDX, DWORD PTR DS:[4E2A9C] ; stered
- 0043E04F . 8948 04 MOV DWORD PTR DS:[EAX+4], ECX
- 0043E052 . 8B0D A02A4E00 MOV ECX, DWORD PTR DS:[4E2AA0] ; ered
- 0043E058 . 8950 08 MOV DWORD PTR DS:[EAX+8], EDX ; ntdll.KiFastSystemCallRet
- 0043E05B . 8B15 A42A4E00 MOV EDX, DWORD PTR DS:[4E2AA4] ; ed
- 0043E061 . 8948 0C MOV DWORD PTR DS:[EAX+C], ECX
- 0043E064 . 66:8B0D A82A4>MOV CX, WORD PTR DS:[4E2AA8]
- 0043E06B . 8950 10 MOV DWORD PTR DS:[EAX+10], EDX ; ntdll.KiFastSystemCallRet
- 0043E06E . 66:8948 14 MOV WORD PTR DS:[EAX+14], CX
- 0043E072 . EB 3A JMP SHORT DFX.0043E0AE
- 0043E074 > 8D7C24 18 LEA EDI, DWORD PTR SS:[ESP+18]
- 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:[EDI+2]
- 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:[EDI+2]
- 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:[EBX+1C4F4], EBP
- 0043E0B4 . 8DAB 28180000 LEA EBP, DWORD PTR DS:[EBX+1828]
复制代码
我们观察到:
0043E017 . 8B83 A4C40100 MOV EAX, DWORD PTR DS:[EBX+1C4A4]
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:[EBX+1C500], 0
- 004087A8 |. 74 2B JE SHORT DFX.004087D5
- 004087AA |. 83BB E0C40100>CMP DWORD PTR DS:[EBX+1C4E0], 0A
- 004087B1 |. 75 22 JNZ SHORT DFX.004087D5
- 004087B3 |. C783 A4C40100>MOV DWORD PTR DS:[EBX+1C4A4], 2
- 004087BD |> 33C0 XOR EAX, EAX
- 004087BF |. 5B POP EBX ; kernel32.7C816037
复制代码
// 猜测这里应该是对全局变量赋值为 2 代表注册:
MOV DWORD PTR DS:[EBX+1C4A4], 2
所以将上方两处挑战NOP掉
选中修改,右键另存为,将修改文件保存:
运行选中文件,查看程序关于,显示已注册,3D环绕功能已经可以使用。
至此,程序已成功暴破。
|
|