-
-
[原创] 签到题 拜师学艺题解
-
发表于: 2021-5-11 21:01 2612
-
下载题目后, 使用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}.
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2021-5-11 21:47
被tacesrever编辑
,原因: 第一段错误标记为代码段
赞赏
他的文章
看原图
赞赏
雪币:
留言: