[原创]使用unicorn engin还原Armariris字符串混淆
孤挺花(Armariris) -- 由上海交通大学密码与计算机安全实验室维护的LLVM混淆框架 https://github.com/GoSSIP-SJTU/Armariris
编译Armariris
git clone git@github.com:gossip-sjtu/Armariris.git
编译
cd Armariris mkdir build cd build cmake ../ -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="ARM;X86;AArch64" make -j8
测试文件内容如下:
#include <stdio.h>
void fun(){
printf("test 3333\n");
}
int main(int argc, char *argv[]) {
printf("test 1111\n");
printf("test 2222\n");
fun();
return 0;
}
使用编译好的llvm编译这个测试的文件
clang -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -mllvm -sobf test.c -o test
使用isysroot指定sdk,然后使用-mllvm -sobf开启字符串混淆
Armariris是如何进行字符串混淆的
我们直接看使用ida反汇编出来的代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
printf(aRcur7777, argv, envp);
printf(&byte_100001036);
fun();
return 0;
}
可以看到有两个printf函数打印了一些数据出来,我们点第一个打印的字符串,双击aRcur7777跳转到
字符串定义位置,这个字符串在data段
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
