首页
社区
课程
招聘
[原创]看雪CTF 2019Q3 第十题 传家之宝 WP
发表于: 2019-9-26 00:53 6265

[原创]看雪CTF 2019Q3 第十题 传家之宝 WP

xym 活跃值
4
2019-9-26 00:53
6265

运行之后输入key然后就是程序长时间的卡死,然后过了很久才告诉我结果。

本来第一反应是里面用了高强度的虚拟机,结果进去每一步都挺清楚的,没有加密或者混淆的地方。唯二需要注意的地方就是代码的空间量很大,而且基本都是rwx权限。

然后跟踪没多久就jmp eax跳转了,然后。。。除了没有输入,基本就是一个循环。。

整个流程不调用api,数据/代码在空间内来回跳,实在不好下断点。

基本猜测作者是写了一个自解密函数,然后又写了个加密变形函数把这个函数来回加密变形,最后造了个pe结构套上去。

只好注入一个dll接管exe的执行流程,把每一步的call eax就hook下来,接管跑完之后发现居然有2880次解密操作。

然后再分析数据的变化过程,本来以为只有最后一层的代码有用,结果,跑完之后发现所谓的核心代码居然不完整。

回头发现原来每一层里其实都有或多或少的几句汇编代码,虽然不一定有完整功能,但是可以和其他层的连上。

那就修改dll开始抠代码,中间加载了od的反汇编库来计算指令长度,然后去掉中间的各种跳转指令,最后把完整的函数的二进制字节码保存成了文件,居然达到了37k之大。

本来以为这个题目最难的地方已经过去了,没想到对于不懂密码的我来说,噩梦刚刚开始。

ida打开这个文件就卡死了,反编译成解密函数更是用了半小时,好在用vs编译起来就快多了,而且运行结果也完全正确。

但是刚看了函数的前5行就看不懂了,看了前10行就蒙了,看了前20行直接就想摔键盘了。


*(p_ebp - 1) = p_esi[439] ^ p_esi[423];

*(p_ebp - 2) = p_esi[442] ^ p_esi[426];

v2 = p_esi[421] ^ p_esi[437];

v3 = p_esi[441] ^ p_esi[425];

v4 = (unsigned__int8)p_esi[433];

*(p_ebp - 3) = p_esi[404] ^ p_esi[(unsigned__int8)p_esi[420] ^ (unsigned__int8)p_esi[436] ^ 9];

v5 = p_esi[405] ^ p_esi[(unsigned__int8)p_esi[417] ^ v4 ^ 9];

v6 = (unsigned__int8)p_esi[430];


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-9-26 00:55 被xym编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 10845
活跃值: (1054)
能力值: (RANK:190 )
在线值:
发帖
回帖
粉丝
2
技艺精湛
2019-9-26 12:13
0
游客
登录 | 注册 方可回帖
返回
//