【文章标题】:去多重校验破解程序
【文章作者】:[B.H.S.T]颓废の傻鱼
【作者邮箱】:7484345@qq.com
【作者主页】:http://hi.baidu.com/颓废傻鱼
【作者QQ号】:7484345
【软件名称】:实创进销存管理软件
【软件大小】:2.32 M
【下载地址】:http://www.skycn.com/soft/46124.html
【加壳方式】:ASPack 2.12
【保护方式】:多重自校验+重启验证+注册保护
【编写语言】:Borland Delphi 6.0 - 7.0
【使用工具】:OD,PEID
【操作平台】:Windows XP
【作者声明】:破解纯属兴趣,没有其他用意,请大家尊重作者的劳动成果!偶也只是一个小菜写的不好还请大家多多指教^_^
-----------------------------------------------------------------------------------------------------------
中国黑帽安全小组:www.bhst.org 论坛只是为了几个爱好相同的朋友一起静下心来一起研讨技术!无名无利!
互助共进 追求技术 齐心协力 自由飞翔 有喜欢编程的 破解的 入侵的朋友都可以来我们论坛和我们一起交流
【详细过程】
很久没有制作教程了 昨晚破了一个软件 觉得挺有意思 所以作个教程和大家一起分享一下心得
先来看看软件吧 查壳我就不查了 是个压缩壳 菜鸟都可以搞定的ASPack压缩壳 我就直接OD脱了它
脱壳部分没什么大问题 我就不详细说明了 看操作就OK了 机器有点卡哦 大家快进看吧
脱完壳后的文件体积比原来的要大得很多 我们来比较下6626304 原程序的也看一下1816064
这样就可以触发程序本身的自校验了 不要直接去运行 因为我脱壳后直接运行给关机了 呵呵
不相信的朋友可以自己尝试一下 下面开始进入今天的正题 去除多重自校验 破解分去校验和破解两部分
去自校验部分:
退出进程:bp ExitProcess
退出系统:bp ExitWindowsEx
这两个断点大家都不会陌生 断点的作用我也写出来了 下面OD载入脱壳的程序找校验的地方 请稍候 在分析
还是很慢哦 大家快进吧 机器太古董了 没有办法.. - - 好了 下面就先找关机的校验吧 因为不把这个去掉
没办法调试程序 已经断下来了 此时不能Alt+F9返回 这个是菜鸟经常犯的小错误 因为返回的话 就直接关机了
在堆栈里面跟随到反汇编窗口 代码大家在自己看了 关机的校验有三处 简单的分析一下就知道了 三个关机的
校验都是由上面的je判断的 我们直接把je都NOP掉就可以了 运行了之后 发现还是没办法运行 我们这样看看
这速度太快了 没法看到进程退出的 下面继续去除退出进程的校验 用到的断点是这个bp ExitProcess
我们就不下断了 直接OD载入程序之后单步走下去看看 走到了这里这个JE是否退出进程 我们继续走几步
看到这个奇怪的东东6626304 想想程序开始就验证这什么东西的? 回头看看我刚才记录的6626304 一样的对吧
如果你很聪明 你就知道这里比较什么了 这里比较了文件的大小了 这里的jle是小于等于就跳 这里显然我们的
脱壳文件要比原文件大的多 在这里我没有详细去分析了 那个CALL里面就是比较文件的大小 大家可以自己跟进去看看
00831DB6 |. E8 7183BDFF call unpack.0040A12C
00831DBB |. 3D 00003000 cmp eax,300000
退出系统校验代码如下:
0070FF16 |. /74 08 je short unpack.0070FF20
0070FF18 |. |4E dec esi
0070FF19 |. |74 16 je short unpack.0070FF31
0070FF1B |. |4E dec esi
0070FF1C |. |74 24 je short unpack.0070FF42
0070FF1E |. |EB 31 jmp short unpack.0070FF51
0070FF20 |> 6A 00 push 0 ; /Reserved = 0; Case 1 of switch 0070FF15
0070FF22 |. 6A 06 push 6 ; |Options = EWX_REBOOT|EWX_FORCE
0070FF24 |. E8 BB80CFFF call <jmp.&user32.ExitWindowsEx> ; ExitWindowsEx 1处
0070FF29 |. 83F8 01 cmp eax,1
0070FF2C |. 1BDB sbb ebx,ebx
0070FF2E |. 43 inc ebx
0070FF2F |. EB 20 jmp short unpack.0070FF51
0070FF31 |> 6A 00 push 0 ; /Reserved = 0; Case 2 of switch 0070FF15
0070FF33 |. 6A 0C push 0C ; |Options = EWX_FORCE|EWX_POWEROFF
0070FF35 |. E8 AA80CFFF call <jmp.&user32.ExitWindowsEx> ; ExitWindowsEx 2处
0070FF3A |. 83F8 01 cmp eax,1
0070FF3D |. 1BDB sbb ebx,ebx
0070FF3F |. 43 inc ebx
0070FF40 |. EB 0F jmp short unpack.0070FF51
0070FF42 |> 6A 00 push 0 ; /Reserved = 0; Case 3 of switch 0070FF15
0070FF44 |. 6A 04 push 4 ; |Options = EWX_FORCE
0070FF46 |. E8 9980CFFF call <jmp.&user32.ExitWindowsEx> ; ExitWindowsEx 3处
=================================================================================================================
我们找到了退出进程的校验了 看看一下代码 估计有朋友看到 这个JNZ很高兴了 说直接修改成JMP就可以跳过退出进程了
好吧 就依照常规的方法看看如何 运行下看看吧 看到没有出错了 我把OD载入的进程关一下 大家那样可以看得清楚一点
看看 还是出错了 为什么呢?有兴趣的朋友可以自己尝试用bp ExitProcess这个断点去弄这个程序 今天我讲的另一种方法
校验已经完全去除了 下面进入破解的部分
退出进程校验代码如下:
00404676 |. /75 17 |jnz short unpack.0040468F
00404678 |. |833D 28708500>|cmp dword ptr ds:[857028],0
0040467F |. |74 06 |je short unpack.00404687
00404681 |. |FF15 28708500 |call dword ptr ds:[857028]
00404687 |> |8B06 |mov eax,dword ptr ds:[esi]
00404689 |. |50 |push eax ; /ExitCode
0040468A |. |E8 F5CEFFFF |call <jmp.&kernel32.ExitProcess> ; ExitProcess
0040468F |> 8B03 |mov eax,dword ptr ds:[ebx]
========================================================================================================
破解部分:
这个软件的注册机制我也没有具体去看 不过通过找字符串的方法可以搞定它 又是很慢的事来了 大家继续快进吧 - -
要快进还不爽的话 就喝点茶在来 先看看一下我爆破过的效果吧 都可以使用了 功能也没有限制的 查找完了 我们找有用信息
很是郁闷的吧 我机器太卡 所以没有直接用搜索的 你们可以在自己用搜索很快就可以找到了 运行程序 在这里比较了
我们直接修改跳过吧 要走下去 那么是试用期的判断了 改完一个 继续往下看 还有一个判断 大致看了下 这里应该也和上面
都是比较试用天数的 软件的试用天数是30 转16进制也就是1E 在这里的EAX=1意思就是试用一天了 OK了 继续运行
这里就很简单了 直接跳过就可以了 不用多解释了 看看下是否破解成功了 为了能让程序同时运行多个 我们在修改一个地方
00831D4F /75 2D jnz short Crack.00831D7E
00831D51 |6A 00 push 0
00831D53 |8B15 48628500 mov edx,dword ptr ds:[856248] ; Crack.00853D7C
00831D59 |8B12 mov edx,dword ptr ds:[edx]
00831D5B |8D45 EC lea eax,dword ptr ss:[ebp-14]
00831D5E |B9 741E8300 mov ecx,Crack.00831E74
00831D63 |E8 182DBDFF call Crack.00404A80
00831D68 |8B45 EC mov eax,dword ptr ss:[ebp-14]
00831D6B |66:8B0D 841E830>mov cx,word ptr ds:[831E84]
00831D72 |B2 02 mov dl,2
00831D74 |E8 E3EFC0FF call Crack.00440D5C
00831D79 |E9 BB000000 jmp Crack.00831E39
00831D7E 8B03 mov eax,dword ptr ds:[ebx]
代码你们在自己去看了 这里走下去的话就提示刚才的对话框 我们直接跳过吧 好了 破解到此就结束了 下面总结一下
-----------------------------------------------------------------------------------------------------------
【经验总结】
一般的校验可以通过下相应断点去调试找出校验处并去除校验(这是比较通用的方法) 这种是通过下常用的去校验断点
然后去调试程序 找到校验比较的地方 然后在修改就可以了 像这个程序关机校验很简单就可以找到 但是退出进程校验
还是很麻烦了 大家可以自己去练习一下 所以我使用了另一种方法去除退出进程的校验
若是有时候校验处校验的方式太麻烦了 这时候可以选择程序开始的地方去调试找校验(这个方法有时候也不太适用)
具体的还是要大家熟悉去校验的一些方法 灵活的应用在一起 才可以更好的去破解程序 好了 不想多说废话 教程结束
-----------------------------------------------------------------------------------------------------------
【版权声明】:本文原创于颓废の傻鱼S Blog(http://hi.baidu.com/颓废傻鱼),转载请注明作者并保持文章的完整,谢谢!
2008年12月11日11时2分57秒