CTF逆向-[FlareOn1]Shellolololol-栈上执行,多层smc的动调得到最终结果
来源:https://buuoj.cn/
内容:
附件:链接:https://pan.baidu.com/s/1juLLGgd1MSKeADO1uvAlXA?pwd=t7id 提取码:t7id
答案:such.5h311010101@flare-on.com
总体思路
进去以后发现分析失败了,原来是调用了
call eax
全程逐步跟进,需要跳出循环的地方在循环外面按F4跳过
找到flag
详细步骤
-
得到待执行的汇编指令
-
发现内部是一个smc,每个数据异或
0x66
-
到下面断点,按F4执行
-
发现处理后的字符串
and so it begins
,以及执行指令 -
发现内部仍然是一个smc,每个数据异或
dl
(来自eax
自增,是上一步骤的结果字符串and so it begins
) -
继续让其执行,得到一个字符串
get ready to get nop',27h,'ed so damn hard in the paint
-
发现内部仍然是一个smc,每个数据异或
0x476C4F62
-
得到几个push,最后的结果是
omg is it almost over?!?
,nopasaurus
-
继续运行,发现仍然是一个smc,每个数据异或
dl
(来自eax
自增,是上一步骤的结果字符串omg is it almost over?!?
) -
同样的方法在出口出按f4让其运行完成,得到字符串
such.5h311010101@flare-on.com
-
继续运行,发现几个push得到一个字符串
'waaaaaand i',27h,'m spent'
-
继续运行,发现仍然是一个smc,每个数据异或
dl
(来自eax
自增,是上一步骤的结果字符串'waaaaaand i',27h,'m spent'
) -
继续运行,发现此处是比较看何时出现字符
0x33
-
继续运行,发现此处是找到字符串是
Fata
和Exit
的
- -
继续运行,发现将
BrokenByte
字符串入栈以后调用了edi
,此时edi
的值是kernel32_FatalAppExitA
是由上一步寻找而来的。从而程序弹窗错误框,整个程序结束。 -
至此,全程没有任何需要用户输入的地方,但是根据
description.txt
的提示,可以对比看到中间步骤得到了一个such.5h311010101@flare-on.com
和要求的flag格式一致,尝试提交,发现答案正确。 -
flag答案
such.5h311010101@flare-on.com
其他文档
-
CTF逆向-常用的逆向工具 提取码:pnbt
-
B站教程中国某省队CTF集训(逆向工程部分)
- 中国某省队CTF集训(逆向工程部分)(已授权)(一)
- 基础加密方式例如
XXTEA
、Base64
换表 - Python库
Z3
方程式、不定式等的约束求解
- 基础的假跳转花指令(脏字节)
- 非自然程序流程
- 扁平化程序控制流
- OLLVM程序流程(虚拟机壳) 很难一般不考
- ida里面按
X
键跟踪,寻找所有Ty
为w
的引用(即类型是写入的),通常就是关键位置
- 中国某省队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
-
远程调试汇编
-
流程控制
-
逆向思维
-
安卓
-
虚拟机
-
反调试和SMC
-
加密
- [CTF逆向-FlareOn2]very_success-WP_rol循环位移加密
- base64换表
-
花指令
-
web逆向
-
流程混淆的扁平化处理