OD法
标准的C语言逆向分析程序,只要一路跟进CALL就能找到密码算法的位置并分析流程就可以了。
找到算法CALL跟进后就会注意到一个指令:REPNE SCAS BYTE PTR ES:[EDI]
这也是本例子唯一困惑我的地方,查了一下这条指令的用法,发现他其实是结合not ecx和sub edi,ecx计算输入字符串长度的,要求是长度为14位
当输入长度为14位密码时,进入密码运算步骤,如下图关键循环处,在这里只对输入的密码简单的采用了xor 20的运算,得到一组新的序列,存回原地址
读取一段栈区的14字节数据,并每个进行ADD BF运算,结果取出一个字节组成一个新的14字节数据(这段14byte数据没注意怎么来的,有兴趣的可以自己跟一下)
用处理过的输入密码和上面处理过的14字节数据进行逐个比较,全部正确则验证通过。也就是说,输入的密码(ascii码)XOR 20h要等于以下的14个字节数据。
63 52 14 43 4B 69 53 73 4F 65 14 53 59 01
所以对这14个字节X0R 20h就能还原出原始密码!
转自实验吧,原文作者实验吧ID kyogre6105
IDA法

ida直接看出验证算法在if里的sub函数里
打开看啊看。。
看到v5到v7定义了一堆诡异的数据
因该是加密的数据
再看看算法
先输入a1,求长度,异或0x20
在比较
所以只要吧那堆数据减五异或20就可以了
转自实验吧,原文作者实验吧ID Zarcs