全國電話通 Ver1.09註冊演算法

看雪資料發表於2015-11-15

前幾天看見有全國電話通 1.07的貼子,其中說到記憶體中的註冊碼不一致,經過對全國電話通 Ver1.09的分析,得出了註冊演算法,也找到了註冊碼不一致的原因。

1、機器碼生成部分:

:00478D87 E8DC9CF8FF              call 00402A68
:00478D8C 52                      push edx
:00478D8D 50                      push eax
:00478D8E 8D45EC                  lea eaxdword ptr [ebp-14]
:00478D91 E802F4F8FF              call 00408198
:00478D96 8B45EC                  mov eaxdword ptr [ebp-14]              eax=ASCII 997
:00478D99 8D4DF4                  lea ecxdword ptr [ebp-0C]
:00478D9C 5A                      pop edx
:00478D9D E85E33FBFF              call 0042C100
:00478DA2 8B45F4                  mov eaxdword ptr [ebp-0C]                eax=ASCII 99
:00478DA5 E83EF4F8FF              call 004081E8                      eax=63(十六進位制的99)
:00478DAA 69C0D3020000            imul eax, 000002D3                    eax=eax*2D3=11799
:00478DB0 05F9030000              add eax, 000003F9                     eax=eax+3F9=11B92
:00478DB5 8D55F8                  lea edxdword ptr [ebp-08]
:00478DB8 E8EFF2F8FF              call 004080AC                              轉換成十進位制
:00478DBD 8B4DF8                  mov ecxdword ptr [ebp-08]      ecx=ASCII 72594機器碼
:00478DC0 8D45FC                  lea eaxdword ptr [ebp-04]

* Possible StringData Ref from Code Obj ->"您的機器碼:"

2、註冊碼生成部分

:004786C8 E89BA3F8FF              call 00402A68
:004786CD 52                      push edx
:004786CE 50                      push eax
:004786CF 8D85ECFDFFFF            lea eaxdword ptr [ebp+FFFFFDEC]
:004786D5 E8BEFAF8FF              call 00408198
:004786DA 8B85ECFDFFFF            mov eaxdword ptr [ebp+FFFFFDEC]               eax=ASCII 994
:004786E0 8D8DF4FDFFFF            lea ecxdword ptr [ebp+FFFFFDF4]
:004786E6 5A                      pop edx
:004786E7 E8143AFBFF              call 0042C100
:004786EC 8B85F4FDFFFF            mov eaxdword ptr [ebp+FFFFFDF4]                eax=ASCII 99
:004786F2 E8F1FAF8FF              call 004081E8  eax=63(十六進位制的99)
:004786F7 05F9030000              add eax, 000003F9         eax=eax+3F9=145C                   
:004786FC 69C0D3020000            imul eax, 000002D3                     eax=eax*2D3=C4FD4(806868)真註冊碼十六進位制

總結如下:
註冊演算法:
註冊碼(十六進位制)=((機器碼(轉成十六進位制)-3F9)/2D3+3F9)*2D3

註冊後,在軟體安裝目錄生成檔案user.ini,內容如下:
[user]
username=coldeye                    使用者名稱,可任意填寫,不參與校驗
usercode=806868                     註冊碼(和機器有關)

由於軟體中生成註冊碼的時候採用浮點運算,有誤差存在,在破解過程中,eax的初值就有所不同,儘管略去最後一位,但還是有可能影響到最後生成的註冊碼。

相關文章