首页
社区
课程
招聘
我的破解“处女航~~”
发表于: 2004-6-20 00:59 5014

我的破解“处女航~~”

2004-6-20 00:59
5014
看了论坛精华五的这一篇文章,就想跟跟较新版的五笔快打2.07,因为发现它不好对付~

参考文章:
标 题:1.6正式版本PJ方法 (6千字)
发信人:ircbox
时 间:2002-6-27
详细信息:

感谢DFCG的小白菜提供
出处:http://www.cn12.com

五笔快打1.6正式版本PJ方法
          =====================

软件名称:****1.6正式版
软件下载:
补丁下载:(正常运行可能要下补丁,我的机子可不要这个)
PJ工具:SOFTICE
特点:
  1、一机一码,每位注册码在输入时验证,前一位如不正确,将使下一位也不正确,全部输入共
五个窗口,每个窗口有不同的位置的验证!具体如下:
  2、对抗TRW,请不要使用TRW来跟踪!
  3、使用SOFTICE 要隐藏!

具体PJ方法:
=========
第一、在"帮助"->"关于"复制本机序列号
第二、在"帮助"->"注册"处粘贴本机序列号,我的序列号是:WBKD-CV35-36MH-J96W
第三、注册码PJ!
  
                  第一注册窗口-注册码PJ

  先设置断点:用soft(加载icedump.exe),设置bpx hmemcpy
在第一窗口处乱填第一位字母:H 立即被拦截,注意,请不要中断断点BD * ,否则也不能跟踪。

 按F12共12次来到
0167:00408E1E  FF7514              PUSH      DWORD PTR [EBP+14]
0167:00408E21  FF159CFB5800        CALL      [0058FB9C]
0167:00408E27  8A0D6CD25800        MOV      CL,[0058D26C]
按F10开始跟踪一直来到这里:
0167:00408E88  8D843510FFFFFF      LEA      EAX,[ESI+EBP-00F0]   
0167:00408E8F  50                  PUSH      EAX      //EAX 取序列号
0167:00408E90  8D45E0              LEA      EAX,[EBP-20]
0167:00408E93  50                  PUSH      EAX
0167:00408E94  FF1544F95800        CALL      [0058F944]
0167:00408E9A  53                  PUSH      EBX
0167:00408E9B  6870B35800          PUSH      0058B370
0167:00408EA0  E81E82FFFF          CALL      004010C3
0167:00408EA5  8D45C8              LEA      EAX,[EBP-38]
0167:00408EA8  50                  PUSH      EAX
0167:00408EA9  8D45E0              LEA      EAX,[EBP-20]
0167:00408EAC  50                  PUSH      EAX    //取第一部分的序列号    
0167:00408EAD  E88982FFFF          CALL      0040113B
0167:00408EB2  8D45C8              LEA      EAX,[EBP-38]
====
0167:00408F42  8D4512              LEA      EAX,[EBP+12]
0167:00408F45  50                  PUSH      EAX
0167:00408F46  FF1584FB5800        CALL      [0058FB84]  
0167:00408F4C  8A4435F8            MOV      AL,[ESI+EBP-08]  ////把假的注册码放入AL中!,
0167:00408F50  3A4512              CMP      AL,[EBP+12]   //[EBP+12]为真的注册码,真假比较
//第一注册窗口在比较验证,    即我的:h 与 K
//设置断点: bpx 00408F50
//按CTRL+D 返回,更改第一注册码为K,同时输入第二位注册码:K
//立即被拦截,此时,按F5,一次为验证第一位注册码,
//按F5,二次验证第二位,依此累推,真至本注册窗口输完!
//
// 我的第一窗口注册码是:KECQ

0167:00408F53  7527                JNZ      00408F7C    // 不相等就玩完!
0167:00408F55  8D4512              LEA      EAX,[EBP+12]
0167:00408F58  3BF3                CMP      ESI,EBX
0167:00408F5A  50                  PUSH      EAX
.....
0167:00408F83  E828770200          CALL      004306B0
0167:00408F88  83C40C              ADD      ESP,0C
0167:00408F8B  46                  INC      ESI  //完成后,ESI 加上1,作累加器
0167:00408F8C  3B750C              CMP      ESI,[EBP+0C]
0167:00408F8F  0F8CD7FEFFFF        JL        00408E6C   返上继续验证下一位↑
0167:00408F95  8B3584FB5800        MOV      ESI,[0058FB84]
0167:00408F9B  8D45F0              LEA      EAX,[EBP-10]
0167:00408F9E  50                  PUSH      EAX

          第二注册窗口-注册码PJ

