论坛首页 逆向工程技术区 阅读主题

[原创] 2025-10月Solar应急响应月赛WP!

283 浏览 0 回复
#1 楼主 2026-06-01 21:09:08
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

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号