一个驱动类Crackme的破解(爆破分析)
本帖最后由 Fid 于 2010-7-26 09:00 编辑http://www.52pojie.cn/thread-51861-1-1.html 这是那个Crackme的链接地址(你会发现作者也是我。。)
我把Word文档也给大家留下吧。。。要上传图片。。作者:刄閪闁閸闏乄(Fid)前几天(大概快半个月了吧,我记性不好),我自己写了个Crackme,发到了52pojie上,可惜因为是带驱动的,一群菜菜们就放弃了,而高手又没有时间来玩这些纯练习的东东。所以一直没被破解,连个爆破的都没有!。干,于是我发了个我自己的注册文件帮助大家分析。可惜,依然无人问津。于是,今天打算自己破了,给大家看看这中带驱动程序的破解是怎么样进行的。因为程序算法不是很复杂,所以我就先从静态开始讲,有空以后会来讲下,如何动态爆破。用到的工具有IDA,和OD。//因为这篇文章是我这个Crackme作者写的,所以思维上存在了一定的跳跃性,请大家理解。正文: 首先用OD载入Exe程序,直接运行下。首先搜索字符串。
找到关键点的几条语句。双击You are Failed,来到关键点:分别给00401859与00401853加入标签式注解,使之程序更易于解读。这是程序的上半段的截图:输入Fivedoor。在CreateFileA函数前下断。
只要大家有一定的功底就能看出这几个jnz Fail 之上的判断是什么内容。还是简单说明下,这两个jnz(第一个是判断文件是否存在(文件名为Reg.c+输入的用户名),第二个判断注册文件大小是否为0x80字节)再往下。
这里只是单纯的比较读取是否顺利获得ReadFile长度是否为0x10。这是个循环,会读8次,读出所有的内容(0x10*8=0x80)在接下来就是本文最最关键的地方了。前面是获取设备的句柄的一个CreateFile我已经掠过了。这里WriteFile处因为只是简单的比较写入的值,这里不会错误(程序我写的,所以我知道,其实这里也需要简单的分析下),关键是ReadFile处,才是关键,返回0x30(’0’)就失败。为什么读取会返回1呢?大家可能在找有没有一个叫FDCrackme的文件,然后它的头部是”0000000…”所以失败了。其实不是这样的,读取设备内容,回调用驱动设备的IRP_MJ_READ。而不是大家所想的和读取文件内容类似。(这里主要给菜菜们科普下,大鸟不要喷我。)这里的内容只要循环8次,都不是’0’就可以了。接下来就不可能用OD多做什么了。接下来换IDA,载入驱动程序后。会提示你是否载入PDB文件,(我有,可惜大家没有,所以我也不载入了。不过大家还是一起选Yes吧)科科科,这里去找DriverEntry喽。大家随便找找当指针停在这里时就DriverEntry了,过程就不详细讲了。注意到这里就是关键了,这里是给DriverObject的IRP处理函数赋值,这里需要去Wdm.h找寻真相。不要急着找0x34对应的值你找了也找不到。呵呵,这里要去研究DriverObject的结构,我就跳过了,大家看大小两个关键是IRP_MJ_READ/IRP_MJ_WRITE呵呵两者是相邻的所以分别是34h和38h,呵呵那你就错了(思路是对的,其实44h和48h)。其实真确的答案是从上到下为DriverUnload(虽然不是IRP但也其实也能算个IRP(~.~||))IRP_MJ_READ;IRP_MJ_WRITE;IRP_MJ_CREATE;你都答对了吗。呵呵那么接下来转到IRP_MJ_READ。
这是程序大致框图爆破方法:这里的jz改为jmp这里nop掉就OK了。大家修改时一定要仔细喔,出错了会蓝频的哦。////////////////////////////////////当然大家想分析算法也是很简单的。就到这吧。 大家先凑合着点着看吧。不行就下Word文档 看,弄到最后还是你自己发破文。 回复 3# 2666fff
终于调节好了。
-------------------------
饿。。是啊。悲剧了。
没办法,没好人去看。
顺便问下。怎么加入编程小组呢? 呵呵,佩服你了。 kankankan kankankan 回复 4# Fid
这个组。。。你还是等LCG重开,申请LCG吧 支持下的~~~ 感谢楼主.学习了
页:
[1]
2