抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

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 函数读取的应该分别是 NameSerial 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 可以自动识别。




博客内容遵循 [署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)
本站总访问量为 访客数为
本站使用 Volantis 作为主题