• 标 题:绝对菜鸟解狗教程——qdcrack作品之一(发表在我论坛的文章)写得非常好!初学者必看呀! (11千字)
  • 作 者:大老
  • 时 间:2002-7-9 21:14:0
  • 链 接:http://bbs.pediy.com

绝对菜鸟解狗教程——qdcrack作品之一
作者:qdcrack
转载:大老
我的解狗论坛:http://dalao2002.yeah.net
欢迎转载!转载请保留完整!
有些朋友在破解软件之前,言必称什么什么狗,似乎知道什么狗之后就有章可循,有法可依了,其实对于加密狗来讲,一般的说,对于狗得类型资料比较重要的是硬复制狗,和对狗壳的研究,因为那都是狗公司现成的作品,但是对于一帮朋友来言,似乎都是比较复杂的事情!要弄清楚,搞明白似乎可能性不是很大!至于在软件破解中,狗对端口的调用每种狗确实有些不同,似乎分别还挺明显,于是很多朋友热衷于对这类资料的搜集,以为搞清楚了调用实质,就能以不变应万变.其实殊不知加密狗厂商对于他们的程序,那时费了很大心血的,他们的加密重点也就是放在这个地方,吾不知以个人之力量对付别人专业集团之力量是否真正能行!至少非常难!非常非常难!
如!深思III的种子调用很隐蔽,GS-**狗令人眼花缭乱的花指令等等!我觉得大家还是好好看看小牧童写的文章,明白一点:软件狗的加密,重点应该放在软件本身.我觉得大家应该好好体会一下,也许每个人对这句话的理解不同!但我想有个有个规律在里面:
1:如果您是新手或者初学破解又或者破过几个,但是破不出来的居多,我觉得您首先对软件调试和软件爆破进行加强功力.多看看资料,其实很多技术是从简单的破解软件序列号开始的,他们之间有什么本质不同哪??
2:如果您能破解大部分加密狗的软件,那么恭喜,我想现在最大的目标是简化您的修改代码!追入真正的读狗核心,让最简练的修改,获得最稳定的效果.
3:如果您是高手,那才是真正要分析总结一下各种狗的特点,去芜存精,写点东西!让后来的人了解,免得走写弯路,至于敝帚自珍,真的没什么意思!现在我发现!很多真正的高手写的东西却很少。菜鸟吧,到是愿意写一些文章,但是又怕别人笑话!


ok!我等是菜鸟,作我们菜鸟应该做的事情:破解,发表,然后写文章交流
目标:管家婆辉煌门板店8.2d
先安装SQL7.0(SQL2000也可以!安装软件,服务器端程序,再安装门板店程序)
OK!老习惯,用PEID检测一下程序是否加壳,虽然这些大型软件不喜欢加壳!但是幸运的很,测出来ASPACK2.11的壳
!我发现一个规律,管家婆的软件主要是辉煌版才加壳!别的都没有!可能是不同开发小组的作风不同!赫赫,但是看看他们内部程序的流程!又好象差不太多!
别说废话了!用ASPDIE2.1来脱壳!提示"看起来成功了!"呵呵!作者也把握不准自己的东西是否有100%脱壳能力!ASPDIE做得不错!就是针对版本性比较强,CASPR好像就厉害多了!可喜对最新的ASPACK支持的不够好!
试试看!脱壳成功否!程序运行,提示再打印机端口没发现软件狗,然后推出!看来脱的好、脱的妙、脱的结果呱呱叫!呵呵
现在也找到软件提示点了!用WDASM32反汇编吧!软件比较大,需要多等会!点支烟,放松一下!(你要是不会抽别学我)顺便翻翻看学精华,哈!竟然找到两篇介绍的文章,看他们说的好简单呀!不过版本都老点了,不知道现在的是否还合适?(破解软件之前开开别人的文章热热身!蛮好的!推荐大家试试看!)

反汇编完了!烟还没抽完,算了!等会再抽工作要紧!掐灭!
察看字符串,找到没狗的提示!双击,我在双击,噢!!提示的地方没有变化,说明只有一处!我喜欢!呵呵
看到出错的CALL上面有个比较,下面接着跳转!试试看!下断点
:005FBED6 A1FC936000              mov eax, dword ptr [006093FC]
:005FBEDB C700E8030000            mov dword ptr [eax], 000003E8
:005FBEE1 E854340000              call 005FF33A
:005FBEE6 85C0                    test eax, eax
:005FBEE8 743C                    je 005FBF26          **************
:005FBEEA 6A00                    push 00000000

* Possible StringData Ref from Code Obj ->"stop"
                                |
