有趣的反汇编

  今天学习到了《加密与解密》第5章KeyFile保护一节,题目当然是一个小型的crackme,采用KeyFile保护。要求不能暴力破解,要你搞清楚它的算法流程。我直接OD单步跟踪,一边分析汇编代码一边在纸上记录关键点。一路走到关键区域前,倒是没什么难度。而经过分析,关键部分是一个for循环+switch-case(取值0-3)和一块内存区域[004031CC].内存区域数据如下:

  然后有趣的地方开始了,大致流程是这样的:当前位置首先初始化在[004031CC],即字符'C'处。然后进行for循环,其中的switch-case的4个取值分别对应当前位置上,下,左,右移动一格。移动之后判断如果当前位置值为2A('*'),则密匙校验失败。最终当前位置等于58('X')时,校验成功,可以看到'X'在内存右下角。等等,这个过程不就是个走迷宫吗,从'C'开始,目标是'X','*'是障碍,'.'是路径,仔细一划,果然有一条路径最终通向终点!作者居然把求解密匙的过程转化成了走迷宫,太有创意了!

  我是没有看书上的介绍直接分析这个crackme的,分析出了大致算法后感到很是赞叹,这样和谐自然地摆弄内存,指挥数据跳舞,太厉害了。继续进行自己的反汇编与逆向之旅。。。

原文地址:https://www.cnblogs.com/mavaL/p/2661106.html