MD5(Message Digest Algorithm)消息摘要算法对输入的任意长度的消息进行运算,产生一个128位的消息摘要。 MD5的特征是会出现如下 A,B,C,D 这四个常量。
A=01234567h
B=89abcdefh
C=fedcba98h
D=76543210h
而且,在内存中是以低字节在前的形式存储的,即如下格式,可以直接搜索。
01 23 45 67 89 AB CD EF FE DC BA 98 76 54 32 10
这里用《加密与解密(第4版)》随书文件 MD5KeyGenMe.exe
来分析。
手动分析
在导入表中找到 GetDlgItemTextA
函数定位关键代码,两次 GetDlgItemTextA
函数读取的应该分别是 Name
和 Serial Number
:
sub_4012B0
函数我们点进去看看发现了MD5的几个特征常量:
还原一下符号,需要注意的一点是连续调用两次 MD5_Update
相当于把两次的输入拼接后调用一次 MD5_Update
的结果:
写出注册机:
from hashlib import md5
name = b'pediy'
digest = md5(name + b'www.pediy.com').digest()
a2345 = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'
serial_number = ''
for b in digest:
serial_number += a2345[b % 32]
print(f'Serial Number('{name}')={serial_number[0:4]}-{serial_number[4:8]}-{serial_number[8:12]}-{serial_number[12:16]}')
自动分析
直接使用 findcrypt
插件, Ctrl + Alt + F
可以自动识别。