• 标 题:破解flax 1.31的校验及功能限制 (3千字)
  • 作 者:玉川
  • 时 间:2001-10-25 8:26:20
  • 链 接:http://bbs.pediy.com

破解flax 1.31的校验及功能限制

这个软件的注册机听说老外已搞出来了,我搞它的CRC,便于汉化,也是为了自己学习。
这东东费了俺好多时间,写的很粗略,错误在所难免,很不好意思,还望谅解和及时指教。具体改法,自己看着办。

这软件的保护很好,我的体会:
1:将不大的模块分成许多小模块,运用指针数组,不断调用,在大量循环中使用大量跳转,叫跟踪的摸不着北。
2:动态解密生成flax002.exe模块,校验flax.exe,校验后即刻删除。(够狡猾的)
3:有自写功能,修改它的代码还不用winhex.动态改后,退出时还可保存在原文件。

第一。破注册
下中断:bpm 4d3240.从程序启动开始,只要这个地址的值不为零,程序即被破解。实际上,这地址是注册码的指针。如果你的注册正确,便会在flax.ini中生成一个"key="的键,[4d3240]便是从key中取出注册码。当然,注册不正确,就不会生成这个键。要使[4d3240]为非零,有五处地方需要修改,你看着办吧。
第二。破CRC校验。
我发现只有两处关键的校验。(可能还有其他,但我改的倒满好的运行)
1。下中断bpx 41ff75.启动程序,当第三次中断时,下d 43713c.仔细看看,后面的六组字数据外加[43715c]的字数据即为CRC校验码。正确的校验码应该是9742 2614 E0D6 7261 5D85
0512 ,[43715c]中的应该是b260.你的程序修改后,这些校验码如有改变,把它改回来。
2。flax动态生成flax002.exe,flax002.exe是动态校验flax.exe的。flax002.exe在c:\window\temp\flax\下,校验后即被删除。下中断在411d34后,便可在该目录下发现。
下中断,bpx 40106b,这时程序会中断在flax002.exe中,见下面:
:0040105D E8D7000000              call 00401139
:00401062 83C408                  add esp, 00000008
:00401065 8B0D50904000            mov ecx, dword ptr [00409050]
:0040106B 33C8                    xor ecx, eax    《---中断在此,
:0040106D 890D50904000            mov dword ptr [00409050], ecx    《---ecx中的数即为校验码。正确的应该是00465820.
:00401073 8B55FC                  mov edx, dword ptr [ebp-04]
:00401076 52                      push edx
:00401077 E875050000              call 004015F1
:0040107C 83C404                  add esp, 00000004
:0040107F 6800010000              push 00000100
:00401084 8D85E8FEFFFF            lea eax, dword ptr [ebp+FFFFFEE8]

如何修改呢?
flax002.exe的代码是在00403378 call 00402821中通过解密生成的,进入该call:
:0040287F 8B45F4                  mov eax, dword ptr [ebp-0C]
:00402882 3B0570664300            cmp eax, dword ptr [00436670]
:00402888 0F83FC000000            jnb 0040298A          《---循环a000次,每次生成一字节的代码。
:0040288E E8FC000000              call 0040298F          《---生成flax002.exe的代码
:00402893 668945F8                mov word ptr [ebp-08], ax
:00402897 0FBF4DF8                movsx ecx, word ptr [ebp-08]
:0040289B 81F900010000            cmp ecx, 00000100
:004028A1 7D40                    jge 004028E3
:004028A3 668B55F8                mov dx, word ptr [ebp-08]
:004028A7 52                      push edx
:004028A8 E867060000              call 00402F14          《---存入内存。
:004028AD 83C404                  add esp, 00000004
:004028B0 0FBF45FC                movsx eax, word ptr [ebp-04]
:004028B4 8A4DF8                  mov cl, byte ptr [ebp-08]
:004028B7 888830564300            mov byte ptr [eax+00435630], cl
:004028BD 668B55FC                mov dx, word ptr [ebp-04]
:004028C1 6683C201                add dx, 0001

改动flax002.exe中的代码,最好是在生成它时便作改动。找到要改动代码在flax002.exe中的offset,对照00402882处eax的值,作相应改动。生成的代码在00566ee0开始的内存中。趁还未生成flax002.exe之前,修改00566ee0中的内存数据。