作者:逆向驿站
原文链接
CrackMe011 | 玩个心理战直接口算 | 160个CrackMe深度解析(图文+视频+注册机源码)
CrackMe011和8.9.10都是一个作者,依然是VB,我们利用上篇的总结,来搞这个吧!这是一个看似很复杂,但若逆向思考开发者开发心理后,抽丝剥茧,完全秒破,且口算注册码
准备
【环境和工具】
- win7/xp虚拟机环境
- olldbg
- CrackMe011
【学习层次】
图文分析
字符串入手入迷局
先观察程序,现象和发散猜测如下
- 不能输入,只能点击(限制了输入的字符范围)
- 没有确认按键(可能是靠changcode事件监测,大概率有timer循环)
开始老套路,搜索字符串,发现好多好多,类似的就有60组之多
找几个跟进去看看,发现反汇编代码基本一致,不仔细看根本看不出来除了地址有任何区别?
我们爆破一个看看,如下动图
发现,随便挑一个修改关键跳,就直接爆破了。但是这并不是我们的目的。
估计很多人到这里就蒙圈了,最起码会有一种放弃的惯性压迫感。现在我们开始逆向心理大法,根据我们获得的信息碎片,对开发者的心理和真实意图进行推测,我们得到的信息碎片有
- 在这些字符串中的任何一个下断点,一下断点程序就暂停了
- 没有输入任何字符,均会被断点暂停
- 这些字符串看起来都很像,但又会有一些细微的差别
- 字符串跟进去浏览上下反汇编代码,基本相同
- 随便跟入一个字符串,定位关键跳,均可成功爆破
- 根据这些信息碎片,推测如下线索
- 一下断就停,那就是有timer
- 即使没输入也在检测流程,程序的合理性和健壮性不高,可推测开发者很可能不是完美主义者
- 看起来像,但又有细微差别,感觉特别像是把真的拷贝很多份,然后手动的换掉几个字母,推测是手段并不高明的混淆
- 反汇编代码大量重复,证明源码也是大量重复,绝对不符合正常开发习惯,就是个开发小白也不可能写出重复60次的代码,而不写个函数调用的,进一步推测还是为了混淆视听
- 随便一个地方都可以爆破,证明没有更复杂的验证机制,那么多重复代码同时在不停的检测判断,而任何一个符合就可以注册成功,这也绝对不符合软件安全的基本框架,到此甚至肯定了,这一切真的只是为了混淆
- 总体来讲,欲盖弥彰,这样看来,这60段基本相同的代码,读懂一段,应该就离真相不远了
动态调试分析其中一段
发现有循环,而且是和字符串长度有关的循环
循环体实质内容,先截取字符串从左起的1个字符作为字符串(仔细观察会发现,大量重复的代码中,截取几个字符是不一样的,大概是从1-7不等),把这个字符串转化为10进制浮点数,存入[ebp-0xCC],例如我这里输入的是123,所以[ebp-0xCC]=1.000000
然后,在进行一个简单得浮点加法,是当前循环字符的asc码,加上[ebp-0xCC],我这里是1的asc码是49,加上1,所以结果是50,十六进制是0x32
下方快到循环体结束的地方,我们注意到了上篇文章提到的[ebp-0x34],这个在VB中经常会用于保存关键结果,那么我们直接F4到循环体尾部,手动控制每次循环,同时观察[ebp-0x34]中的变化,来推测源码,如下动图
我这里输入的是123伪码,总共循环三次,发现[ebp-0x34]三次的变化是
- "032"→"03233"→"0323334",根据上面的信息,得出结论
- "032"=转换16进制字符串(asc('1')+1)
- "03233" = "032"+转换16进制字符串(asc('2')+1)
- "0323334" = "03233"+转换16进制字符串(asc('3')+1)
算法就是这么简单
最后,这个字符串和那个长长的“081…………7B7C”做比较
抽丝剥茧,去伪存真,口算结果
上面的分析后,我们可以得到一个关键信息,根据算法算出来的字符串,应该是由16进制数字转换过来的,也就是说只可能是数字0-9,字母A-F,组成,含有其他的字母的长长的对比KEY全是不可能合规的假货。
接下来就是费眼的时刻,我们需要在字符串列表中,仔细看,看到F以上的字母,直接pass
最后找到一个合适的,强迫症的我全给看完了,60个真的只有这一个是合规的。
再来看看,这个真KEY相关的反汇编算法代码,不同之处除了KEY不一样,还有这个截取的字符串长度不一样,如图
知道了最终对比KEY,知道了算法,那么我们需要做的就是反推注册码了,把对比KEY按算法截取一下
0 81 7E 74 7D 7A 7D 7C 7F 82 83 6D 74 74 7A 7F 7E 7B 7C 7D 82 6D 81 7E 7B 7C
口算分析如下
- 每个值都是0-9或*或#的asc码加上验证码头两位的结果
- 而后者是固定值,前者是变化值
- 所以结果的差就是注册码每位的asc码的差
- 若是0-9,asc码是48-57,相差9
- 而*和#的asc码分别是35和42,比较小
- 而观察上面的数值,最小的是0x6D,其次0x74
- 其余均集中于0x7A-0x83之间
- 可以断定,0x6D对应的应该是*
- 可以推出,验证码头两位是0x6D-35=74
- 这样固定常量也有了,依次可以推出所有对应
如下表
算出注册码,填入测试,搞定
渗透中社工是门牛逼的学问,而逆向中同是,猜敌人之所想,方能所向披靡,去网盘中下载,试试吧
https://pan.baidu.com/s/1YZqr9kFVu2R6R4rbgpepjQ
提取码: q8tc
文章中涉及软件、课件、源码等均在网盘,为避免网盘链接失效,公众号中回复:网盘
欢迎关注个人公众号:逆向驿站
相关文章
● CrackMe-8.9.10精解-VB反汇编特点汇总
● CrackMe-007精解
● CrackMe-006精解
● CrackMe-005精解(下)
● CrackMe-005精解(上)
● CrackMe-004精解
● CrackMe-003精解
● CrackMe-002精解
● CrackMe-001精解
本期标签:VB|VB反汇编|crackme|crackme11|crackme011|社工
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-3-14 14:39
被逆向驿站编辑
,原因: 补个网盘地址