Code Monkey home page Code Monkey logo

gossip-sjtu / armariris Goto Github PK

View Code? Open in Web Editor NEW
1.2K 45.0 264.0 51.13 MB

孤挺花(Armariris) -- 由上海交通大学密码与计算机安全实验室维护的LLVM混淆框架

License: Apache License 2.0

CMake 0.26% Shell 0.04% Go 0.07% C++ 53.45% OCaml 0.15% Python 0.62% C 7.76% Objective-C 2.64% Makefile 0.45% LLVM 26.14% Assembly 6.87% Roff 0.01% Perl 0.06% Emacs Lisp 0.01% Batchfile 0.01% Vim Script 0.01% PHP 0.01% HTML 0.64% Objective-C++ 0.78% MATLAB 0.03%

armariris's Introduction

Armariris

孤挺花(Armariris) -- 由上海交通大学密码与计算机安全实验室维护的LLVM混淆框架

中文

孤挺花(Armariris): 基于LLVM的支持多平台多语言的混淆器

本项目名取自细音启小说<黄昏色的咏使>以及<冰洁镜界的伊甸>中的人物孤挺花. 她即便无人理解依然守护着姐姐与世界.

Armariris是作者自创语言Selahpheno中孤挺花的意思.

目前开放功能包括:

  • 字符串加密. sobf
  • 控制流扁平化 fla
  • 指令替换 sub

安装

mkdir obf
cd obf
clone [email protected]:gossip-sjtu/Armariris.git
cmake -DCMAKE_BUILD_TYPE:String=Release ./Armariris
make -j4

用法

编译时候添加选项开启字符串加密

-mllvm -sobf

开启控制流扁平化

-mllvm -fla

开启指令替换

-mllvm -sub

指定随机数生成器种子

-mllvm -seed=0xdeadbeaf

English

Armariris: an obfuscator based on LLVM project for multiple languages and platforms.

Currently support:

  • string obfuscation
  • control flow flattening
  • instruction substitutions

Armariris

Armariris is the alias of Amaryllis in conlang Selahpheno in sazaneK's light novel. Amaryllis is a character in light novel <黄昏色の詠使い> and <氷結鏡界のエデン> written by 細音啓(sazaneK). Although nobody unserstands her, she still guards her sister and the world persistently.

Install

mkdir obf
cd obf
clone [email protected]:gossip-sjtu/Armariris.git
cmake -DCMAKE_BUILD_TYPE:String=Release ./Armariris
make -j4

Usage

Add option for opening string obfuscation when compiling.

-mllvm -sobf

Add option for opening control flow flattening when compiling.

-mllvm -fla

Add option for opening instruction substitutions when compiling.

-mllvm -sub

Add option for setting random seed.

-mllvm -seed=0xdeadbeaf

armariris's People

Contributors

elinesterov avatar flysoar avatar gossip-sjtu avatar itcbx avatar oubotong avatar romangol avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

armariris's Issues

Obj-C编译的时候,还是会出问题

以下是编译器错误:
Assertion failed: (S1->getType() == S2->getType() && "Cannot create binary operator with two operands of differing type!"), function Create, file /Users/renqiming/Documents/iOS/Armariris/lib/IR/Instructions.cpp, line 2149.

这里是定位的错误位置:
StringObfuscation.cpp, line 180.

Assert fail in case of WCHAR

Target: x86_64-pc-windows-msvc

Assert failed at below line in case of WCHAR
BinaryOperator* int8_dec = BinaryOperator::Create(Instruction::Xor, int8_20, const_key, "xor", label_for_body);

int8_20 has a type with 16 bits and const_key has 8.
Changing const_key to 16 bits in case of wchar will fix this in my try, but you may have better solution.

和C++混编失败

项目中包含C++代码,编译没法通过,各种错误,不支持吗?

没有arm-linux-androideabi-ollvm-g+

make: /home/android/sda4/android-ndk-r14b/toolchains/arm-linux-androideabi-ollvm-armariris/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ollvm-g++: Command not found
我把最新armariris编译好了

Fork from llvm base next time

Why didn't you just fork from the llvm base instead of checking in whatever source code happened to be on your hard drive at the time, "software in security progress team"? Nobody can trust this source code base unless you include all the changes that have happened since the original llvm repository.

这个不是从原来的o-llvm拷贝过来的?

原来就支持三种混淆,你这加上字符串混淆也三种,还有一个混淆呢?
这边能不能提供一下如何配置新版本ndk的方法,以前配置的ndkr10e的有点老了 要更新了

抖音似乎抄的是你们的实现,而且没有按照Apache许可证做任何公开声明

82F4289C-86FB-417C-BBF1-2D0718CB54E0
火山小视频相关字符串,可以某种程度上证明确实来自字节跳动
DA9EE6C5-51BE-46D1-9DF0-139C8F9C1964

样本链接: https://cdn.discordapp.com/attachments/566987266313158656/583070306449489937/libcms.so

出于某种神必原因安卓版抄的是你们,iOS版抄的是我的。奇妙深刻的思维能力急需大脑升级,,,

所以问题的关键来了,他(们)是付钱给你们买下了使用授权还是单纯的剽窃

判断是否为字符串的问题

在StringObfuscation.cpp中的runOnModule里,判断是否为字符串用gv->getName().str().find(".str."),会导致第一个@.str识别不出来,同时char p[] = "world"这种形式的字符串生成的名称是@.main.p,导致也识别不出来,我将判断的方式改为isa(gv->getInitializer())可以正常识别,不过这样子也有问题,这仅限于程序中只有char*字符串才能正常运行,如果是Objective-C中的NSString字符串,使用该方法混淆后,运行会出现bus error错误。
不知有没有其他方法能对NSString的字符串进行加密。

ObjC String的过滤是错误的?

不只是objc__methodname, classname等私心认为同样不应该被加密。
另外这样的ctor加密方式在程序的入口点,dyld执行完ctor之后我个人理解就应该全部解密了?此时dump拿到的就是解密的字符串。基于def-use chain的处理可能会是更好的选择 . 我个人对此的一些理解放在了 http://mayuyu.io/2017/12/26/StringEncryption/

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.