上帝守护 发表于 2009-11-19 16:52:03

破解的一些心得和思路


学习破解以来,很多次都是破着破着不知道该怎么办了,所以总结了一下思路,希望其他大虾给予补充,本人菜鸟。
从头说起。

1.首先我们拿到一个软件或者crack,第一步当然是查壳,可用的工具有PEID,FI,FBA等,查出来了过后我们可以用相应的脱壳机或者OD手动脱壳,然后用IR等工具来修复,这是基础,相信大家都清楚拉,至于PEID欺骗,脱壳后的修复,减肥,等等此篇文章不做说明。

2.查完壳试运行,如果不可以运行,其他无误的情况下,那估计程序就是有自校验了,通常程序自校验都是通过判断未脱壳之前文件的大小和创建时间来校验的,我们破他,简单的方法,看他未脱壳之前文件大小,例:大小是16000字节 那么转换成十六进制就是3E80,好,我们OD载入它,查找-所有常量-输入3E80,在出来的窗口中,双击进去,再在附近分析,找能跳过去的跳转并改掉,也可以把3E80这个数据换成我们现在的文件大小,轻松解决。如果查找出来的数据有多个,那么这个软件就是判断了多次,就需要每个都要改了。当然,如果查找无果的情况下,那我们就需要下断点了,在小生大大发的专用版OD中,有常用断点,如判断大小的,文件时间的VB专用的,很多。方法就不在本文中叙述,请参考其他教程

3.再可以运行的情况下,填入假码,点注册按钮,看他提示的信息,记下他,OD载入,插件,查找字符串,查找到你刚才看见的提示信息,双击进去,在附近分析,也可以在段首下断,好追注册码和分析算法。这里要注意VB要用UDICODE查找,当然也可以借助C32或W32asm和其他资源工具,这类的教程相信各位看得很多,就不再详说

4.很多软件都屏蔽了字符串,查找字符串就查不到了,很多新手就不知所措了,没关系,继续看过来。如果我们输入假码过后,他要弹框,例如要提示注册码错误等等的,通俗点我们就可以下他弹框的这个断点,在小生大大发的专用版OD断点插件中拦截对话框里有,当然VB的不行,要用下面的VB专用,然后SHIFT+F9运行,断下来了过后按ALT+F9返回然后上下分析关键。。有时也要看OD右下角,向下拉着看注释有 返回到XXX。XXX代表程序的名字,而不是系统的某个DLL文件。右键点他,跟随到数据窗口,然后上下分析关键
当然我们也可以用很多资源工具来找他的按钮事件,按钮事件就是你点了确定或者注册过后所发生的一切行为,你找到了这个事件那当然就离你破解不远了。。Deph 语言的有DEDE等能很方便找到他的按钮事件,然后再结合OD在这个按钮事件这里下断,分析。在小生大大的工具包中(逆向资源区有)资源工具一拦有非常多的资源工具,大家可以下载下来学习。

5.当我们输入假码点确定的时候,看见没有反映,有的还自动退出的情况下。

怎么办呢?大家可以参照论坛里一位大大发的帖子,我现在把他复制过来

总结五种语言按钮事件的找法
调试软件,最重要的就是下断点,那么如何下断点,就是一门重要的技巧.
比如:弹提示框,就下MessageBoxA,注册表的,就下RegOpenKeyA等等.
当然,能直接下到按钮事件,当然更为方便,因为到了按钮事件后,很快就会到达核心代码,离你的破解也就不远了.
本文就总结一下各类语言找按钮事件的方法,当然也可以借助工具,如VBexplorer,DEDE,ECE等等.
一、VB程序
其实,VB的按钮事件的找法是最为普遍的,也就是大家所谓的万能断点.其实也不仅仅是针对按钮事件,还有很多其他的用处,如取消NAG,启动框,灰色按钮或隐藏按钮,启动时的timer事件等等,具体的就自己去总结吧,这里只演示按钮事件!
OD载入后,CTRL+B,816C24
确定后,就会来到下图处:
然后,就在下面的JMP处F2下断,下完后CTRL+L,如果还有,就继续下断点.
下完断点后,运行程序,点击相应的按钮,OD就会断下来了
下面的任务就是考验大家的耐心,F8跟踪吧,不再赘述了.
当然,为了方便大家,可以写个简单的脚本,免的每次都去手动设置了,节省时间:
复制内容到剪贴板
代码:
var Addr
mov Addr,401000
loop:
find Addr,#816C2404??000000#
cmp $RESULT,0
je Exit
add $RESULT,08
bp $RESULT
add $RESULT,1
mov Addr,$RESULT
jmp loop
Exit:
eval "按钮事件查找完毕!"
msg $RESULT
ret
二、Delphi和BC++程序
Delphi和BC++都是同一公司开发的,故查找方法都一样,当然你也可以使用DEDE.
OD载入后,CTRL+G,转到00401000处
然后就CTRL+B,查找特征码740E8BD38B83????????FF93????????
然后就会找到下面的地方:

