Giter Club home page Giter Club logo

ollvm-9.0.1's Introduction

O-LLVM 9.0.1

适配 NDK-21.3.6528147(ndk-r21d)

编译命令

cd OLLVM-9.0.1
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_CREATE_XCODE_TOOLCHAIN=ON ../
make -j8 #8是你的CPU线程数量 比如8核16线程可以写 -j16 

整合到NDK

  • 打开路径 OLLVM-9.0.1/build/bin/ 找到 clang-9 clang clang-format clang++ 四个文件
  • 复制替换文件到ndk里面去 /Users/用户名/Library/Android/sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/bin/
  • 最后一步复制对应的头文件到NDK目录下(不然Android项目编译会报错找不到stdarg等头文件错误),进入刚刚编译的build目录OLLVM-9.0.1/build/lib/clang/9.0.1/include/,然后复制如下文件stdarg.hstddef.h__stddef_max_align_t.hfloat.hstdbool.h/Users/用户名/Library/Android/sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include 文件夹下就彻底大功告成了。
  • 注意上面的路径是macOS系统的 系统不一样 安装路径和darwin-x86_64的名字也会不同

注意事项

  • 项目在macOS 10.15.7 xcode 12.3 的环境上测试成功 Linux系统未测试理论通用 Windows系统有问题 需要修改代码才能用(手上没有Windows系统所以未实践)
  • Windows需要修改的代码随机数问题头文件问题
  • aarch64(包括MacBook M1芯片) 上需要修改的问题 修改头文件
  • fla 如果遇到奇怪问题可以看看这个代码修改内容

Android Cmake 食用方式

android {
    ndkVersion = "21.3.6528147"
    defaultConfig {
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++14", "-frtti", "-fexceptions", "-DANDROID_TOOLCHAIN=clang", "-ffunction-sections", "-fdata-sections",
                        "-mllvm", "-sub", "-mllvm", "-sub_loop=3",
                        "-mllvm", "-fla",
                        "-mllvm", "-split", "-mllvm", "-split_num=3",
                        "-mllvm", "-bcf", "-mllvm", "-bcf_loop=3", "-mllvm", "-bcf_prob=40",
                        "-mllvm", "-sobf", "-mllvm", "-aesSeed=0xada46ab5da824b96a18409c49dc91dc3"

                arguments "-DANDROID_TOOLCHAIN=clang",
                        "-DANDROID_STL=c++_shared",
                        "-DANDROID_CPP_FEATURES=rtti exceptions"
            }
            ndk {
                abiFilters 'armeabi-v7a', 'arm64-v8a', "x86", "x86_64"
            }
        }
    }
}
  • ndk-build 的用法就不用我特意说明了吧 毕竟那群混吃等死懒得研究新事物的搬砖工写的文章都是基于这玩意的(也可能是屎山 迁移不了cmake)。 (手动狗头
  • sub_loopsplit_numbcf_loop这些是弄几遍 bcf_prob是这代码每个基本块有40%的概率进行BCF混淆(0-100) 命令具体是干什么的自己搜索引擎去了解 懒得挨个写了
  • "-std=c++14", "-frtti", "-fexceptions", "-DANDROID_TOOLCHAIN=clang", "-ffunction-sections", "-fdata-sections" 这些和ollvm无太大关系 什么意思自己查

补充知识

  • Android 中的ABI armeabi-v7ax86 是32位的,arm64-v8a是64位的, x86_64这个是两开花的? arm开头的是arm架构CPU用的的 x86 x86_64是台式机英特尔、AMD CPU用的(一般都是模拟器) 。远古时代的armeabi已经淘汰了,ndk不再支持。理论上只编译个armeabi-v7a就能通杀arm,再加个x86通杀模拟器吧

更多玩法

  • git patch 这是个非常方便的东西 可以通过他来实现一键移植ollvm(合并代码补丁) 自己去下载llvm源码+clang源码(解压复制clang-xxx文件夹并改名成clangllvmtools里面) 然后回到llvm根目录 使用git命令 吧咱项目里面的add_o-llvm(fixed).patch文件打进你自己下载的llvm项目里面去就一键完成移植啦~

补充说明

  • 如需借鉴参考这个项目来写博客写文章请直接使用本项目的GitHub链接,不要克隆后用自己的地址分发,为了避免有人提交修复问题的时候弄得到处都是,所以需要统一在这个项目维护方便大家的使用,谢谢合作。
  • 以上内容都是个人理解 如有问题请提issues

ollvm-9.0.1's People

Contributors

hanliuxin5 avatar o2e 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

ollvm-9.0.1's Issues

Unknown command line argument '-sub'

      clang (LLVM option parsing): Unknown command line argument '-sub'.  Try: 'clang (LLVM option parsing) --help'
      clang (LLVM option parsing): Did you mean '  -h'?
      clang (LLVM option parsing): Unknown command line argument '-sub_loop=3'.  Try: 'clang (LLVM option parsing) --help'
      clang (LLVM option parsing): Did you mean '  --regalloc=3'?
      clang (LLVM option parsing): Unknown command line argument '-fla'.  Try: 'clang (LLVM option parsing) --help'
      clang (LLVM option parsing): Did you mean '  -h'?
      clang (LLVM option parsing): Unknown command line argument '-split'.  Try: 'clang (LLVM option parsing) --help'
      clang (LLVM option parsing): Did you mean '  --stats'?
      clang (LLVM option parsing): Unknown command line argument '-split_num=3'.  Try: 'clang (LLVM option parsing) --help'
      clang (LLVM option parsing): Did you mean '  --stats=3'?
      clang (LLVM option parsing): Unknown command line argument '-bcf'.  Try: 'clang (LLVM option parsing) --help'
      clang (LLVM option parsing): Did you mean '  -h'?
      clang (LLVM option parsing): Unknown command line argument '-bcf_loop=3'.  Try: 'clang (LLVM option parsing) --help'
      clang (LLVM option parsing): Did you mean '  --icp-lto=3'?
      clang (LLVM option parsing): Unknown command line argument '-bcf_prob=40'.  Try: 'clang (LLVM option parsing) --help'
      clang (LLVM option parsing): Did you mean '  --icp-lto=40'?
      clang (LLVM option parsing): Unknown command line argument '-sobf'.  Try: 'clang (LLVM option parsing) --help'

大佬 为何我编译混淆会出这个错误。去掉后能正常编译

ollvm 12

Can you update ollvm to 12? I need to be able to use ollvm on NDK 23 witch support flag c++20

集成到ndk中,编译卡死的问题

环境:
Ubuntu 18.04.6 LTS
cmake : 3.10.2
ndk : 21.1.6352462
ollvm : obfuscator base on llvm-9.0.1 (https://github.com/heroims/obfuscator 2dec365146e909f6ca45df7c23603d489f0816dd)

编译完ollvm,照你的方法替换文件后,使用Android Studio编译我的项目,一直卡在 buildCMakeRelWithDebInfo,几十分钟都过不去。

我在项目中试过单独给函数加混淆和全部混淆都会卡死在 buildCMakeRelWithDebInfo ,不知道原因

# 单独给函数加标签
__attribute__((annotate(("sub"))))

# 全部混淆
externalNativeBuild {
    cmake {
        cppFlags "-std=c++11 -mllvm -sub -mllvm -bcf -mllvm -fla -mllvm -sobf -mllvm -seed=0x11223344556677889900aabbccddeeff"
    }
}

有跟我一样情况的吗?

大佬 为啥我使用 c++ 标准的头文件就会出现报错

`clang++: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 9.0.1
Target: aarch64-none-linux-android24
Thread model: posix
InstalledDir: D:\dev\sdk\ndk\2136521.1\TOOLCH1\llvm\prebuilt\WINDOW~1\bin
clang++: note: diagnostic msg: PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script.
clang++: note: diagnostic msg:


PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: C:\Users\ADMINI1\AppData\Local\Temp\web-df9c37.cpp
clang++: note: diagnostic msg: C:\Users\ADMINI
1\AppData\Local\Temp\web-df9c37.sh
clang++: note: diagnostic msg:


`
image

错误信息中提到的文件:
web-7a6283.zip

编译报错:fatal error: 'stdbool.h' file not found

文件复制进ndk目录下之后编译会报stdbool.h找不到
~/Library/Android/sdk/ndk/21.3.6528147/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/c++/v1/stdbool.h:28:15: fatal error: 'stdbool.h' file not found

大佬,有没有MAC NDK 18.1.5063045 版本的 OLLVM?

我从各个版本上去编译都是失败,估计是GCC版本太高了,而且有些不兼容。主要是编译 7.0 的ollvm 版本。

https://github.com/amimo/goron.git
https://github.com/heroims/obfuscator

想问下是否有7.0的版本,直接下载使用。
感谢各位大佬!

Mac下编译遇到如下错误

-- Performing Test SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG
-- Performing Test SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG - Success
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 6:
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 8:
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 28:
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 29:
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 40:
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 42:
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 54:
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 65:
: command not founddevelop/Android/OLLVM-9.0.1/cmake/config.guess: line 68:
'Users/cys/develop/Android/OLLVM-9.0.1/cmake/config.guess: line 71: syntax error near unexpected token in 'Users/cys/develop/Android/OLLVM-9.0.1/cmake/config.guess: line 71: case $1 in
CMake Error at cmake/modules/GetHostTriple.cmake:27 (message):
Failed to execute
/Users/cys/develop/Android/OLLVM-9.0.1/cmake/config.guess
Call Stack (most recent call first):
cmake/config-ix.cmake:386 (get_host_triple)
CMakeLists.txt:618 (include)

-- Configuring incomplete, errors occurred!
See also "/Users/cys/develop/Android/OLLVM-9.0.1/build/CMakeFiles/CMakeOutput.log".
See also "/Users/cys/develop/Android/OLLVM-9.0.1/build/CMakeFiles/CMakeError.log".

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.