DES

2017年SWPU的一道逆向题,先前很少接触逆向里的密码算法题,ida f5反编译的结果一开始也觉得无从下手不知道是什么算法,google搜索一些常数或者ida里的宏定义ROL4之类的,效果也很差。revers

之前ida装过一个find crypto,几次要么无法识别,要么识别不准,后来发现peid的一个插件Kcrypto ANALyzer很好用。


再回到DES算法,对称密码接触不多,下意识的以为对称密码的解密过程就是加密过程的逆运算,也找到了github上一个des算法(crypto++库的),整了半天没搞明白怎么解密。后来看了wp才知道,des有一个非常有用的性质,加密和解密使用相同的算法!DES加密和解密唯一的不同是密钥的次序相反。


import os

f = open("./CM300.exe","rb").read()

head = f[:0x1A0108]

key_tables = f[0x1A0108:0x1A0188]

tail = f[0x1A0188:]

limedi = []

for i in range(0, len(key_tables), 4):

limedi.append(key_tables[i:i+4])

#交换密钥

for i in range(0, 16, 2):

temp = limedi[i]

limedi[i] = limedi[32-2-i]

limedi[32-2-i] = temp

temp = limedi[i+1]

limedi[i+1] = limedi[32-1-i]

limedi[32-1-i] = temp

medi = ""

for i in limedi:

medi += i

f = open("./CM300decrypt.exe", "wb")

f.write(head)

f.write(medi)

f.write(tail)

f.close()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容