欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

一步一步带你玩破解(西电攻防crack部分)

程序员文章站 2022-03-29 15:53:52
最近和论坛的小廷一起参加了西电的网络攻防比赛,我负责了Crack的部分,学到了很多。本人也是初学破解,小菜一枚。很喜欢破解,很享受其中分析的过程。下面分享一下我的经验,能力有限,难免有不对的地...

最近和论坛的小廷一起参加了西电的网络攻防比赛,我负责了Crack的部分,学到了很多。本人也是初学破解,小菜一枚。很喜欢破解,很享受其中分析的过程。下面分享一下我的经验,能力有限,难免有不对的地方,希望大家多多指正,共同进步~

下面分享的是crackme2。爆破,以及破解自校验。

首先是爆破,寻找关键点。
1、用PEID查看,nothing found,什么也没找到,不用着急,我们还有后续的判断措施;
2、用OD载入,f9,运行程序,发现正常显示了对话框,说明没有设置侦测OD等调试工具的措施。如果该程序设置了反调试函数,则OD无法正常运行程序的,会直接退出;
3、选择内存查看'M',或者按快捷键'alt+M',查看当前代码所在的区块。发现在代码区,没有加壳。如果程序加了壳的话,程序载入的时候,控制权会首先掌握在壳的手里,隐藏真正的入口位置。载入时当前代码就不在代码区了;
 

4、接着随意填入name,serial值,点击register ,出现消息框提示‘wrong’,什么都不输入,出现'not be empty',输入超过16个字符,出现‘less than 16 bytes’。将这些提示字符串都在参考字符串中搜索,发现都找不到。
现在这个方法不行了,我们再想其他的办法。既然有消息框,那么我们就直接寻找消息框的函数,MessageBox.
5、打开当前模块的名称,或者按下快捷键'ctrl+N',直接输入'MessageBox'。右击选中MessageBox,选择‘反汇编窗口中跟随’,然后在USER32 的领空先下好断点。
 

 

不能直接在输入函数窗口中下断点,输入函数窗口中显示的地址是pe输入表中函数字符串存放的地址。
6、ctrl+f2重新载入,f9运行,输入name和serial,程序断下了,ctrl+f9执行到返回。接着可以看到右边寄存器窗口中字符串'Wrong',还有上面有一个可疑的je跳转,发现上面的call eax就调用了Messagebox。这样,我们在上面的je下断点。
 

再次重新载入运行,输入name和serial,程序直接断下。我们直接将je 改为jmp,直接f9运行,爆破成功,出现恭喜消息框。

 


这样我们就实现了爆破。保存修改后。点击运行发现程序直接跳出。这就是文件自校验了。
文件的自校验手段有文件大小校验,时间校验等等。
这个程序的校验方法,我们依旧采取对比跟踪的思路,但是为了减小工作量,我们直接采用createfile函数下断点的方法进行破解。
createfile函数可以获得一个文件的句柄,从而获取文件的大小等操作。
1、载入破解的程序,ctrl+N打开输入函数列表。找到createfile。这里介绍另一种下断点的方法,右键选择查看“调用树”,里面罗列了所有调用了这个库函数的位置。在第一个位置下断点。
2、f9运行,程序断下,查看堆栈窗口的filename 是本文件的地址。说明在读自己。
 

3、od打开原始文件,同样在craetefile位置下断点。接着运行两个程序,进行比对,找到不同的地方。
 

4、发现在PostQuitMessage的地方出现了不同,修改上面的jnz为jmp强制跳转,自校验破解成功。

 


总结一下:
对于爆破,获取提示信息很重要,通过提示信息查找字符串是一种方法,当这种方法行不通的时候,就打开输入函数列表,查找相关函数下断点。如MessageBox,GetWindowTeXt等,
GetWindowTeXt会获取控件的字符串。一般程序获取输入的用户名密码等等,都会用到这个函数,本程序也可以使用这个方法来找到关键点,朋友们可以试试,只是绕的弯要多一点。不过对于初学的我们,多多的把玩一个程序,多种方法都尝试下,是很有帮助的~

 

对于破解自校验,比较有效但是花费时间的方法就是OD跟踪对比源文件与破解的文件,寻找不同。为了减小工作量,可以用
createfile来锁定位置。

 

破解原件下载地址:欢迎大家把玩,以及提出其他好玩的方法来破解~吼吼



http://www.2cto.com/uploadfile/2013/1026/20131026101452280.rar