题外话:以前每逢寒暑假,都能有时间找来几个软件练练手,但这个假期不行,参编的一本书的几万字还没动笔,也就没时间破解了。还有,现在我只是对注册的计算过程感兴趣,而对暴破兴趣不大,但这需要更多的时间去分析,无疑增加了难度,而且现在很多软件越来越破了,也没有那么大的精力去做,只好将放假前做的这个破解整理一下发表在这。
下载地址: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给我的,可以找他联系
- 标 题: 标 题:DirectMediaXtra.x32 V2.01 注册码的计算 (13千字)
- 作 者: robot
- 时 间:
2001-8-3 23:37:29
- 链 接:http://bbs.pediy.com