第八题
PEiD有一个叫做Krypto ANALyzer的插件,使用这个插件可以对程序进行扫描,通过特征匹配来识别程序内部可能用到的一些标准算法。
先看题目,随便输入就会报错。
利用IDA找到关键点这些烂熟于心的步骤就不再提了,对下面这段关键算法分析完了之后发现关键函数是sub_401510,但是点开这个函数,真的是好长的一大串,
用PEid的插件进行分析,提示这个程序用了 MD5算法。
根据提示地址,在IDA反汇编指示图按下G,输入00401E5C,就会自动跳转到函数代码中
可以从sub_401D10回溯到sub_4026F0,继续通过交叉引用往上回溯,依次为sub_4027B0、sub_401C00、sub_401BB0、sub_401510,而sub_401510就是我们在实验步骤一种为一个暂时不理解的函数。那么我们可以猜测sub_401510这个函数就是用来计算用户名的MD5值的,我们可以通过OD动态调试来验证我们的想法。
通过阅读IDA中的反汇编代码,我们知道在00401752处调用了sub_401510这个函数,
OK使用OD载入在00401752设置断点,输入test,直接跳转到执行sub_401510,看到eax寄存器值正好是test的MD5值
这里说明插件判别是正确的正好使用python写一个MD5的注册机
#!usr/bin/python
#-*- coding:utf-8 -*-
import hashlib
while True:
username = raw_input("input username:")
md5 = hashlib.md5(username).hexdigest().upper()
serial = md5[::-1] # 翻转字符串
print "serial: %s" % serial