DASCTFxCBCTF2022九月挑战赛Re赛后复现
0x00 前言
花指令
花指令又称脏字节,英文为”junkcode”,顾名思义,即在程序中加入的一些垃圾指令,其目的是在不妨碍原有程序执行的前提下,阻碍程序反编译,增加静态分析难度,隐匿不想被逆向分析的代码块,混淆代码,绕过特征识别。
花指令总结_Captain_RB的博客-CSDN博客_花指令
C++异常处理
C++异常处理源码与安全性分析_ashimida@的博客-CSDN博客_eh_frame段
try-catch
如果在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了该异常,则这个异常就可以被try语句块后的某个catch语句所捕获并处理,捕获和处理的条件是被抛弃的异常的类型与catch语句的异常类型相匹配。
1 | try |
0x01 landing
查壳 64位无壳PE文件
IDA反编译一下主函数
找到关键函数func1
分析一下可知func1函数给出了一段base64加密的密文
解出来是一个假的flag
1 | import base64 |
再分析一下func1函数,定位到func2函数
1 | void __fastcall __noreturn func2(char *a1) |
可以看到有个_cxa_throw 抛出异常
顺着调用链寻找catch块 发现在main函数里
在主函数中jmp一下得到真正的验证段
分析一下,定位到nothing函数
1 | void _fastcall nothing(char *a1,const char *a2) |
有一段花指令
手动清除一下 将花指令设置为nop(0x90)或用快捷键D将其设置为数据类型
然后就可以看到真正的加密函数
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 M1nG's BLOG!