menu 牢记自己是菜
无所事事篇---控制流平坦化的实现(内附exe文件与构思源码,各位师傅来玩玩呗)
5090 浏览 | 2020-08-13 | 阅读时间: 约 2 分钟 | 分类: 计算机 | 标签:
请注意,本文编写于 1345 天前,最后修改于 1345 天前,其中某些信息可能已经过时。

0x1 前言

这个的起因还是因为前天吃坏了肚子,一整天都没有离开我的床。直到晚上稍微好点了的时候才爬起来,但是浑身虚弱有啥都不想学,所以就去师傅们的博客逛了逛,论坛逛了逛。猛然间发现了一篇关于控制流平坦化的文章,自己想了想,发现玩了ctf这么就,好像就没有了解过如何出一道题目,并且之前群里大佬好像对互相出题蛮感兴趣的,于是我就想动手写一下。然后发现还挺难的,不光要考虑是否过于变态,还要考虑是否会存在多解。并且发现自己c++已经忘完了(不要担心,题目是c语言,我先写成了C++而已)。所以,如果师傅看见了这篇博客,并且有闲暇时间的话,请帮我测评一下这道题目。
这里是exe
这个是源文件,逻辑很简单,一看就懂

0x2 本题涉及的考点

  1. 一个简单的加密逻辑
  2. 对主要加密函数进行了控制流平坦化
    题目主要目的,还原控制流,完成逆向逻辑即可。可能会存在各种漏洞,请务必反馈给我(毕竟C++都忘记了)。

0x3 难度评测

本身一开始的想法是写一个VM的,但是又想加入控制流平坦化的东西,所以最后抛弃了前者。因为作为以个防守方,还是挺难控制题目难度的。但是这里还是有部分选项可以供师傅挑选的,要是题目过于简单,可挑选以下选项。

  • 加入虚拟机(VM),我会自己写一套指令集,内存,栈与寄存器,对整个逻辑重新编码或者部分逻辑编码。
  • 对主体逻辑加入SMC,实现对代码的动态加密。
  • 对字符串进行处理,使其主要逻辑字符串被隐藏,启动程序自动生成。
  • 加入反动态调试。
  • 将控制流平坦化时产生的标志位进行常量展开。

0x4 后记

其实这个程序主要还是动手自己实践一下这玩意的原理,在实践的过程中,发现这东西感觉好像并不太能与VM结合出题,感觉有一点考点重复的味道。并且网上基本上都是教大家怎么去除控制流平坦化的,至于怎么实现真的有点少。看一下这玩意的效果,其实还是蛮壮观的。



这里是参考链接。

发表评论

email
web

全部评论 (共 4 条评论)

    hanxu
    2020-08-14 01:19
    睡觉前看到了岂可修,占个坑,没用控制流平坦化哎,源码还没看,flag解出来的那句话是认真的吗???
      2020-08-14 21:08
      @hanxu啊这知道是咋回事了,只能说IDA的F5有点厉害,我试试看有没有别的写法,可以让IDA生成伪代码的时候更困难一点。或者说把全部代码全部给他换了。总之谢谢师傅抽出宝贵时间来看题目啦! ୧(๑•̀⌄•́๑)૭
      hanxu
      2020-08-14 01:21
      @hanxu胡言秽语,注意身体
        2020-08-14 20:58
        @hanxu是嘛 (☆ω☆) ,我看IDA感觉我好像已经把程序压扁了嘛。做题的时候没有用到控制流平坦化嘛