题目说明
该题目由en1code.exe一个文件组成。该文件是一个简单的加密程序,如果你输入了一个正确的字符串,它将返回给你一个加密后的字符串cip。
请大家运行该程序,并获得cip即为成功。如果你不知道应该怎么办,请看看你有没有装debug工具?
解题步骤:
1. 打补丁
修改一下条件语句
这样就可以直接跳过判断的部分
2. 逆向工程
由于之前出现问题的点就在于Test al,al后的JE分支判断
我们就看一下之前修改过Al的部分,判断al是0还是非0(那么也就是说,我只有将al设为非零才可以通过)我们看到最近的call指令前,有一个将eax向外赋值的操作,所以推断在call en1code.0040139D中对eax进行了修改。
我们跳到相关子程序部分,看到在004013CE部分进行了对eax赋零的操作,正确的路径应该是跳过着一条语句。我们往上看会发现,只要004013c2语句应该cmp生成0:这就需要eax(dword ptr ss:[ebp-C])和dword ptr ss:[ebp-10]相等。
从子程序的开头出,可以看到dword ptr ss:[ebp-10]被赋值为0A(10)。我们看一下004013B7的子程序
其他位置导致的no Wrong lenth…输出,所以意味着字符串长度应为10