混淆器
在mov指令的图灵完备性被证明之后,就产生了一种使用mov指令代替其他各种指令的混淆机制,运算,跳转,函数调用都可以全部使用mov指令实现。
Githhub链接:https://github.com/xoreaxeaxeax/movfuscator 按照github安装之后,正常编译就行
解混淆器
Github链接:https://github.com/kirschju/demovfuscator
这个需要三个库:
1 | - libcapstone |
- 思路mov混淆的解决方式:
- 简单的,会在某个寄存器中出现,全局搜索该寄存器后可以得出结果
- 或者可以使用动态调试出结果
- 难的,需要爆破
- 使用工具 https://github.com/kirschju/demovfuscator
- 找到字符串然后根据读写断点观察输入在内存的变化找到/猜测加密逻辑
例子ciscn 2023 moveAside
这道题mov混淆呢,当时没有做出来,现在看了一些师傅的题解,稍微复盘总结一
查找字符串
找到字符串向上翻阅
可以找到密文,这里我已经转成数组形式了
这里可以得到字符串长度是44
然后这里直接下断点调试的话是会触发异常的,可以看到这里调用了sigaction函数
IDA这个异常处理的过程我一直不是很了解,根据搜索字符串然后下断点调试再试试
这里又触发异常了,这里设置成这样好像就不会有提示了
然后这个一直按着F9调试一直等到所有的停住即可
然后一直没有反应,在密文那块下了一个读写断点
密文长度
跳不出来,,,我晕了。。。。算了还是太菜了。。。
用工具
这个破工具装了一下午,刚开始在ubuntu18上面,结果那个clang的版本不够,然后有在22上面装,结果编译那个库编译了几十分钟,然后我又make -j8,才搞好。
试试效果怎么样
好吧,结果惨不忍睹,不能运行,不能反编译,跟没用一样。。。大概也就这样,这玩意肯定工程上面用不上,只能对简单的程序进行一些操作,也只能在CTF这里玩完了,但不妨碍它是一个伟大的发明。
参考博客
(121条消息) movfuscator混淆_mov混淆_Cherest_San的博客-CSDN博客
CISCN 2023 初赛]moveAside_FeiJiNcFan的博客-CSDN博客