0x00. 目录
单向散列算法:
对称加密算法:
0X01. MD5
MD5(Message Digest Algorithm)消息摘要算法对输入的任意长度的消息进行运算,产生一个128位的消息摘要。
MD5的特征是会出现下图中 A,B,C,D 这四个常量。
这里我们直接用《加密与解密(第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插件能帮助我们快速找到这些常量,不过这里还是着重讲手动分析的方法。
0x02. SHA
安全散列算法(Secure Hash Algorithm,SHA)包括SHA-1、SHA-256、SHA-384和SHA-512,分别产生160位、256位、384位和512位的散列值。
类似于MD5,SHA算法使用了一系列的常数:
还是用随书文件SHA1KeyGenMe.exe来分析。
还是先通过导入表定位关键代码:
发现sub_401000函数中出现了SHA1算法用到的常量:
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
了,文档里有答案详解,以及其他一些大厂面试题目**
[外链图片转存中…(img-7Ty0ohwi-1714810636844)]
[外链图片转存中…(img-6LEuL4PX-1714810636844)]