:005FBEEC 68C0C45F00              push 005FC4C0
:005FBEF1 8D45A4                  lea eax, dword ptr [ebp-5C]
:005FBEF4 50                      push eax

* Possible StringData Ref from Code Obj ->"myok"
                                |
:005FBEF5 B9D0C45F00              mov ecx, 005FC4D0

* Possible StringData Ref from Code Obj ->"系统在打印口没有找到软件狗,请再试!"
                                |
:005FBEFA BAE0C45F00              mov edx, 005FC4E0


下断点BPX 5FBEE8  运行程序 !!!什么什么???竟然正常运行了!我建套帐,我进入!我点、我点。。。。。竟然没有错误!!不会吧!!今天让我逮了个熟鸽子!比共享软件还共享!!哈哈!不好意思,这个不算,本来想给大家说点有经验的地方,没想到臭屁放了一个!哈哈!换一个吧!

千方百计POS前台
同上面的步骤,安装软件,检测壳!没发现,运行软件,还是提示没在打印口发现软件狗,不会又是一只熟鸽子吧?嘿嘿!

反汇编,这次比较大,需要耐心!我找,再找。啊!烟头烟头终于找到了!点上继续!呵呵!我发现了烟头的味道非常之不好!有股烟臭味,但是我省!为了我国早日步入现代化,我省!!
其实上面的程序也未必没有收获!我们不是高手!我们要学会先从简单的办法入手,查出错框,然后看看上面的跳转,能改掉最好了!不能改掉再研究!说不定某天你会发现你只用了几分钟就破解了一个狗加密的软件(虽然这种机会比较少),蛮有成就感吧?呵呵!上面的程序你还可以在研究!就是那个CALL,看看子程序里面到底是那一步导致EAX不等于零,找到关键的CALL和跳转!你可以修改子程序!如果这个子程序被多次调用,你就会避免不少暗桩,最好是一直追到读狗的子子程序CALL,呵呵!我有时候也没那个耐心和精力!

废话少说!反汇编完成!老规矩找出错字符串参考,双击、双击、双击、再双击、!KAO!有四处地方,3处提示上面有比较明显的跳转!有一处地方看不明白出处!算了!死马当活马医,把那三出现改掉,试着运行一下!嘿嘿!这次没那么幸运了!看来需要TRW出来运作一下!高手门都讲用BPX 378和BPX DEVICEIOCONTROL这些专业的断点来做!如果你比较精通!你可以去做!千万别看这篇文章了!这篇文章是给没有经验的朋友的来看的!
  运行TRW,点OK!什么断点也不用设,然后运行程序!出现提示出错的框!这时候用CTR+N来呼出你的TRW,还是什么都不用设!一直按F12,知道退出TRW来到程序!这时候就是等着你点确定了!点完后TRW迅速接管,落在:00454BF2处。不过刚中断的地方上面这些程序一般都是处理你点击“确定“以后要处理的进程!和出现错误提示的地方一般相距还比较远,如果你不放心!可以再454BED处按F9设断点!才次运行,看看是否能在出提示框之前中断!如果不能!说明你选的不对,需要再RET到上面的一个CALL里面,然后再上面的CALL内部设断点,当然这个断点尽量设的有经验点,别让人笑话!,一般是在一个跳转的上面,因为跳转对我们来说很重要,多试试看!不行的话再重来!谁让我们是菜鸟!不是高手,能够很快进入关键的CALL,然后找到关键的跳转!其实用BPX 378 和BPX DEVICEIOCONTROL也同样存在着咱们碰到的问题!就是在什么地方在此设断,这个地址非常重要,如果能很快找到!那你也是老鸟了!呵呵

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00454BF8(U)
|
:00454BEA 8B45FC                  mov eax, dword ptr [ebp-04]
:00454BED E87AFDFFFF              call 0045496C
:00454BF2 C3                      ret


废话少说!经过多次不停的测试!我们初步把范围缩小到!

:0045CEB8 53                      push ebx
:0045CEB9 6683783200              cmp word ptr [eax+32], 0000
:0045CEBE 740A                    je 0045CECA
:0045CEC0 8BD8                    mov ebx, eax
:0045CEC2 8BD0                    mov edx, eax
:0045CEC4 8B4334                  mov eax, dword ptr [ebx+34]
:0045CEC7 FF5330                  call [ebx+30]    *********

这个CALL非常重要!那么怎么判断是非常重要的CALL哪!这里面有这样几个特点

1:拦住这个CALL应该再出现错误之前
2:它的下面一个子CALL应该在错误之后意思就是说
                   
                          1
                    1.1    1.2  1.3  1.4  .......
            1.1.1  1.1.2  1.2.1 1.2.2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果你发现你当断点设在1的地方!错误还没出现  但是断点设在1.1.1(或者1.1.2等等)的时候,已经出错了!