第一步:方法如同第一窗口一样,
第二步:在00409174 处设置断点,
// 当输入第一位假的注册码后,按F5一次 D EBP+12 见真的注册码
// 当输入第二位假的注册码后,按F5二次 D EBP+12 见真的注册码
// 依此累推,真至本注册窗口输完!
// 我的注册码:****

0167:0040916A  FF1584FB5800        CALL      [0058FB84]

0167:00409170  8A4435F8            MOV      AL,[ESI+EBP-08] //把假的注册码放入AL中!
0167:00409174  3A4512              CMP      AL,[EBP+12]  // 真假比较![EBP+12]为真注册码!
0167:00409177  7527                JNZ      004091A0  //不相等就玩完!
0167:00409179  8D4512              LEA      EAX,[EBP+12]
0167:0040917C  3BF3                CMP      ESI,EBX
0167:0040917E  50                  PUSH      EAX
0167:0040917F  8D45F0              LEA      EAX,[EBP-10]
0167:00409182  C704B5383B5800010000MOV      DWORD PTR [ESI*4+00583B38],00000001
0167:0040918D  50                  PUSH      EAX
0167:0040918E  7508                JNZ      00409198
0167:00409190  FF1554F95800        CALL      [0058F954]
0167:00409196  EB17                JMP      004091AF
0167:00409198  FF1548F95800        CALL      [0058F948]
0167:0040919E  EB0F                JMP      004091AF
0167:004091A0  6A05                PUSH      05
0167:004091A2  8D45F0              LEA      EAX,[EBP-10]
0167:004091A5  53                  PUSH      EBX
0167:004091A6  50                  PUSH      EAX
0167:004091A7  E804750200          CALL      004306B0
0167:004091AC  83C40C              ADD      ESP,0C
0167:004091AF  46                  INC      ESI
0167:004091B0  3B750C              CMP      ESI,[EBP+0C]
0167:004091B3  0F8C9EFEFFFF        JL        00409057    返上比较下一位注册码
0167:004091B9  8B3584FB5800        MOV      ESI,[0058FB84]
===

          第三注册窗口-注册码PJ

第一步:方法如同第一窗口一样,
第二步:在00409375 处设置断点,
// 当输入第一位假的注册码后,按F5一次 D EBP+12 见真的注册码
// 当输入第二位假的注册码后,按F5二次 D EBP+12 见真的注册码
// 依此累推,真至本注册窗口输完!
// 我的注册码:****

==

          第四注册窗口-注册码PJ

第一步:方法如同第一窗口一样,
第二步:在00409705 处设置断点,
// 当输入第一位假的注册码后,按F5一次 D EBP+12 见真的注册码
// 当输入第二位假的注册码后,按F5二次 D EBP+12 见真的注册码
// 依此累推,真至本注册窗口输完!
// 我的注册码:****
===

          第五注册窗口-注册码PJ

第一步:方法如同第一窗口一样,
第二步:在00409AA9 处设置断点,
// 当输入第一位假的注册码后,按F5一次 D EBP+12 见真的注册码
// 当输入第二位假的注册码后,按F5二次 D EBP+12 见真的注册码
// 依此累推,真至本注册窗口输完!
// 我的注册码:****
=====

完成,我的序列号:WBKD-CV35-36MH-J96W
   我的注册码:KECQ-****-****-***-****

我的破解过程:
目标:破解五笔快打2.07
工具:用ptrw1.22(不喜欢softice,觉得还是国产的亲切),w32dasm
因为对抗ptrw,故没敢先打开它,首先打开五笔快打,出现注册对话框,填入合适的序列号我填的是WBKD-AA22-11AA-J44W
然后光标跳到注册码的第一框,打开ptrw1.22,下断bpx getdlgitemtexta,按一次F12回到wbkd.TEXT,向下一直跟到
一处明显的cmp,
* Reference To: USER32.CharUpperA, Ord:0034h
                                  |
:0040C06E FF1590CD5A00            Call dword ptr [005ACD90]
:0040C074 8A843D9CFEFFFF          mov al, byte ptr [ebp+edi-00000164]
:0040C07B 3A8510FEFFFF            cmp al, byte ptr [ebp+FFFFFE10]        (此处的比较为关键比较,al中为你输的值)
:0040C081 753B                    jne 0040C0BE                           (不相等就跳走)
:0040C083 C704BD9CE3590001000000  mov dword ptr [4*edi+0059E39C], 00000001
:0040C08E 85FF                    test edi, edi
:0040C090 7516                    jne 0040C0A8   (测试位数是否为0,不为0就跳走)

向下来到
* Reference To: KERNEL32.lstrlenA, Ord:039Eh
                                  |
