我们一起来看这个系列的第三题是不是水题..
PEID,没有查到有壳,依旧是一个C++的逆向:
伪码检验:
同样OD中查找文本字符串,定位到该字符串位置:
这三个题目都没有在定位上为难cracker。
于是还是同样的工作,向上找到函数的头部下断点,F9运行,之后,输入伪代码,F8进行代码分析:
这是这之后一部分的代码流程:
依旧是在判断输入的name和serial字符串的长度。
这之后就进入了两个循环中,分别是name的算法和serial的算法:
这Hex窗口中跟随会好一些:
熟悉汇编循环的童鞋很容易就能理解在做什么,举例来说:以C语言:
同样对seial_false做了同样的操作,只是初始值变了:
之后,分析代码:
中间部分看似多,实际上就是对每一位的name和serial进行了比较:
这是我输入的伪码所生成的两个字符串:
明显不相等,第一位比较就会错误...
我们彻底清楚了算法的流程,要注意,两个字符串经过各自的算法变换之后的比较中,仅仅比较name字符串的长度的个数的位数。
通过算法用C语言写逆向算法的功力:
结果检验:
最近的生活啊,我在用命crackME...