然后就在下面的CALL处下断吧.
下面的工作就是不断的CTRL+L继续查找和F2下断了.
运行下看看效果吧:

看,断下了吧,下面就F7跟进这个CALL吧,就来到这个按钮事件处了.
同样写个脚本,方便大家操作:
复制内容到剪贴板
代码:
var Addr
mov Addr,401000
loop:
find Addr,#740E8BD38B83????????FF93????????#
cmp $RESULT,0
je Exit
add $RESULT,0A
bp $RESULT
add $RESULT,1
mov Addr,$RESULT
jmp loop
Exit:
ret
三、易语言
易语言的这种查找方法,同样适合有壳的程序,其他的就必须脱壳后再继续操作了.
OD载入后,就F9运行程序吧,当程序运行后,ALT+E
选中易语言的核心库krnln,双击进去


然后CTRL+B,查找FF 55 FC

查找到的这个CALL就是了,F2下断吧
现在输入必须的内容后,单击对应的按钮吧


看,断下了吧,下面就F7跟进吧,就来到按钮事件处了
同样,写个脚本,方便大家
复制内容到剪贴板
代码:
gpa"GetProcessHeap","kernel32.dll"
cmp $RESULT,0
je err
bp $RESULT
run
run
run
bc $RESULT
rtu
find 10001000,#FF55FC5F5E895D??8945#
bp $RESULT
find eip,#FFE0#
cmp$RESULT,0
je err
bp $RESULT
run
bc $RESULT
sto
MSG "按钮事件查找完毕!"
ret

err:
MSG "脚本运行错误!请检查错误后再继续运行脚本!"
ret
四、VC++程序(非MFC程序)
OD载入后,单击鼠标右键,选择"查找",然后是"所有命令"
在弹出的输入框里,写入特征代码"sub eax,0a"


确定后,就来到下面的窗口

在下面的sub eax,0A处,双击进去吧:


来找这里后,在下面的je处跟随过去


跟随来到的这个CALL,就是了,F2下断吧
然后断下后,F7跟进,F8几次,就来到按钮事件了.
                                             五、MFC类程序
当然判断MFC和非MFC的程序,靠大家自己去判断了
OD载入后.ALT+E,来到可执行模块,找MFC的核心DLL:MFC42
然后就双击进去

然后就CTRL+F,查找特征代码:sub eax,0a


同样,找到后,就在下面的je处跟随,跟随后看到的CALL,就是那个关键CALL了!


断下后F7跟进,F8几次,就会来到按钮事件代码处了!

方法就简单的介绍到这里了,当然只是抛砖引玉,其他的,还得多靠大家自己慢慢总结吧!

6.基本上以上5点做完后,都能够完成基本的破解了,无果的时候,也可以想想其他思路
例如,1.没有注册的时候,他显示的是未注册,注册成功后他显示已注册,或者授权给某某某使用,或者是什么版本,我们可以跟进去看看他是怎么判断的,2.你输入假码的时候,点确定没有反映,但是你什么都不输入的时候,有的软件要弹出,用户名不能为空 等等字样,我们可以用拦截对话框,故意不输入用户名,这样就断下来了,因为一般判断用户名是否为空再往下面走点点 就是判断密码正不正确老。嘿嘿,这也是一个突破口。3,有的软件有关于一项,里面有显示未注册用户之类的东东,我们也可以靠这个进去看他是怎么判断的。。。







{:3_62:}
页: [1]
查看完整版本: 破解的一些心得和思路