170604 逆向-CrackMe之014

1625-5 王子昂 总结《2017年6月4日》 【连续第246天总结】

A. CrackMe(14)

B. 拖入PEiD,无壳,然而又是VB

先用OD运行试试,这次有弹窗

F12暂停后ALT+K查看调用堆栈,在最后一个地方找到了MsgBox的调用

跟过去,上下翻翻就看到了ASCII文本

在错误的前方的jmp处NOP掉,再来一次,仍然报错

翻到开头,单步跟

发现有长度与9进行比较,必须为9才成功

于是输入长度为9的字符串,爆破成功(或者把长度判断那里NOP掉也可以爆破成功)


注册机就特别……凌乱了:

首先在OD中单步跟,寄存器中看不到什么有用的东西

大概流程应该是取第一个字符的ASCII-0x48,然后和某个值比较

然而这个值并没找到怎么来的

尝试了好久都没办法,拖到VB Decompiler里看看

成功反编译出了源代码,但是很杂乱,重复的部分特别多,还有些不知哪来的变量

关键结构和语句大概能看出来有这么几个:

A: if var3<>0 then goto [正确出口]

xor 02h

if(var1-48)<>var2)<>0 then goto [错误出口]

goto A

但是其中的变量都是混乱的,理不清到底处理的是谁

没办法,查论坛

没想到论坛的系列作者在这一关直接放弃了……第一个if的地方觉得不可能成功就认为只能爆破而无法得到正确Serial了(事实上在那个判断之前还有一个跳转)

看下面的回帖,有两个有用的内容:

301674501是正确的Serial

从1-9异或2再+48

虽然语焉不详,但是大概能懂一些东西了

我记得之前在OD中跟的时候也看到过xor 0x2h了,那么这应该是一个很关键的计算

我之前输入的Serial都在第一个字符的验证就卡死了,明明源代码中很明显是循环处理,却从来没看到循环

于是把正确Serial再输入进去,发现确实可以循环

在xor 0x2h处下断,操作数是eax,观察发现eax的值就是循环次数

而48是0的ASCII值

再去用计算器验证一下,跟我想的没错

于是本程序的算法就出来了:

用xor n,2+48与第n个字符的ASCII比较,正确则继续判断,错误则直接跳出

然而关键比较的地方我还是没找到变量,call前面push的两个参数跟过去,一个能发现正确的Unicode,另一个却完全没有发现任何踪迹(无论是地址、ASCII、值)

VB真复杂_(:з」∠)_ Decompiler的反编译又不靠谱 

C. 明日计划

CrackMe(15)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值