首页
社区
课程
招聘
[原创] 签到题 拜师学艺题解
2021-5-11 21:01 2014

[原创] 签到题 拜师学艺题解

2021-5-11 21:01
2014

下载题目后, 使用ida打开KCTF_CrackMe2021.exe, 通过g _main跳转到主函数位置, 发现ida没有将其识别为函数, 且从中间开始是一段乱码.

如上图所示, 在乱码前调用了sub_401470:

是原地异或解密的函数, 密钥是int类型占4字节, 解密也是逐4字节进行的. 下一步分析调用该函数时使用的参数. 根据调用规范, 调用该函数前参数应该依次存储在ecx, edx, 之后在栈上, 分析得loc_401266到loc_40145a间是要解密的数据, key是1.

 

​ 写出解密python脚本:

1
2
3
4
5
6
7
8
9
10
11
pe = bytearray(open("KCTF_CrackMe2021.exe", "rb").read())
offset = pe.find(b"\x8C\x85\xF4\xFE\xFE\xFF\x89\x85\xE5\xFD")
size = 0x40145A - 0x401266
enced = pe[offset:offset+size]
 
for i in range(125):
    enced[i*4] = enced[i*4] ^ 1
 
pefixed = pe[:offset] + enced + pe[offset+size:]
 
open("KCTF_CrackMe2021_fixed.exe", "wb").write(pefixed)

然后使用ida打开KCTF_CrackMe2021_fixed.exe, 可以看到完整的函数

 

 

看到极具base64特征的字符串以及点进sub_401050也很像base64编码相关的函数, 将ZmxhZ3trYW54dWV9使用base64解码便可得到flag{kanxue}.


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2021-5-11 21:47 被tacesrever编辑 ,原因: 第一段错误标记为代码段
收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回