那么说明出错的CALL一定在1.1或者1.2这些CALL的等级中间!详细的跟踪他们是你的关键!我们由此不难发现
我们可以设断电45CEC7  然后运行程序跟踪!发现在运行中被中断了两次!你不用跟踪第一次!因为我们把断点设的等级太高!此处会被别的多次调用!关键是下面的子CALL!


:00761160 0300                    add eax, dword ptr [eax]
:00761162 0000                    add byte ptr [eax], al
:00761164 55                      push ebp
:00761165 8BEC                    mov ebp, esp
:00761167 B911000000              mov ecx, 00000011

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00761171(C)
|
:0076116C 6A00                    push 00000000
:0076116E 6A00                    push 00000000
:00761170 49                      dec ecx
:00761171 75F9                    jne 0076116C
:00761173 51                      push ecx
:00761174 53                      push ebx
:00761175 56                      push esi
:00761176 57                      push edi
:00761177 8945FC                  mov dword ptr [ebp-04], eax
:0076117A 33C0                    xor eax, eax
:0076117C 55                      push ebp
:0076117D 683C197600              push 0076193C
:00761182 64FF30                  push dword ptr fs:[eax]
:00761185 648920                  mov dword ptr fs:[eax], esp
:00761188 8B45FC                  mov eax, dword ptr [ebp-04]
:0076118B 83B8580B000000          cmp dword ptr [eax+00000B58], 00000000
:00761192 0F8539070000            jne 007618D1                              ***********
:00761198 8B45FC                  mov eax, dword ptr [ebp-04]
:0076119B C780580B000001000000    mov dword ptr [ebx+00000B58], 00000001

* Possible StringData Ref from Data Obj ->"岪"
                                |
:007611A5 A178677700              mov eax, dword ptr [00776778]
:007611AA 803800                  cmp byte ptr [eax], 00
:007611AD 0F8469060000            je 0076181C                                *************

* Possible StringData Ref from Data Obj ->""
                                |
:007611B3 A124687700              mov eax, dword ptr [00776824]
:007611B8 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->""
                                |
:007611BA 8B15AC5E7700            mov edx, dword ptr [00775EAC]
:007611C0 3B02                    cmp eax, dword ptr [edx]
:007611C2 7415                    je 007611D9

* Possible StringData Ref from Data Obj ->""
                                |
:007611C4 A124687700              mov eax, dword ptr [00776824]
:007611C9 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->""
                                |
:007611CB 8B15F05E7700            mov edx, dword ptr [00775EF0]
:007611D1 3B02                    cmp eax, dword ptr [edx]
:007611D3 0F853A030000            jne 00761513

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:007611C2(C)
|

* Possible StringData Ref from Data Obj ->"@腫"
                                |
:007611D9 A1106A7700              mov eax, dword ptr [00776A10]
:007611DE 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->""
                                |
:007611E0 8B1540677700            mov edx, dword ptr [00776740]
:007611E6 3B02                    cmp eax, dword ptr [edx]
:007611E8 7415                    je 007611FF

* Possible StringData Ref from Data Obj ->"@腫"
                                |
:007611EA A1106A7700              mov eax, dword ptr [00776A10]
:007611EF 8B00                    mov eax, dword ptr [eax]

* Possible StringData Ref from Data Obj ->""
                                |
:007611F1 8B156C677700            mov edx, dword ptr [0077676C]
:007611F7 3B02                    cmp eax, dword ptr [edx]
:007611F9 0F8514030000            jne 00761513



我们会在00761192处和007611AD出发现两个比较大的跳转,试试看!你会发现如果在761192处跳的话!嘿嘿!你会发现你连用户名都不用敲就进去了!没有提示找不到狗!运气不错!但是你点击一下菜单!麻烦出来了!不好用!
OK!换!007611AD,让他跳转!这次不错!成功出现提示连接数据库!然后选择服务器!选择数据库,用户名!密码!哈哈!进去了!试着运行一下!怎么样???不错吧!就是这么简单!需要的就是时间和精力!

我的文章完了!我向大家看不懂得地方就是那些什么什么一级一级的子CALL吧!我实在想不出别的办法来描述我心中的想法,我会在找时间好好琢磨一下自己的语言!希望您能看得懂!这是我处理软件的最先的办法!一般来说!能解决大部分问题!当然有些软件这样来回的简单跳转是不能解决问题的!还需要TRW去好好分析读狗流程!这不是我这篇菜鸟教程中的内容!下期再说吧!


--------------------------------------------------------------------------------
QQ:150025153  EMAIL:qdcrack@sina.com