• 标 题:暴力破解3 (6千字)
  • 作 者:peterchen
  • 时 间:2001-2-18 20:26:15
  • 链 接:http://bbs.pediy.com

本人暴力破解3
有人问为什么3?明明是2才对啊!
第2本人已经成功了可惜不会用udeit32有代换改法一次就几十个?
搞到程序出错!现在有一种方法了就是,不说先等你看完先!
mulitword ver 3.0
可是这个是新版来的!
也就是kanjiweb!
用W32dsm89反后,以前都是从字符串入手!
现在介绍一种比较快的方法,就是W32dsm89的查找功能,输入
"SORRY !! ERROR SERIAL NO"一会就找到了!
本些也要说明些是从错误对话窗入手,而且字符串有时会找到一些"thank
you"之类的话也就是从注册完窗来开枪!这里本人也要多说几句了!
错误窗与完成窗有什么区别了?就有好像敌人与朋友你说有什么区别啊?
错误窗就要kill也就我们所说的跳过它,而且完成窗就是让它执行!
浪话少说来:

* Possible StringData Ref from Code Seg 001 ->"SORRY !! ERROR SERIAL NO"
                                  |
:0001.3A43 68E45E                push 5EE4
:0001.3A46 685D3A                push SEG ADDR of Segment 0001

* Possible StringData Ref from Code Seg 001 ->"ERROR !!"
                                  |
:0001.3A49 68DA5E                push 5EDA
:0001.3A4C 6A00                  push 0000
:0001.3A4E 9A04170000            call USER.MESSAGEBOX //->goodover讨厌的对话窗出来了?
第一步找出跳到些call,有时会问如何找了这样你就不要偷懒了要有纸和笔做记录!
记哪么些了?是偏移值,注意这里的偏移值是 0001.3a4e不是状态栏下的@offset!
而且还还要记些call跟着的东西?有时还要进去看一看?如果是带偏移值也要记住这个值为什么了?
激法些call有时不是直接,当你向上分析时有时出现je or jne之类后面是些call后面的值,通过复杂的运行
后也回到激活些call!也好像走路一样,可以走直路、弯曲山路或小径等多种走法但最终也是要到目的!

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.3937(C)
|
:0001.3A34 8B76F8                mov si, [bp-08]
:0001.3A37 EB34                  jmp 3A6D //->第一个跳过些些call
第二步是找出为什么来不到这里的原因?


:0001.3A39 90                    nop

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.39F6(C)
|
:0001.3A3A BE0100                mov si, 0001
:0001.3A3D FF760E                push word ptr [bp+0E]
:0001.3A40 68473A                push SEG ADDR of Segment 0001

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.39ED(C)
:0001.39F4 0BC0                  or ax, ax
:0001.39F6 7542                  jne 3A3A //->看到没有? 就是它了!我要寻根问底再向上分析!
:0001.39F8 C646FBFF              mov byte ptr [bp-05], FF
:0001.39FC 33F6                  xor si, si
:0001.39FE 56                    push si
:0001.39FF 66FF76FC              push word ptr [bp-04]
:0001.3A03 FF76F6                push word ptr [bp-0A]
:0001.3A06 9A1A071B3A            call 0001.071A
:0001.3A0B 83C408                add sp, 0008
:0001.3A0E 6A04                  push 0004
:0001.3A10 8D46EE                lea ax, [bp-12]
:0001.3A13 16                    push ss
:0001.3A14 50                    push ax
:0001.3A15 FF76F6                push word ptr [bp-0A]
:0001.3A18 9A66092D3A            call 0001.0966
:0001.3A1D 83C408                add sp, 0008
:0001.3A20 6A01                  push 0001
:0001.3A22 8D46FB                lea ax, [bp-05]
:0001.3A25 16                    push ss
:0001.3A26 50                    push ax
:0001.3A27 FF76F6                push word ptr [bp-0A]
:0001.3A2A 9A6609413A            call 0001.0966
:0001.3A2F 83C408                add sp, 0008
:0001.3A32 EB1F                  jmp 3A53 第二个跳过此call

:0001.39EB F3                    repz
:0001.39EC A6                    cmpsb
:0001.39ED 7405                  je 39F4 //->是这里?
:0001.39EF 1BC0                  sbb ax, ax
:0001.39F1 1DFFFF                sbb ax, FFFF

