標 題:DirectMediaXtra.x32 V2.01 註冊碼的計算 (13千字)
題外話:以前每逢寒暑假,都能有時間找來幾個軟體練練手,但這個假期不行,參編的一本書的幾萬字還沒動筆,也就沒時間破解了。還有,現在我只是對註冊的計算過程感興趣,而對暴破興趣不大,但這需要更多的時間去分析,無疑增加了難度,而且現在很多軟體越來越破了,也沒有那麼大的精力去做,只好將放假前做的這個破解整理一下發表在這。
下載地址:http://media2.533.net/source/DirectMediaXtra201_FullDownload.exe
軟體簡介:一個Authorware多媒體XTRA外掛,安裝後可以很方便地插入MIDI、影片、FLASH等多媒體檔案,並能很方便地對它們進行控制。
破解工具:IDA Pro 4.15,SoftICE 4.05 for Win9X
破解過程:首先,將DirectMediaXtra安裝到Authorware的xtras資料夾下,這是安裝程式會在xtras下面DirectMediaXtra.x32,這個就是外部多媒體外掛。安裝好後,執行Authorware
5.2,選擇Insert->Tabuleiro Xtras->DirectMediaXtra,出現DirectMediaXtra Properties後,會顯示Unregisted,單擊register後,隨便輸入使用者名稱和序列號,啟用SoftICE,下bpx
hmemcpy(當然,還有更好的斷點可下,好像是getwindowtexta,時間長了,記不清了),按F12、F10直到來到下面
.text:100086A0 arg_0 = dword ptr 4
====> 註冊碼
.text:100086A0 arg_4 = dword ptr 8
====> 使用者名稱
.text:100086A0
.text:100086A0 sub
esp, 18h
.text:100086A3 mov
eax, dword_1003AA90
.text:100086A8 push
ebx
.text:100086A9 push
ebp
.text:100086AA mov
ebp, [esp+20h+arg_0]
.text:100086AE push
esi
.text:100086AF push
edi
.text:100086B0 mov
[esp+28h+var_C], eax
.text:100086B4 mov
edi, ebp
.text:100086B6 or
ecx, 0FFFFFFFFh
.text:100086B9 xor
eax, eax
.text:100086BB repne
scasb
.text:100086BD not
ecx
.text:100086BF dec
ecx
.text:100086C0 cmp
ecx, 14h
====> 註冊碼是否20位
.text:100086C3 jnz
loc_100088D6 ====> 不是則錯
.text:100086C9 mov
cl, [ebp+3] ====> 第4位註冊碼
.text:100086CC mov
dl, [ebp+4] ====> 第5位註冊碼
.text:100086CF mov
[esp+28h+var_16], al
.text:100086D3 lea
eax, [esp+28h+var_18]
.text:100086D7 push
eax
.text:100086D8 mov
[esp+2Ch+var_18], cl
.text:100086DC mov
[esp+2Ch+var_17], dl
.text:100086E0 call
_atoi
====> 將第4、5位註冊碼轉為數字
.text:100086E5 add
esp, 4
.text:100086E8 cmp
eax, 14h
====> 是否是"20"
.text:100086EB jnz
loc_100088D6 ====> 不是則錯
.text:100086F1 mov
al, [ebp+2] \
.text:100086F4 mov
cl, [ebp+0] > ====> 取註冊碼的前3位
.text:100086F7 mov
dl, [ebp+1] /
.text:100086FA mov
byte ptr [esp+28h+arg_0+2], al
.text:100086FE mov
byte ptr [esp+28h+arg_0], cl
.text:10008702 mov
byte ptr [esp+28h+arg_0+1], dl
.text:10008706 mov
byte ptr [esp+28h+arg_0+3], 0
.text:1000870B lea
esi, [esp+28h+var_C] ====> esi指向"DMX"
.text:1000870F lea
eax, [esp+28h+arg_0] ====> 指向註冊碼的前3位
.text:10008713 mov
dl, [eax] \
.text:10008715 mov
bl, [esi] |
.text:10008717 mov
cl, dl
|
.text:10008719 cmp
dl, bl
|
.text:1000871B jnz
short loc_1000873B |
.text:1000871D test
cl, cl
|
.text:1000871F jz
short loc_10008737 |
.text:10008721 mov
dl, [eax+1] |
.text:10008724 mov
bl, [esi+1] |
.text:10008727 mov
cl, dl
\
.text:10008729 cmp
dl, bl
/====> 比較註冊碼的前3位是否是"DMX"
.text:1000872B jnz
short loc_1000873B |
.text:1000872D add
eax, 2
|
.text:10008730 add
esi, 2
|
.text:10008733 test
cl, cl
|
.text:10008735 jnz
short loc_10008713 |
.text:10008737 xor
eax, eax |
.text:10008739 jmp
short loc_10008740 |
.text:1000873B sbb
eax, eax |
.text:1000873D sbb
eax, 0FFFFFFFFh |
.text:10008740 test
eax, eax |
.text:10008742 jnz
loc_100088D6 /
.text:10008748 mov
al, [ebp+7] ====> Regcode(8)
.text:1000874B lea
ecx, [esp+28h+arg_0]
.text:1000874F push
ecx
.text:10008750 mov
byte ptr [esp+2Ch+arg_0], al
.text:10008754 call
_atoi
====> 轉為數字
.text:10008759 mov
dl, [ebp+0Bh] ====> Regcode(12)
.text:1000875C mov
edi, eax
====> edi=Regcode(8)
.text:1000875E lea
eax, [esp+2Ch+arg_0]
.text:10008762 mov
byte ptr [esp+2Ch+arg_0], dl
.text:10008766 push
eax
.text:10008767 call
_atoi
====> 轉為數字
.text:1000876C mov
cl, [ebp+11h] ====> Regcode(18)
.text:1000876F lea
edx, [esp+30h+arg_0]
.text:10008773 push
edx
.text:10008774 mov
ebx, eax
====> ebx=Regcode(12)
.text:10008776 mov
byte ptr [esp+34h+arg_0], cl
.text:1000877A call
_atoi
.text:1000877F mov
[esp+34h+var_8], eax ====> Regcode(18)放到這裡
.text:10008783 mov
al, [ebp+0Ch] ====> Regcode(13)
.text:10008786 lea
ecx, [esp+34h+arg_0]
.text:1000878A mov
byte ptr [esp+34h+arg_0], al
.text:1000878E push
ecx
.text:1000878F call
_atoi
.text:10008794 mov
dl, [ebp+10h] ====> Regcode(17)
.text:10008797 mov
esi, eax
====> esi=Regcode(13)
.text:10008799 lea
eax, [esp+38h+arg_0]
.text:1000879D mov
byte ptr [esp+38h+arg_0], dl
.text:100087A1 push
eax
.text:100087A2 call
_atoi
.text:100087A7 mov
cl, [ebp+8] ====> Regcode(9)
.text:100087AA lea
edx, [esp+3Ch+arg_0]
.text:100087AE push
edx
.text:100087AF mov
[esp+40h+var_4], eax ====> Regcode(17)放到這裡
.text:100087B3 mov
byte ptr [esp+40h+arg_0], cl
.text:100087B7 call
_atoi
.text:100087BC mov
ecx, [esp+40h+var_8] ====> Regcode(18)
.text:100087C0 mov
edx, [esp+40h+var_4] ====> Regcode(17)
.text:100087C4 add
eax, ecx
====> Regcode(9)+Regcode(18)
.text:100087C6 lea
ecx, [esi+esi*2] ====> Regcode(13)*3
.text:100087C9 mov
[esp+40h+var_11], 0
.text:100087CE mov
[esp+40h+var_D], 0
.text:100087D3 lea
eax, [eax+edx*4] ====> Regcode(17)*4+Regcode(9)+Regcode(18)
.text:100087D6 add
ecx, eax
====> Regcode(13)*3+Regcode(17)*4+Regcode(9)+Regcode(18)
.text:100087D8 movsx
eax, byte ptr [esp+40h+var_C+2] ====> eax="X"
.text:100087DD add
ecx, ebx
====> Regcode(13)*3+Regcode(17)*4+Regcode(9)+Regcode(18)+Regcode(12)
.text:100087DF lea
esi, [ecx+edi+0Eh] ====> Regcode(8)+Regcode(13)*3+Regcode(17)*4+Regcode(9)+Regcode(18)+Regcode(12)+0Eh
.text:100087E3 mov
ecx, [esp+40h+var_C] ====> ecx="DM"
.text:100087E7 movsx
edx, ch ====>
edx="M"
.text:100087EA movsx
ecx, cl ====>
ecx="D"
.text:100087ED add
eax, edx
.text:100087EF add
eax, ecx
====> eax="D"+"M"+"X"=E9h
.text:100087F1 mov
ecx, 3E8h ====>
ecx=3E8h=1000
.text:100087F6 lea
eax, [eax+eax*4] ====> eax*5=48Dh
.text:100087F9 shl
eax, 2
====> eax*4=1234h
.text:100087FC cdq
.text:100087FD idiv
esi
====> 整除
.text:100087FF add
eax, 73h
====> 商+73h
.text:10008802 cdq
.text:10008803 idiv
ecx
====> 除以1000,取餘數
.text:10008805 mov
al, [ebp+0Dh] ====> Regcode(14)
.text:10008808 mov
cl, [ebp+12h] ====> Regcode(19)
.text:1000880B mov
[esp+40h+var_13], al
.text:1000880F mov
al, [ebp+9] ====> Regcode(10)
.text:10008812 mov
[esp+40h+var_12], cl
.text:10008816 mov
cl, [ebp+0Eh] ====> Regcode(15)
.text:10008819 mov
[esp+40h+var_F], al
.text:1000881D mov
[esp+40h+var_E], cl
.text:10008821 mov
esi, edx
====> esi=餘數
.text:10008823 mov
dl, [ebp+6] ====> Regcode(7)
.text:10008826 mov
[esp+40h+var_14], dl
.text:1000882A mov
dl, [ebp+13h] ====> Regcode(20)
.text:1000882D mov
[esp+40h+var_10], dl
.text:10008831 lea
edx, [esp+40h+var_14] ====> 位置順序:R(7)R(14)R(19)
.text:10008835 push
edx
.text:10008836 call
_atoi
====> 轉為整數
.text:1000883B mov
edi, eax
====> 放到edi中
.text:1000883D lea
eax, [esp+44h+var_10] ====> 位置順序:R(20)R(10)R(15)
.text:10008841 push
eax
.text:10008842 call
_atoi
====> 轉為整數
.text:10008847 add
esp, 20h
.text:1000884A mov
ecx, eax
====> 放到ecx中
.text:1000884C cmp
edi, esi
====> 與餘數比較
.text:1000884E jnz
loc_100088D6 ====> 不等則錯誤
.text:10008854 mov
eax, 55555556h
.text:10008859 imul
esi
====> 乘以餘數
.text:1000885B mov
eax, edx
====> 取高位數放到eax中
.text:1000885D mov
esi, 3E8h
.text:10008862 shr
eax, 1Fh
====> 右移1F位,即除以2^31
.text:10008865 lea
eax, [edx+eax+159h] ====> +345(159h)
.text:1000886C cdq
.text:1000886D idiv
esi
====> 除以1000
.text:1000886F cmp
ecx, edx
====> 進行比較
.text:10008871 jnz
short loc_100088D6 ====> 不等則錯誤
.text:10008873 mov
edx, [esp+28h+arg_4] ====> 使用者名稱
.text:10008877 or
ecx, 0FFFFFFFFh
.text:1000887A mov
edi, edx
.text:1000887C xor
eax, eax
.text:1000887E repne
scasb
.text:10008880 not
ecx
.text:10008882 dec
ecx
.text:10008883 test
ecx, ecx
====> 使用者名稱是否為空
.text:10008885 jle
short loc_100088D6 ====> 為空則錯誤
:
:
:
.text:100088C2 mov
eax, 1
====> 成功的旗標eax=1
.text:100088C7 and
ecx, 3
.text:100088CA repe movsb
.text:100088CC pop
edi
.text:100088CD pop
esi
.text:100088CE pop
ebp
.text:100088CF pop
ebx
.text:100088D0 add
esp, 18h
.text:100088D3 retn
8
.text:100088D6 pop
edi
.text:100088D7 pop
esi
.text:100088D8 pop
ebp
.text:100088D9 xor
eax, eax
====> 失敗的旗標eax=0
.text:100088DB pop
ebx
.text:100088DC add
esp, 18h
.text:100088DF retn
8
.text:100088DF sub_100086A0 endp
註冊碼的計算過程:前5個字元必須為"DMX20"
設X=Regcode(8)+Regcode(13)*3+Regcode(17)*4+Regcode(9)+Regcode(18)+Regcode(12)+14
Y=(hex("D")+hex("M")+hex("X"))*20
Z=((Y \ X)+115) mod 1000
Z=Regcode(7,14,19)
(Z*55555556h的高位+345) mod 1000=Regcode(20,10,15)
根據上面的計算過程,隨機生成第8、9、12、13、17、18和6、11、16位的註冊碼後,再推算出第7、10、14、15、19、20位的註冊碼即可,序號產生器已做成。
註冊成功後,會在DirectMediaXtra.x32所在的資料夾下生成一個名為dmx2.lic的隱藏註冊檔案,裡面就是註冊名和註冊碼,可以用文字編輯器開啟,以後只要把這個註冊檔案複製到相應資料夾即可。
附記:該公司的另一個外掛,WebXtra 3.0的註冊過程跟DirectMediaXtra.x32完全一樣,只是稍有不同,有興趣的可以試一試,至於下載url,我沒有,是CrackerABC
email給我的,可以找他聯絡
相關文章
- FolderView註冊部分的計算 (13千字)2001-05-27View
- FINAL DATA註冊碼計算 (2千字)2000-07-24
- vfp&exe1.70註冊碼計算 (2千字)2001-06-04
- IP搜尋客 1.61 註冊碼計算 (2千字)2000-05-16
- getPassword2.3註冊碼計算分析過程 (3千字)2001-11-07
- JProfiler 13 Mac版,JProfiler 13註冊碼2023-04-20Mac
- 如何計算 批量檔案設定器 2.05 的註冊碼 (6千字)2000-04-24
- SuperCleaner 2.31註冊碼演算法分析 - OCG (13千字)2002-04-02演算法
- 如何計算 “IQ網際搜尋家99” 註冊碼 (4千字)2000-05-15
- Folder Browser Control v1.0.10註冊碼的計算 (15千字)2001-06-02
- 《奧數2000》註冊碼的計算(VB5程式)
(6千字)2015-11-15
- Add/Remove 4Good v2.01 註冊演算法分析 (18千字)2015-11-15REMGo演算法
- Flash ActionScript Tool 的註冊碼! (22千字)2001-05-04
- 《TxEdit 4.6》的註冊碼破解 (11千字)2001-07-28
- 開心鬥地主1.6標準版 註冊碼破解 (4千字)2001-04-25
- 請教關於DremEdit2.28如何算註冊碼? (3千字)2000-07-13REM
- 社群遊戲伴侶
V1.0註冊碼的計算,序號產生器 (30千字)2003-05-09遊戲
- 註冊時間差計算2017-06-13
- 註冊碼演算法 (2千字)2001-01-14演算法
- 計算占星軟體Numerology Star Reader (version
15.0)註冊碼 (4千字)2000-10-02
- Nktools(手機工具箱)註冊碼計算處,請高手指點~~~~ (15千字)2001-03-06
- PCPro(PigChamp Pro) v3.0.23註冊碼的計算(VB程式,非常簡單) (3千字)2001-10-08GC
- 一種非明碼比較程式的註冊------NS-SHAFT註冊碼破解 (9千字)2015-11-15
- Regediter 1.3 破解(得到註冊碼) (9千字)2002-01-23
- 財智證券結算軟體2.5 破解註冊碼分析!使用ollydbg 破解註冊動畫!高手莫入! (1千字)2001-11-20動畫
- estiprojm 註冊 (12千字)2001-11-08
- CPUCOOL 5.1000註冊碼分析 (6千字)2001-01-19
- IconToy 3.1 註冊碼快速破解 (11千字)2001-03-02
- BabyGame 破解方法及註冊碼錶 (1千字)2001-07-04GAM
- winimp1.11註冊碼破解 (2千字)2000-07-16
- SMailserver2.5註冊碼的破解手記 (1千字)2001-03-01AIServer
- 標
題:UltraISO7me註冊方法分析2004-04-25AI
- 公司寶商標註冊|你想擁有自己的商標嗎?商標註冊流程解析2021-10-14
- 《ICONSCAN 2.4》註冊碼破解 高手莫入! (3千字)2001-05-06
- 《MAGICWIN RELEASE 1.2》註冊碼破解 高手莫入! (2千字)2001-05-07
- Kugle Regediter 1.0 註冊碼破解法(非明碼) (8千字)2001-11-03
- Konvertor 3.03的註冊碼演算法模組的分析
(7千字)2015-11-15演算法
- 『凌雲郵神』 註冊碼破解 (非明碼比較的哦 ^_^) (6千字)2001-11-05