1.10月月赛WP
Brainiac
题目文件结构:
Brainiac.exe 程序文件
flag_enc.txt 加密的flag文件
分析:
die结果,x64程序.
运行提示输入参数.
主函数就是一个普通的命令行加密器.关键点在回调里面.
回调内容也不多,但是很关键.表面上是看不出什么的.
但是能注意到,这里有个0是红色高亮的,说明要注意.这其实就是重定位会覆盖的地方,ida十分贴心地标注了.但是没见过的一看可能会不理解.还有下面那些复杂的计算,由于rax为0,ida自动优化了这些计算.所以在f5伪码中看上去,这里的传参就是0x400.这样的优化点有两处.复杂的计算只是一个选择器的代码,不必过多注意.动调起来,注意下这里的变化就真相大白了.
看起来没有更多信息了,开始动调,断点可以直接下在回调里面.
设置好传入的命令行参数.
发生异常,忽略即可.
断下来可以发现,0已经变成了一个64位地址.
现在按f5,得到的就是正确结果了.
这里还有一处障眼法.既然有重定位,那么为什么没有.reloc段呢?
其实只要数据目录的重定位表地址指向了正确的数据(不在文件头中),而且程序开启了动态基址,且未设置去除重定位,就一样能够解析重定位表.
第一处可以看到,直接传入了程序基址,也就说明是修改了文件头的保护属性,第二处将基址先转成数值再加2,则开始执行的地址位于文件头后面2字节.根据题目名字Brainiac,Brain=脑=文件头中的内容,所以查看文件头偏移地址0x2处.
发现该位置是jmp指令.为了降低难度,直接按p即可解析.
cfg大致是这样,加了几条跳转,不影响f5分析.
f5可以得到关键算法.
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-288953.htm
[原创] 2025-10月Solar应急响应月赛WP!
283 浏览
0 回复
暂无回复,快来抢沙发吧!