:0040C0F8 FF1548CB5A00            Call dword ptr [005ACB48]
:0040C0FE 83F804                  cmp eax, 00000004       (比较第一框是否输够四位,够的话变灰,光标到下一个
:0040C101 0F85C7020000            jne 0040C3CE             (不是的话跳走,可继续输)

基本上小弟只能看懂这些了~!
同样的第二框重要比较在40c31e
      第三框重要比较在40d31e
      第四框重要比较在40cebc
      第五框重要比较在40c5f2

跟到最后,注册码整理出来是CCAK-9WZ5-L57I-W2MX-BWDL
迫不及待的填入对话框,按住注册按钮,几秒种后出现了注册成功的对话框。惊喜万分,可是
一点确定发现并没有成功的注册,然后又试了好几次,当出现注册成功对话框后,检查注册表项HKCU/SOFTWARE/五笔快打
/default/注册成功为2,HKUS/.DEFAULT/SOFTWARE/五笔快打/DEFAULT/注册成功为2,然后一点确定软件关闭,重新打开仍然没有注册
,检查两处注册表项为0,不好意思让各位白替我高兴了,不过我的第一次破解经历,可花费了2星期呀,怎么也解释不通,还请高手指点
没办法破了白忙活了半天!
试试暴力破戒吧,简称爆破,呵呵,终于让我尝到了胜利的喜悦!
分析:看了该软件有试用时间限制,过了15天就直接提示超出时限,通过反汇编,发现所有有用的提示信息被加密,没有用字串的形式,
而是在程序中一个字一个字读码,通过多次尝试,发现了本软件中经典的判断是否注册的方式,
:004025AC E8DAEBFFFF              call 0040118B
:004025B1 6A04                    push 00000004
:004025B3 68AC725A00              push 005A72AC
:004025B8 6814725A00              push 005A7214
:004025BD 68FC705A00              push 005A70FC
:004025C2 6801000080              push 80000001

* Reference To: WBKDFUN.GetRegValue, Ord:0012h
                                  |
:004025C7 E8949D0400              Call 0044C360                   (读取注册表中注册标志)
:004025CC A1AC725A00              mov eax, dword ptr [005A72AC]   (放到 EAX中)
:004025D1 83C41C                  add esp, 0000001C
:004025D4 85C0                    test eax, eax                    (判断标志是否为0           
:004025D6 C705A4725A0001000000    mov dword ptr [005A72A4], 00000001
:004025E0 753B                    jne 0040261D                        不为零跳转
:004025E2 6A04                    push 00000004
:004025E4 68AC725A00              push 005A72AC
:004025E9 6814725A00              push 005A7214
:004025EE 68FC705A00              push 005A70FC
:004025F3 6801000080              push 80000001

* Reference To: WBKDFUN.GetRegValue, Ord:0012h
                                  |
:004025F8 E8639D0400              Call 0044C360
:004025FD A1AC725A00              mov eax, dword ptr [005A72AC]
:00402602 83C414                  add esp, 00000014
:00402605 85C0                    test eax, eax
:00402607 753A                    jne 00402643
:00402609 6A00                    push 00000000

WBKD.dLL中有getregvalue的Function
总结本软件中所有注册标志比较地址:
4036D5(判断试用时间
4025e0(可取消最初的注册对话框
40262c
402643
404c9d 注册菜单是否显示
404cb7 enable 所有第二个菜单
408f5c
408ff6
409012(此处并非比较注册标志,修改此处才可使菜单可用,好难找呀
40e584 菜单中已注册
43f52a(此处并非比较注册标志,修改此处才可使菜单可用,好难找呀
.
.
.
.
还有一些菜单项的可用比较,基本都是上述读注册标志的,很好找,基
本用bpx messageboxa 都能断到,或 bpx getregvalue 不多说了,第一次写写的不知道清楚不!
多提意见,只是想和大家分享成功!~看表,!哇,XX小时又过去了~~,这就是我第一次破解的心情
不知大家是否有过此经历!

有高手帮忙
(1)解释上述注册码失败的原因么????(困惑不已)
(2)不知道w32dasm反汇编后,有很多代码跟着就到了ret10,往下不知道去哪了
( 3)   不知是不是该软件采用了段压缩,因为我看到有这样的段UPX1

[课程]Linux pwn 探索篇!

收藏
免费 4
支持
分享
最新回复 (4)
雪    币: 319
活跃值: (951)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
( 3) 不知是不是该软件采用了段压缩,因为我看到有这样的段UPX1

请问段压缩是啥意思?
2004-6-20 05:43
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
用peditor查看,发现有6 个段,后面几个段的名字是upx1
2004-6-21 22:45
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不太懂,是不是要学基础知识,在哪里才能学呢?
2004-6-21 22:50
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我也是初学者,本网站就有很多教程,看看就行了!
2004-6-21 22:58
0
游客
登录 | 注册 方可回帖
返回
//