本帖最后由 ja3klyTim9k 于 2013-12-18 02:15 编辑
White Decrypt & CrackMe -- White解析: 前几天逛论坛发现大家都在参与一年一度的crack大赛,随便一看,发现很多crack都已经有人解答,走别人走过的路在此时或许会比较轻松,但这不是我的风格,我希望能赶在比赛结束前能有一个自己独立的解答,于是从中选了一个加密解密类的crack ,名称为<WhiteDecrypt & CrackMe>,这个crack 当时无大虾出解析,于是果断下载下来。 破解的好习惯直接查壳,发现无壳(至于为何我这个crack名称被改为123.exe,是因为我的 虚拟机除了点故障,它会在每个exe入口处自动加入一段壳,于是我 脱壳后改名为123.exe),,然后用peid自带插件查询crack中使用的加密算法无果,说明此crack中使用的是自定义的算法。
接下来双击程序运行随便输入一对用户名和密码提示“字符串长度为23”,于是输入23位长度的用户名和密码提示如下:
拿着一个crack ,对于仅存的两个按键,另一个about按钮我们当然不能放过,点击crack的about按钮,出现提示框,从提示框中我们可以知道,当输入正确时,消息框会弹出:“Something Is always Changing !”
好,废话不多说,准备工作到此结束,拖入OD,直接搜索字符串错误,很容易可以定位到程序的核心代码处!此程序定位并不难,难的是后面的各种运算!!定位图如下:
在这里我们可以看出提示“错误字符串”的原因是用户名的第一位和第五位不对,第一位字母应该为W,第五位应该为e ,于是我们在地址 40153B 处下断,因为程序后面会一直到26位的比较,所以我们在此将用户名和密码都修改为26位(至于原因往后面看就知道了),上面提示输入23个字符算是个坑吧,暂定一组用户名与密码为:
Usr:Wacke1jacky2jackyjackyjane
Pwd : 01234567890123456789012345
输入用户名与密码,运行程序后断下,单步到地址 40153B 处je跳转实现跳过错误提示框 , 往后单步跟随,在这里可以看到输入的用户名与密码:
跟随堆栈中其存放用户名和密码的位置:
再继续往后面单步,用户名和密码的每一位和前一位异或再负值给自己!如下:
经过运算后的用户名与密码的情况:
到下面的地方会出现crack预定的一组值,它会和我们输入的用户名与密码分别经过运算得到最终输出的消息框中的值:
跟到这里算是开始了真正的生成消息值得步骤了,将处理后密码PWD_1 的前十一位分别与给定的值异或,并覆盖给定值的位置。(最终消息的1-10位,第十一位继续参与后面的运算)如下图:
这里和上面的运算相同,不同的是这里是取运算后用户名的第十一位到第二十一位间的值分别与经上面运算修改后的给定值(我们将其设为状态2)的第十一位到第二十一位异或运算并将结果覆盖给定值的位置(最终消息的第十一到第二十位,第二十一位继续参与下面的运算):
此时的给定值经过分别与用户名和密码的运算,我们设其为状态3 ,再继续单步往下:
此时将给定值的状态设为状态4 ,则状态4的给定值就是crack 消息框中最终输出的值,此时我们的输出值为:
呵呵,很明显不对!不知细心的朋友发现没 ,通过上面的运算我们一共对给定值修改了26位,但此crack 要求生成的消息:“Something Is alwaysChanging !”是30位,这时我们想起程序给定的值一共也是30位,通过上面的分析知道其实最后四位我们根本没动,而且它已经是对的!
好了,方法就是这样子,至于其中的运算那就要看你们自己的了,答案不唯一!可以自由发挥哈!下面给出一组正确用户名和密码:
usr: Woshele_jSaGoU@_Y^UL9p8q*q pwd: LgWQg}WDacWiyingleo?jCtCtB
用户名和密码可能看着有点不舒服,但,,我觉得此题最重要的是知晓它运算的方法,能推导出来已经很庆幸了,这也就将就了,希望朋友们多多加油,其中涉及到数学之间的转换,需要动点脑筋,加油!
如果上面图片的内容看不清楚的话,建议下载下面的附件,里面文字描述可能清楚一点 ,附件里是我运算时的一些参考方法,希望对你们有用 !!
|