CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果

CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果

来源:https://buuoj.cn/

内容

附件:链接:https://pan.baidu.com/s/1juLLGgd1MSKeADO1uvAlXA?pwd=t7id 提取码:t7id

答案[email protected]

总体思路

进去以后发现分析失败了,原来是调用了call eax

全程逐步跟进,需要跳出循环的地方在循环外面按F4跳过

找到flag

详细步骤

  • 得到待执行的汇编指令

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第1张图片
  • 发现内部是一个smc,每个数据异或0x66

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第2张图片
  • 到下面断点,按F4执行

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第3张图片
  • 发现处理后的字符串and so it begins,以及执行指令

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第4张图片
  • 发现内部仍然是一个smc,每个数据异或dl(来自eax自增,是上一步骤的结果字符串and so it begins

  • 继续让其执行,得到一个字符串get ready to get nop',27h,'ed so damn hard in the paint

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第5张图片
  • 发现内部仍然是一个smc,每个数据异或0x476C4F62

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第6张图片
  • 得到几个push,最后的结果是omg is it almost over?!?nopasaurus

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第7张图片
    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第8张图片
  • 继续运行,发现仍然是一个smc,每个数据异或dl(来自eax自增,是上一步骤的结果字符串omg is it almost over?!?

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第9张图片
  • 同样的方法在出口出按f4让其运行完成,得到字符串[email protected]

  • 继续运行,发现几个push得到一个字符串 'waaaaaand i',27h,'m spent'

  • 继续运行,发现仍然是一个smc,每个数据异或dl(来自eax自增,是上一步骤的结果字符串 'waaaaaand i',27h,'m spent'

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第10张图片
  • 继续运行,发现此处是比较看何时出现字符0x33

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第11张图片
    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第12张图片
  • 继续运行,发现此处是找到字符串是FataExit
    -CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第13张图片

  • 继续运行,发现将 BrokenByte字符串入栈以后调用了edi,此时edi的值是kernel32_FatalAppExitA是由上一步寻找而来的。从而程序弹窗错误框,整个程序结束。

    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第14张图片
    • CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果_第15张图片
  • 至此,全程没有任何需要用户输入的地方,但是根据description.txt的提示,可以对比看到中间步骤得到了一个[email protected]和要求的flag格式一致,尝试提交,发现答案正确。

  • flag答案 [email protected]

其他文档

  • Python反汇编方法 Python的pyc字节码反编译反汇编相关知识

  • CTF逆向-常用的逆向工具 提取码:pnbt

  • B站教程中国某省队CTF集训(逆向工程部分)

    • 中国某省队CTF集训(逆向工程部分)(已授权)(一)
    • 基础加密方式例如 XXTEABase64换表
    • Python库 Z3 方程式、不定式等的 约束求解
    • 基础的假跳转花指令(脏字节)
    • 非自然程序流程
      • 扁平化程序控制流
      • OLLVM程序流程(虚拟机壳) 很难一般不考
      • ida里面按X键跟踪,寻找所有Tyw的引用(即类型是写入的),通常就是关键位置
    • 中国某省队CTF集训(逆向工程部分)(已授权)(二)
    • ollydb动调去壳,upx为例子
    • python的逆向和自定义虚拟指令
      • 使用pycdc 提取码:dorr 解密python编译的exe或者pyc
      • 逐条去解析用py字典手动实现的指令调用
      • C++编译的程序的逆向
    • 中国某省队CTF集训(逆向工程部分)(已授权)(三)
      • 简单模运算加密
      • base58 寻找一下特别大的数,这种数通常是算法的标识,或者ida7.7版本以上自带的find crypt插件ctrl+alt+f
      • 常见的关键位置是有新的内存分配的地方通常是关键地方,或者函数中间突然return的地方也是
      • 迷宫题 注意绘制出来就好
      • 动调题
        • 注意观察会执行的反调试分支,例如出现int 3,需要跳过去
  • 基本知识

    • 大小端序

更多CTF逆向题通用性做法和常用工具下载参考该博文内容:CTF逆向Reverse题的玩法

相关逆向CTF题

  • Python

    • [CTF逆向-羊城杯 2020]Bytecode-WP-Python字节码反编译
  • 远程调试汇编

    • CTF逆向-[watevrCTF 2019]Timeout-WP-远程调试和修改程序当前运行位置RIP
  • 流程控制

    • CTF逆向-Dig the way Interesting Pointer-通过栈溢出方式覆盖变量以达到修改执行流程的目的
  • 逆向思维

    • [CTF逆向-NPUCTF2020]Baby Obfuscation-逆向思维编写脚本以及函数含义的逻辑理解
    • [CTF逆向-MRCTF2020]EasyCpp - C++类型的逆向通用操作方法
    • [CTF逆向-SUCTF2018]babyre-WP-cpp简单迭代并按表输出值的爆破
  • 安卓

    • [CTF逆向-网鼎杯 2020 青龙组]bang-安卓脱壳逆向:frida-dexdump导出得到源码
  • 虚拟机

    • [CTF逆向-GWCTF 2019]babyvm-WP-虚机模拟流程反向编码和z3约束求解器解方程工具的使用
    • [CTF逆向-WMCTF2020]easy_re-WP_虚机-perl加载器截取
  • 反调试和SMC

    • [CTF逆向-SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC
  • 加密

    • [CTF逆向-FlareOn2]very_success-WP_rol循环位移加密
    • base64换表
      • [CTF逆向-CISCN2018]2ex-WP_mips-32架构以及base64换表
      • [CTF逆向-De1CTF2019]Re_Sign-简单脱壳和base64换表编码的深度算法跟踪
  • 花指令

    • [CTF逆向-SCTF2019]babyre-WP_简单去花指令和流程识别
  • web逆向

    • CTF逆向-[FlareOn1]Javascrap-web逆向中发现的php后门的逐步解析方式,得到后门的密码
  • 流程混淆的扁平化处理

    • [CTF逆向-RoarCTF2019]polyre-WP_控制流扁平化去混淆idcpy去指令

    • CTF逆向-[SUCTF2019]hardcpp-使用优化过的deflat.py处理混淆的控制流并将cpp的lambda解析得到实际处理逻辑

你可能感兴趣的:(CTF-逆向,安全)