混淆器

在mov指令的图灵完备性被证明之后,就产生了一种使用mov指令代替其他各种指令的混淆机制,运算,跳转,函数调用都可以全部使用mov指令实现。

Githhub链接:https://github.com/xoreaxeaxeax/movfuscator 按照github安装之后,正常编译就行

解混淆器

Github链接:https://github.com/kirschju/demovfuscator

这个需要三个库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- libcapstone
sudo git clone https://github.com/aquynh/capstone.git
cd capstone/
make
sudo make install
- libz3
sudo git clone https://github.com/Z3Prover/z3.git
cd z3
python scripts/mk_make.py
cd build
make
sudo make install
- libkeystone
sudo git clone https://github.com/keystone-engine/keystone.git
cd keystone/
sudo mkdir build
cd build/
sudo ../make-share.sh
sudo make install
sudo ldconfig
- demovfuscator
git clone https://github.com/kirschju/demovfuscator.git
make
  • 思路mov混淆的解决方式:
    1. 简单的,会在某个寄存器中出现,全局搜索该寄存器后可以得出结果
    2. 或者可以使用动态调试出结果
    3. 难的,需要爆破
    4. 使用工具 https://github.com/kirschju/demovfuscator
    5. 找到字符串然后根据读写断点观察输入在内存的变化找到/猜测加密逻辑

例子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博客

CISCN2023 初赛 Writeup by or4nge (or4ngesec.github.io)

(121条消息) movfuscator混淆了解一下 CTF_mov混淆_坚强的女程序员的博客-CSDN博客