总结:je 39F4->jne 3A3A.....->call USER.MESSAGEBOX 完蛋!
      jmp 3A6D and jmp 3A53 to good bye call USER.MESSAGEBOX! Yeach!
所以我只要把jne 3a3a 不跳->jmp 3A53 跳过些call!
知道如何做了? 找3a3a,9090 如果你这样做不是改一个而是改了多个,很容易出错!
正确的是上面+3a3a也就是0BC0+3a3a(要改得)! seach 0BC0 3a3a->0BC0 9090现在只有个
                                                    ^^^^
了,你再找就找不到也就是你改对!当然可以@offset值的用hiew640reg来改!
我试了试乱输入注册,程序不见了?见鬼我把时间调到2002年!难道还有时间限制?
不管了调回2001正常,注册变成灰色也就是成攻了!时间调前或后都没有时间了!
我初次暴力如何错误,请大家指教!thanks! 请问一下 jne 3a3a 能改成
je 3a3a or jmp3a3a我个人看应该不行这样也是跳得啊?程序是拿来练习已经删除了,
由于资料与软件太多了不知道放在哪儿了?

我破解完在整理资料时找到coolfly破解
★目标软件: KanjiWEB3.0
时间限制: 大约一个月

1998年12月25日晚23:14分
KANJIWEB 是个不错的内码转换程序,但是有时间限制,需要注册。
首先打开 MultiWord.exe 程序,然后选择 register,
在注册框中输入任意字符,切换到 winice ,输入:
bpx getdlgitemtext ,按F5键回到程序,按下OK按键,程序被中断,
我们就从这儿一路P下去,最后到了
....
....
....

30f7:39c9    xor byte ptr [si],86
    :39cc    inc si    
    :39cd    lea ax,[bp+fe2f]
    :39d1    cmp si,ax
    :39d3    jb 39c9

程式到此循环九遍,程式在判断九位注册码,追到

30f7:3a4e call messagebox

此时出现注册失败的画面,因此我就从此开始逆查,往上一看,

xxxx:39eb repz cmpsb
    :39ed jz 39f4    '判断语句,如果相等则跳到29f4继续执行。
xxxx:xxxx .
          .
xxxx:39f4 or ax ax
xxxx:39f6 jnz 3a3a    '比较,如果不等则跳到3a3a处。

按F10键执行到3a3a处一看:

xxxx:3a3a mov si,0001
...
...
xxxx:3a4e call user!messagebox     '执行到此处就会出现上面的注册失败的画面。
....
xxxx:3a6d or si,si
xxxx:3a6f jnz 3a87    '跳到3a87,并结束注册

所以39f6 处的比较绝对有问题,假设相等就不会跳跃了,我们从39f6往下看:

....
....
xxxx:3a32 jmp 3a53
xxxx:3a34 mov si,[bp-08]
xxxx:3a37 jmp 3a6d

而跳到3a53处往下执行是:
....
....
xxxx:3a6f jnz 3a87
....
xxxx:3a74 call user!getparent    '处理注册
....
xxxx:3a82 call user!sendmessage    '发送注册信息。
....
xxxx:3a87 xxxx
....
xxxx:3a8c call user!enddialog    '注册结束信息

我想上面的关键语句行一看就会明白39ed和39f6语句有问题

方法,下code on 命令将修改下列机械码:

30f7:39f6 jnz 3a3a    -> nop nop (因为是两个字节,所以填两个nop)

退出后,注册成功,软件可以正常使用啦!

【结论】

查找:  MULTWORD.EXE (49,008 BYTE)
      <1> 0BC0 <7542> C646FBFF -> 0BC0 <9090> C646FBFF
                ^^^^                    ^^^^
破解完成,可以上床睡觉了。看看表,哇,很晚了吗?see you letter!

他是用softice来破解而我的是用w32am89!
这个软件的作者也太懒新版与旧版虽然汇编偏移不同,而汇编内容着不多是一样的!
最后结果是一样!softice和trw2000 破解暴力是就容易找准错误call如call USER.MESSAGEBOX如果
后面是一些偏移而且上下就不只一个call就比较麻烦?但分析汇编内容w32am89就比较好了!
所以他们各有千秋!如果你能把他们一起运用,会促进你的破解速度!很久没有打这样多字了,手都软了!