0x00 查壳
日常丢进查壳查位数(一般跑一下比较好 本机一开始跑不了就没跑了)
0x01 简单的流程
丢进ida32查看
直接查看主函数看
大概浏览程序是输入两次秘钥然后就bye了
0x02 第一次输入分析
分析第一次输入
进入40100A函数查看 查看官方文档
第二个参数是所对应的加密方式
看别人博客直接判断出8004是sha1,有点搞不懂是怎么看出来的
另一个依据是这串字符按字节分长度是20,而sha1算法得出sha1长度值长度是160位也就是20个字节
既然知道是sha1算法就可以进行爆破
import hashlib
flag = "@DBApp"
for i in range(100000,1000000):
s = str(i) + flag
x = hashlib.sha1(s.encode()) #创建一个sha1实例 将s加密
c = x.hexdigest() #sha1处理过的字符串
if "6e32d094341" in c: #hashlib解密后是小写
print(c)
print(str(i)+flag)
得到第一次的秘钥 123321
0x03 第二次输入分析
第二次的秘钥两个关键函数
先分析401019 又是一个加密
可以继续看winAPI 8003是代表哪里 但我没找到
所以可以根据这是16个字节 而md5值也是 所以这应该是md5加密
但md5爆不出来!?继续看下面那个函数
查看40100F
查看401005
有个AAA资源用一个工具可以查看
ResourceHacker
附上下载链接:爱盘 - 最新的在线破解工具包
确实有个aaa的资源
现在分析一下
1.MD5加密没法爆出第二次秘钥
2.有个aaa的资源和第二次秘钥异或然后创建一个RTF文件
3.那么就可以通过aaa的资源和RTF的头文件就可以得到第二次秘钥
随便打开一个RTF文件 取首六位即可 因为秘钥长度为6
rtf1 = "{\\rtf1" #记得转义
rtf2 = [0x05,0x7D,0x41,0x15,0x26,0x01]
flag = ""
for i in range(0,len(rtf2)):
x = ord(rtf1[i]) ^ rtf2[i] #直接异或不行 之前这边经常报错 注意数据转换
flag += chr(x)
print(flag)
爆出第二次秘钥
0x04 GetFlag!
拿到win7上跑
然后会创建一个文件
GetFlag!