这个软件是MID修改和编辑用的,不注册不能存盘,所以要破.用TRW2000,W32DSM,HIEW三种兵器.
点注册,在两个空行里填入自己的信箱和一组自编的密码,运行TRW2000,下断,最普通的HMEMCPY就可以了,GO之后,回到程序界面,点注册,被断,直接用BC
*,PMODULE,再次来到程序领空,一下子就到了,不用按F12,按一下就出错了.程序代码如下:
:0040435B 6804010000 push 00000104
按F10走.
:00404360 68C1EB4100 push 0041EBC1
* Possible Reference to Dialog: DialogID_03E7, CONTROL_ID:03FC, ""
|
:00404365 68FC030000 push 000003FC
:0040436A 53
push ebx
* Reference To: USER32.GetDlgItemTextA, Ord:0000h
|
:0040436B E8CA980100 Call 0041DC3A
来到下面这个CALL.
:00404370 E8DBF6FFFF call 00403A50
注意这个CALL,下面有比较,有跳转,说明有问题.按F8进入:
* Possible StringData Ref from Data Obj ->"镱溧痤?
|
:00403A55 B8CBF64100 mov eax,
0041F6CB
:00403A5A BAC1EB4100 mov edx,
0041EBC1
这里下D 0041EBC1可以看到自己刚才输入的注册码,那么上面的0041F6CB里的乱七八糟的东西就可能是真正的注册码了.但是我看不出来是什么.还请高手指点.往下走是比比跳跳.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403A79(C)
|
:00403A5F 8A08
mov cl, byte ptr [eax]
:00403A61 3A0A
cmp cl, byte ptr [edx]
:00403A63 7516
jne 00403A7B
程序在这里显示要跳,因为上面的比较肯定不相等.当然如果不跳就会注册成功的.所以在这里就可以下手了.不过改这里的话下面的JE也得改,不如让它走下去,直接跳到00403A7B处再改.
{:00403A65 84C9
test cl, cl
:00403A67 743C
je 00403AA5 (注意)
:00403A69 8A4801
mov cl, byte ptr [eax+01]
:00403A6C 3A4A01
cmp cl, byte ptr [edx+01]
:00403A6F 750A
jne 00403A7B
:00403A71 83C002
add eax, 00000002
:00403A74 83C202
add edx, 00000002
:00403A77 84C9
test cl, cl
:00403A79 75E4
jne 00403A5F}
以上是跳过的代码.下面来到了真正要改的地方:
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403A63(C), :00403A6F(C)
:00403A7B 7428
jne 00403AA5 (和上面的跳一样,只有在这里跳才能成功)
* Possible StringData Ref from Data Obj ->"镱溧痤?
|
:00403A7D B8D3F64100 mov eax,
0041F6D3
:00403A82 BABCEA4100 mov edx,
0041EABC
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403AA1(C)
|
:00403A87 8A08
mov cl, byte ptr [eax]
:00403A89 3A0A
cmp cl, byte ptr [edx]
:00403A8B 7524
jne 00403AB1
:00403A8D 84C9
test cl, cl
:00403A8F 7412
je 00403AA3
:00403A91 8A4801 mov
cl, byte ptr [eax+01]
:00403A94 3A4A01 cmp
cl, byte ptr [edx+01]
:00403A97 7518
jne 00403AB1
:00403A99 83C002 add
eax, 00000002
:00403A9C 83C202 add
edx, 00000002
:00403A9F 84C9
test cl, cl
:00403AA1 75E4
jne 00403A87
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403A8F(C)
|
:00403AA3 750C
jne 00403AB1
以上就是反复比比跳跳,总之不让你跳到正地方.那么究竟为什么非要跳到0403AA5这个地方呢?现在我们来看看这个地方有什么.
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
:00403A67(C), :00403A7B(C)
* Possible Reference to String Resource ID=00001: "AKoff Music Composer -
Version 2.0"
|
:00403AA5 C705C8EC410001000000 mov dword ptr [0041ECC8], 00000001
上面的代码现在把一个00000001放到了[0041ECC8]里.然后程序开始回去.
:00403AAF EB72
jmp 00403B23
.
.
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403AAF(U), :00403AE9(U), :00403B1A(U)
|
:00403B23 83C414 add
esp, 00000014
:00403B26 5F
pop edi
:00403B27 5E
pop esi
:00403B28 C3
ret
回去了,回到呼叫子程序的地方.
:00404370 E8DBF6FFFF call 00403A50
(刚才就是从这个CALL里出来的.)
:00404375 833DC8EC410000 cmp dword ptr [0041ECC8],
00000000
现在我们再来注意这上面的一行,刚才在子程序里,经过运算比较后,得到了一个[0041ECC8],现在又来比较这个[0041ECC8],刚才这个地址里是00000001,现在要拿00000000来和它比,然后下面一行说得很清楚,如果等于就跳走,走到哪儿呢?走到004043CE.
:0040437C 7450
je 004043CE
这个004043CE是个什么东西呢?经过反汇编我们会看到,那是一个ERROR,紧接着就是那个出错对话框里的话
"Not valid Code or E-mail." 如下所示:
:004043CE 6A30
push 00000030
* Possible StringData Ref from Data Obj ->"Error"
|
:004043D0 6890F84100 push 0041F890
* Possible StringData Ref from Data Obj ->"Not valid Code or E-mail."
肯定是不能让他跳过来的啦!这里不跳就说明成功了,下面的代码一行行走向了" - Registered".
:004043D5 6876F84100 push 0041F876
:004043DA 53
push ebx
:0040437E 33C0
xor eax, eax
:00404380 83C9FF or
ecx, FFFFFFFF
:00404383 BF81E14100 mov edi,
0041E181
:00404388 8DB5F0FEFFFF lea esi, dword
ptr [ebp+FFFFFEF0]
:0040438E F2
repnz
:0040438F AE
scasb
:00404390 F7D1
not ecx
:00404392 2BF9
sub edi, ecx
:00404394 8BD1
mov edx, ecx
:00404396 87F7
xchg edi, esi
:00404398 C1E902 shr
ecx, 02
:0040439B 8BC7
mov eax, edi
:0040439D F3
repz
:0040439E A5
movsd
:0040439F 8BCA
mov ecx, edx
:004043A1 8D85F0FEFFFF lea eax, dword
ptr [ebp+FFFFFEF0]
:004043A7 83E103 and
ecx, 00000003
:004043AA F3
repz
:004043AB A4
movsb
* Possible StringData Ref from Data Obj ->" - Registered"
下略.
也不知道你看懂了没有,反正我的思路比较业余一些,只是从那个出错的对话框,找到了那几个跳转,现在要改的是子程序里面的那个JNE,就是:00403A7B 7428
jne 00403AA5,因为改了它,判断密码正确与否的子程序就不起作用了,而是直接把这个版本认为是经过注册的正式版.好了,现在动手:
用HIEW把COMPOSER打开,F4切换,F5输入它的偏移地址0000307B,F3修改,把74改为75,F9存盘.退出,好了现在再启动COMPOSER,直接就是"Registered"了.把你的MID载入,可以任意修改各种音色,成为自己的MID,存盘.真爽!
- 标 题:MIDI软件COMPOSER2.0暴破
- 作 者:chummer
- 时 间:2002/01/14 10:05pm
- 链 接:http://bbs.pediy.com