GithubHelp home page GithubHelp logo

obfuscator-llvm's People

Contributors

eskarn avatar not-matthias avatar patriceblin avatar r1kk3r avatar xelzmm 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

obfuscator-llvm's Issues

Failed to build in msys2 mingw-clang toolchain

enviroment, use the https://github.com/eshard/obfuscator-llvm/tree/fix-build-llvm-15-16 version

clang --version
clang version 15.0.5
Target: x86_64-w64-windows-gnu
Thread model: posix
InstalledDir: D:/msys2/clang64/bin

Failed in last link stager.

[8/8] Linking CXX shared library libLLVMObfuscator.dll
FAILED: libLLVMObfuscator.dll libLLVMObfuscator.dll.a
cmd.exe /C "cd . && D:\msys2\clang64\bin\c++.exe -Wall -Wextra -Wno-unused-parameter   -shared -o libLLVMObfuscator.dll -Wl,--out-implib,libLLVMObfuscator.dll.a -Wl,--major-image-version,0,--minor-image-version,0 CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.obj CMakeFiles/LLVMObfuscator.dir/utils/Utils.cpp.obj CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.obj CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.obj CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.obj CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.obj  D:/msys2/clang64/lib/libLLVMCore.a  D:/msys2/clang64/lib/libLLVMSupport.a  D:/msys2/clang64/lib/libLLVMBinaryFormat.a  D:/msys2/clang64/lib/libLLVMRemarks.a  D:/msys2/clang64/lib/libLLVMBitstreamReader.a  D:/msys2/clang64/lib/libLLVMSupport.a  -lpsapi  -lshell32  -lole32  -luuid  -ladvapi32  D:/msys2/clang64/lib/libz.dll.a  D:/msys2/clang64/lib/libzstd.dll.a  D:/msys2/clang64/lib/libLLVMDemangle.a  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
ld.lld: error: undefined symbol: llvm::DemoteRegToStack(llvm::Instruction&, bool, llvm::Instruction*)
>>> referenced by CMakeFiles/LLVMObfuscator.dir/utils/Utils.cpp.obj:(llvm::fixStack(llvm::Function*))

ld.lld: error: undefined symbol: llvm::DemotePHIToStack(llvm::PHINode*, llvm::Instruction*)
>>> referenced by CMakeFiles/LLVMObfuscator.dir/utils/Utils.cpp.obj:(llvm::fixStack(llvm::Function*))

ld.lld: error: undefined symbol: llvm::Function::viewCFG() const
>>> referenced by CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj:(llvm::BogusControlFlow::bogus(llvm::Function&))
>>> referenced by CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj:(llvm::BogusControlFlow::bogus(llvm::Function&))
>>> referenced by CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj:(llvm::BogusControlFlow::doF(llvm::Module&))

ld.lld: error: undefined symbol: llvm::CloneBasicBlock(llvm::BasicBlock const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false>>>&, llvm::Twine const&, llvm::Function*, llvm::ClonedCodeInfo*, llvm::DebugInfoFinder*)
>>> referenced by CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj:(llvm::BogusControlFlow::createAlteredBasicBlock(llvm::BasicBlock*, llvm::Twine const&, llvm::Function*))

ld.lld: error: undefined symbol: llvm::ValueMapper::ValueMapper(llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false>>>&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*)
>>> referenced by CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj:(llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false>>>&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*))

ld.lld: error: undefined symbol: llvm::ValueMapper::mapValue(llvm::Value const&)
>>> referenced by CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj:(llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false>>>&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*))

ld.lld: error: undefined symbol: llvm::ValueMapper::~ValueMapper()
>>> referenced by CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj:(llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false>>>&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*))
>>> referenced by CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.obj:(llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false>>>&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*))

ld.lld: error: undefined symbol: llvm::LowerSwitchPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)
>>> referenced by CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.obj:(llvm::FlatteningObfuscatorPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&))
c++: error: linker command failed with exit code 1 (use -v to see invocation)

Backend error - inconsistency in registered commandline options

Hi

I try to compile a test code:

#include <stdio.h>

int main(){
	printf("Test print\n");
	return 0;
}

The command line is the following:

LLVM_OBF_SCALAROPTIMIZERLATE_PASSES="split-basic-blocks" /usr/lib/llvm-14/bin/clang -v -fno-legacy-pass-manager -fpass-plugin=/home/user/obfuscator-llvm/build/libLLVMObfuscator.so test.c

I get the following error:

Debian clang version 14.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-14/bin
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/13
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/13
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
 "/usr/lib/llvm-14/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name test.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -v -fcoverage-compilation-dir=/home/user/Tools/clangtest -resource-dir /usr/lib/llvm-14/lib/clang/14.0.6 -internal-isystem /usr/lib/llvm-14/lib/clang/14.0.6/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/home/Tools/clangtest -ferror-limit 19 -fgnuc-version=4.2.1 -fno-legacy-pass-manager -fcolor-diagnostics -fpass-plugin=/home/user/Tools/obfuscator-llvm/build/libLLVMObfuscator.so -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/test-1676a5.o -x c test.c
clang -cc1 version 14.0.6 based upon LLVM 14.0.6 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/llvm-14/lib/clang/14.0.6/include
 /usr/local/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
clang (LLVM option parsing): CommandLine Error: Option 'enable-fs-discriminator' registered more than once!
fatal error: error in backend: inconsistency in registered CommandLine options
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Debian clang version 14.0.6
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-14/bin
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: /tmp/test-6d6820.c
clang: note: diagnostic msg: /tmp/test-6d6820.sh
clang: note: diagnostic msg:

********************

I am on Debian 64 bits 6.5.0. I have tried with clang versions 14 to 17, resulting in the same issue. The only difference is that -fno-legacy-pass-manager is not supported after version 15.

I have also tried compiling different files for different architectures, still no difference. I guess the .so obfuscator needs to be compiled with specific flags ?

seg fault when apply "string encryption"

Crash when using string encryption, based on ndk 25.2.9519653, Macos 13.5

Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  clang-14                 0x000000010c5a890b llvm::SmallVectorBase<unsigned long long>::set_size(unsigned long) + 352411
1  clang-14                 0x000000010c5a79c5 llvm::SmallVectorBase<unsigned long long>::set_size(unsigned long) + 348501
2  clang-14                 0x000000010c50a7b7 llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::setCallback(std::__1::function<void (bool const&)>) + 64263
3  clang-14                 0x000000010c50a96d llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::setCallback(std::__1::function<void (bool const&)>) + 64701
4  libsystem_platform.dylib 0x00007ff8178df5ed _sigtramp + 29
5  libLLVMObfuscator.dylib  0x000000011090acb3 llvm::Value::setName(llvm::Twine const&) + 51
6  libLLVMObfuscator.dylib  0x00000001107eec56 llvm::ConstantFoldGetElementPtr(llvm::Type*, llvm::Constant*, bool, llvm::Optional<unsigned int>, llvm::ArrayRef<llvm::Value*>) + 166
7  libLLVMObfuscator.dylib  0x000000011080fd95 llvm::ConstantExpr::getGetElementPtr(llvm::Type*, llvm::Constant*, llvm::ArrayRef<llvm::Value*>, bool, llvm::Optional<unsigned int>, llvm::Type*) + 85
8  libLLVMObfuscator.dylib  0x000000011087e1d4 llvm::ConstantFolder::FoldGEP(llvm::Type*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, bool) const + 100
9  libLLVMObfuscator.dylib  0x00000001107a69d5 llvm::IRBuilderBase::CreateConstInBoundsGEP2_32(llvm::Type*, llvm::Value*, unsigned int, unsigned int, llvm::Twine const&) + 133
10 libLLVMObfuscator.dylib  0x00000001107a6717 llvm::StringObfuscatorPass::addDecodeAllStringsFunction(llvm::Module&, llvm::Function*) + 599
11 libLLVMObfuscator.dylib  0x00000001107a6ab8 llvm::StringObfuscatorPass::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 56
12 libLLVMObfuscator.dylib  0x000000011079b292 llvm::detail::PassModel<llvm::Module, llvm::StringObfuscatorPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 18
13 clang-14                 0x000000010bf7ff78 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module> >::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) + 360
14 clang-14                 0x000000010c8046ce void llvm::DomTreeBuilder::Calculate<llvm::DominatorTreeBase<llvm::VPBlockBase, false> >(llvm::DominatorTreeBase<llvm::VPBlockBase, false>&) + 692670
15 clang-14                 0x000000010ca70590 void llvm::DomTreeBuilder::Calculate<llvm::DominatorTreeBase<llvm::VPBlockBase, false> >(llvm::DominatorTreeBase<llvm::VPBlockBase, false>&) + 3231872
16 clang-14                 0x000000010d9b5c3e llvm::IRComparer<llvm::EmptyData>::generateFunctionData(llvm::IRDataT<llvm::EmptyData>&, llvm::Function const&) + 6454878
17 clang-14                 0x000000010ccd1ba0 llvm::Registry<clang::PluginASTAction>::begin() + 12000
18 clang-14                 0x000000010cc57ac7 void llvm::DomTreeBuilder::Calculate<llvm::DominatorTreeBase<llvm::VPBlockBase, false> >(llvm::DominatorTreeBase<llvm::VPBlockBase, false>&) + 5227959
19 clang-14                 0x000000010cd21f06 llvm::Registry<clang::PluginASTAction>::begin() + 340550
20 clang-14                 0x000000010b2b2baa
21 clang-14                 0x000000010b2b0621
22 clang-14                 0x000000010cb61c17 void llvm::DomTreeBuilder::Calculate<llvm::DominatorTreeBase<llvm::VPBlockBase, false> >(llvm::DominatorTreeBase<llvm::VPBlockBase, false>&) + 4220679
23 clang-14                 0x000000010c50a71b llvm::cl::opt<bool, false, llvm::cl::parser<bool> >::setCallback(std::__1::function<void (bool const&)>) + 64107
24 clang-14                 0x000000010cb615da void llvm::DomTreeBuilder::Calculate<llvm::DominatorTreeBase<llvm::VPBlockBase, false> >(llvm::DominatorTreeBase<llvm::VPBlockBase, false>&) + 4219082
25 clang-14                 0x000000010cb3c181 void llvm::DomTreeBuilder::Calculate<llvm::DominatorTreeBase<llvm::VPBlockBase, false> >(llvm::DominatorTreeBase<llvm::VPBlockBase, false>&) + 4066417
26 clang-14                 0x000000010cb3c4cd void llvm::DomTreeBuilder::Calculate<llvm::DominatorTreeBase<llvm::VPBlockBase, false> >(llvm::DominatorTreeBase<llvm::VPBlockBase, false>&) + 4067261
27 clang-14                 0x000000010cb4dbdd void llvm::DomTreeBuilder::Calculate<llvm::DominatorTreeBase<llvm::VPBlockBase, false> >(llvm::DominatorTreeBase<llvm::VPBlockBase, false>&) + 4138701
28 clang-14                 0x000000010b2af996
29 dyld                     0x00007ff81755841f start + 1903
clang++: error: clang frontend command failed with exit code 139 (use -v to see invocation)
Android (9352603, based on r450784d1) clang version 14.0.7 (https://android.googlesource.com/toolchain/llvm-project 4c603efb0cca074e9238af8b4106c30add4418f6)
Target: armv7-none-linux-android19
Thread model: posix

Error building for macOS

Hello,

I'm having problems compiling the obfuscator llvm on macOS.
Any suggestion?

**LLVM: ** 14.0.6
**macOS SDK: ** 13.0

Output error

โžœ  build: ninja -j8
[5/5] Linking CXX shared library libLLVMObfuscator.dylib
FAILED: libLLVMObfuscator.dylib 
: && /Library/Developer/CommandLineTools/usr/bin/c++ -Wall -Wextra -Wno-unused-parameter -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX13.0.sdk -mmacosx-version-min=12.6 -dynamiclib -Wl,-headerpad_max_install_names  -o libLLVMObfuscator.dylib -install_name @rpath/libLLVMObfuscator.dylib CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o CMakeFiles/LLVMObfuscator.dir/utils/Utils.cpp.o CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o -L/usr/local/Cellar/llvm@14/14.0.6/lib -Wl,-rpath,/usr/local/Cellar/llvm@14/14.0.6/lib  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMCore.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMSupport.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMBinaryFormat.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMRemarks.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMBitstreamReader.a  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMSupport.a  -lm  /Library/Developer/CommandLineTools/SDKs/MacOSX13.0.sdk/usr/lib/libz.tbd  /Library/Developer/CommandLineTools/SDKs/MacOSX13.0.sdk/usr/lib/libcurses.tbd  /usr/local/Cellar/llvm@14/14.0.6/lib/libLLVMDemangle.a && :
Undefined symbols for architecture x86_64:
  "llvm::ValueMapper::mapValue(llvm::Value const&)", referenced from:
      llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*) in BogusControlFlow.cpp.o
  "llvm::ValueMapper::ValueMapper(llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*)", referenced from:
      llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*) in BogusControlFlow.cpp.o
  "llvm::ValueMapper::~ValueMapper()", referenced from:
      llvm::MapValue(llvm::Value const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::RemapFlags, llvm::ValueMapTypeRemapper*, llvm::ValueMaterializer*) in BogusControlFlow.cpp.o
  "llvm::CloneBasicBlock(llvm::BasicBlock const*, llvm::ValueMap<llvm::Value const*, llvm::WeakTrackingVH, llvm::ValueMapConfig<llvm::Value const*, llvm::sys::SmartMutex<false> > >&, llvm::Twine const&, llvm::Function*, llvm::ClonedCodeInfo*, llvm::DebugInfoFinder*)", referenced from:
      llvm::BogusControlFlow::createAlteredBasicBlock(llvm::BasicBlock*, llvm::Twine const&, llvm::Function*) in BogusControlFlow.cpp.o
  "llvm::DemotePHIToStack(llvm::PHINode*, llvm::Instruction*)", referenced from:
      llvm::fixStack(llvm::Function*) in Utils.cpp.o
  "llvm::DemoteRegToStack(llvm::Instruction&, bool, llvm::Instruction*)", referenced from:
      llvm::fixStack(llvm::Function*) in Utils.cpp.o
  "llvm::SubstitutionPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)", referenced from:
      llvm::detail::PassModel<llvm::Function, llvm::SubstitutionPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) in Plugin.cpp.o
  "llvm::SubstitutionPass::SubstitutionPass()", referenced from:
      llvm::addPassWithName(llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >&, llvm::StringRef&) in Plugin.cpp.o
  "llvm::SplitBasicBlockPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)", referenced from:
      llvm::detail::PassModel<llvm::Function, llvm::SplitBasicBlockPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) in Plugin.cpp.o
  "llvm::SplitBasicBlockPass::SplitBasicBlockPass()", referenced from:
      llvm::addPassWithName(llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >&, llvm::StringRef&) in Plugin.cpp.o
  "llvm::FlatteningObfuscatorPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&)", referenced from:
      llvm::detail::PassModel<llvm::Function, llvm::FlatteningObfuscatorPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function> >::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) in Plugin.cpp.o
  "llvm::FlatteningObfuscatorPass::FlatteningObfuscatorPass()", referenced from:
      llvm::addPassWithName(llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function> >&, llvm::StringRef&) in Plugin.cpp.o
  "llvm::Function::viewCFG() const", referenced from:
      llvm::BogusControlFlow::bogus(llvm::Function&) in BogusControlFlow.cpp.o
      llvm::BogusControlFlow::doF(llvm::Module&) in BogusControlFlow.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

Incompatability with Current Nightly Toolchain

Hi, put together a project build recently that was working perfectly during compile time however now I am starting to see a consistent crash when building core for an invalid reference which terminates the build.

Rechecked the Rust obfuscation guide but I suspect there could be some incompatibility with newer nightly builds.
Any help appreciated. Let me know if you want any error logs etc.

The error returned when building libc and other core libraries appears to be: undefined reference 'diagnostic-width

Problew with build the compiler and LLVM

I use the guide and trying to adapt it for Windows OS, when I run the command python .\x.py build, I get thread 'main' panicked at 'shared linking to LLVM is not currently supported on x86_64-pc-windows-msvc', src\bootstrap\native.rs:162:13 .
Is there any way to do this on Windows?

building error on MacOS (ARM) 13.6 (M1 Pro MacBook)

          building error on MacOS 13.6 (M1 Pro MacBook)

Apple clang version 15.0.0 (clang-1500.0.40.1)
Target: arm64-apple-darwin22.6.0
cmake version 3.27.6

[1/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/utils/CryptoUtils.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:20:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:535:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(tmpA, key);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:651:3: error: use of undeclared identifier 'LOAD64H'
  LOAD64H(iseed, ctr + 8);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:653:3: error: use of undeclared identifier 'STORE64H'
  STORE64H(ctr + 8, iseed);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:728:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ret, tmp);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:741:3: error: use of undeclared identifier 'LOAD64H'
  LOAD64H(ret, tmp);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:780:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ks[0], k);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:781:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ks[1], k + 4);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:782:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ks[2], k + 8);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:783:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(ks[3], k + 12);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:812:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(state0, in + 0);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:813:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(state1, in + 4);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:814:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(state2, in + 8);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:815:3: error: use of undeclared identifier 'LOAD32H'
  LOAD32H(state3, in + 12);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:861:3: error: use of undeclared identifier 'STORE32H'
  STORE32H(out + 0, state0);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:862:3: error: use of undeclared identifier 'STORE32H'
  STORE32H(out + 4, state1);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:863:3: error: use of undeclared identifier 'STORE32H'
  STORE32H(out + 8, state2);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:864:3: error: use of undeclared identifier 'STORE32H'
  STORE32H(out + 12, state3);
  ^
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.cpp:914:5: error: use of undeclared identifier 'LOAD32H'
    LOAD32H(W[i], buf + (4 * i));
    ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
[2/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/substitution/Substitution.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/substitution/Substitution.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/substitution/Substitution.cpp:23:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
[3/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/bogus/BogusControlFlow.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/bogus/BogusControlFlow.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/bogus/BogusControlFlow.cpp:99:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
[4/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/flattening/Flattening.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/flattening/Flattening.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/flattening/Flattening.cpp:25:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
[5/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/split/SplitBasicBlocks.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/split/SplitBasicBlocks.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/split/SplitBasicBlocks.cpp:20:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
[6/7] Building CXX object CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o
FAILED: CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -DLLVMObfuscator_EXPORTS -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/opt/llvm/include -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm -I/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/build -fno-rtti -Wall -Wextra -Wno-unused-parameter -std=gnu++14 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -mmacosx-version-min=13.6 -fPIC -MD -MT CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o -MF CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o.d -o CMakeFiles/LLVMObfuscator.dir/Plugin.cpp.o -c /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/Plugin.cpp
In file included from /Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/Plugin.cpp:12:
/Users/markmjw/Downloads/llvm-pass/obfuscator-llvm/utils/CryptoUtils.h:84:2: error: "Unknown endianness of the compilation platform, check this header aes_encrypt.h"
#error                                                                         \
 ^
1 error generated.
ninja: build stopped: subcommand failed.

Originally posted by @MarkMjw in #4 (comment)

seg fault When applying "flattening"

I applied SCALAROPTIMIZERLATE_PASSES with flattening.

However, an error occurs when building my iPhone app.

clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Apple clang version 14.0.3 (clang-1403.0.22.14.1)
Target: arm64-apple-ios13.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
clang: note: diagnostic msg: 
********************


An error occurs while executing the below source.

flattening.cpp
run(Function &F, ...)
{
analysis.intersect(LowerSwitchPass().run(F, AM)); // crash
}

Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
0  clang                    0x0000000106676a8c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  clang                    0x00000001066759c0 llvm::sys::RunSignalHandlers() + 112
2  clang                    0x0000000106677118 SignalHandler(int) + 344
3  libsystem_platform.dylib 0x000000018ad7ea24 _sigtramp + 56
4  clang                    0x0000000105f35e64 llvm::AnalysisManager<llvm::Function>::getResultImpl(llvm::AnalysisKey*, llvm::Function&) + 260
5  libLLVMObfuscator.dylib  0x000000010dc1c620 llvm::LowerSwitchPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) + 52
6  libLLVMObfuscator.dylib  0x000000010d985584 llvm::Flattening::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) + 136

llvm (clang-15) build option
cmake -S llvm -B Release -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_NEW_PASS_MANAGER=ON -DCMAKE_OSX_ARCHITECTURES=arm64 -DLLVM_CREATE_XCODE_TOOLCHAIN=ON -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi"

obfuscator build option
cmake -B Release -DLLVM_DIR=/Users/kei/Downloads/llvm-project/Release/lib/cmake -DCMAKE_OSX_ARCHITECTURES=arm64

app build option
Clang -fno-legacy-pass-manager -fpass-plugin=/Users/kei/Downloads/obfuscator-llvm/Release/libLLVMObfuscator.dylib 1.c -o 1.o -DCMAKE_OSX_ARCHITECTURES=arm64

[Rust] Failed to build under Linux

Good afternoon.
I followed the manual for rust and ran into a problem building obfuscate-llvm. There were no deviations from the manual until make -j8 command in 3. Build the obufscation section. I've tried both branches, nothing changed.

Environment information:
  • Arch: x86_64
  • OS: Debian 11 (Docker)
  • Rustup: 1.26.0
  • Rust: 1.69.0

Error log in the attached file.

I would be extremely grateful for any help, as extremely interested in using this project.
Thank you in advance!
log.txt

Error when cross compiling plugin on Apple Silicon

Hi @PatriceBlin I've been having some issues trying to build the plugin locally. I've been following your guide on how to do this with the android NDK.

I'm trying to do this for NDK r25 revision r450784d.

Environment is macOS 13.6 with an Apple Silicon chip.

LLVM_HOME is set to: ~/tmp/llvm-toolchain/out/stage2-install/
LLVM_DIR is set to: $LLVM_HOME/lib64/cmake
TOOLCHAIN is ~/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64
CXX_HEADERS is set to: $LLVM_HOME/include/c++/v1 but I've tried these as well:
android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++
android-ndk-r25/toolchains/llvm/prebuilt/linux-x86_64/include/c++

When I try to build the plugin I get the following:

$cmake -S ~/obfuscator-llvm -B ~/tmp/llvm-obfuscation-ndk -D LLVM_DIR="$LLVM_DIR" -D CMAKE_CXX_COMPILER=$CXX -D CMAKE_CXX_FLAGS="$CXXFLAGS"
-- The C compiler identification is Clang 14.0.6
-- The CXX compiler identification is Clang 14.0.6
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Check for working C compiler: /Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang
-- Check for working C compiler: /Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang - broken
CMake Error at /opt/homebrew/Cellar/cmake/3.27.6/share/cmake/Modules/CMakeTestCCompiler.cmake:67 (message):
  The C compiler

    "/Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: '/Users/andre.bedran/tmp/llvm-obfuscation-ndk/CMakeFiles/CMakeScratch/TryCompile-wSc4q3'

    Run Build Command(s): /opt/homebrew/Cellar/cmake/3.27.6/bin/cmake -E env VERBOSE=1 /usr/bin/make -f Makefile cmTC_da402/fast
    /Applications/Xcode.14.3.1.14E300b.app/Contents/Developer/usr/bin/make  -f CMakeFiles/cmTC_da402.dir/build.make CMakeFiles/cmTC_da402.dir/build
    Building C object CMakeFiles/cmTC_da402.dir/testCCompiler.c.o
    /Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang   -isystem /Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/ -I/Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/c++/v1  -arch arm64 -isysroot /Applications/Xcode.14.3.1.14E300b.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -MD -MT CMakeFiles/cmTC_da402.dir/testCCompiler.c.o -MF CMakeFiles/cmTC_da402.dir/testCCompiler.c.o.d -o CMakeFiles/cmTC_da402.dir/testCCompiler.c.o -c /Users/andre.bedran/tmp/llvm-obfuscation-ndk/CMakeFiles/CMakeScratch/TryCompile-wSc4q3/testCCompiler.c
    Linking C executable cmTC_da402
    /opt/homebrew/Cellar/cmake/3.27.6/bin/cmake -E cmake_link_script CMakeFiles/cmTC_da402.dir/link.txt --verbose=1
    /Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang -isystem /Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/ -I/Users/andre.bedran/tmp/android-ndk-r25/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/c++/v1  -arch arm64 -isysroot /Applications/Xcode.14.3.1.14E300b.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names -L  CMakeFiles/cmTC_da402.dir/testCCompiler.c.o -o cmTC_da402
    ld: error: unknown argument '-dynamic', did you mean '-Bdynamic'
    ld: error: unknown argument '-arch'
    ld: error: unknown argument '-syslibroot'
    ld: error: unknown argument '-search_paths_first'
    ld: error: unknown emulation: acosx_version_min
    ld: error: cannot open arm64: No such file or directory
    ld: error: cannot open 13.0.0: No such file or directory
    ld: error: cannot open /Applications/Xcode.14.3.1.14E300b.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk: Is a directory
    ld: error: unable to find library -lSystem
    clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
    make[1]: *** [cmTC_da402] Error 1
    make: *** [cmTC_da402/fast] Error 2





  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:3 (project)


-- Configuring incomplete, errors occurred!```

Looks like either I have a completely broken clang in my NDK installation, or I'm missing something crucial for it to work.

I have applied the fixes to `CryptoUtils.h` and `CMakeLists.txt` from the macOS build fix branch already, and I've tried some things you mentioned in #6 without success.

Do you have any thoughts? Thanks in advance.

P.S.: If you have any guidance on how to use the plugin through gradle afterwards, that would be great too.

Trouble building/using Android toolchain

Hi,

I'm having difficulties building and using the obfuscator with Android.

I am following the instructions on https://github.com/eshard/obfuscator-llvm/blob/main/docs/ANDROID_NDK.md

I tried using the latest NDK (r25b) as well as the one documented on the page (r23b - but I had to revert the latest changes for llvm 14 in order to make the plugin build)

First of all, I believe --no-build windows --no-build lldb should be changed into --no-build "windows,lldb" (with r25b both worked, but with r23b the two-separate option ended up building windows tools anyway)

Then, the instruction says 'Compile the plugin with -D LLVM_DIR=~/tmp/llvm-toolchain/out/stage2-install/lib64/cmake along with a NDK compile environment.' but the code below initializes LLVM_DIR to '${LLVM_HOME}/lib64/cmake'. I believe the first one is correct, please confirm.

With the above changes, I am able to build libLLVMObfuscator.so but using it gives undefined symbols:

/home/spop/obfuscator/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android23-clang++ -I/home/spop/obfuscator/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -I/home/spop/obfuscator/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/aarch64-linux-android -O1 -fno-legacy-pass-manager -fpass-plugin=out/libLLVMObfuscator.so -c foobar.cpp -o foobar.o error: unable to load plugin 'out/libLLVMObfuscator.so': 'Could not load library 'out/libLLVMObfuscator.so': out/libLLVMObfuscator.so: undefined symbol: _ZNSt6__ndk112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev'

Any idea ? Thanks !

How to use with MSVC

My develop environment is Windows and Visual Studio, how can I use the project with them, I didn't see any documentation. Sincerely thanks to reply.

CommandLine Error: Option 'enable-fs-discriminator' registered more than once!

Hello, I got the following error while applying the passes with clang,

zhong@noodle:~/proj/hello_world$ /usr/lib/llvm-14/bin/clang -fno-legacy-pass-manager -fpass-plugin=/home/zhong/proj/obfuscator-llvm/build/libLLVMObfuscator.so hello_world.c -o hello_world
clang (LLVM option parsing): CommandLine Error: Option 'enable-fs-discriminator' registered more than once!
fatal error: error in backend: inconsistency in registered CommandLine options
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Ubuntu clang version 14.0.6-++20220622053131+f28c006a5895-1exp120220622173215.157
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-14/bin
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: /tmp/hello_world-889897.c
clang: note: diagnostic msg: /tmp/hello_world-889897.sh
clang: note: diagnostic msg:

********************

Do have any idea how to solve this? Thanks.

Error: CommandLine Error: Option 'enable-fs-discriminator' registered more than once!

It raises the following error:

$ /usr/local/clang+llvm-14.0.6-x86_64-linux-gnu-ubuntu-18.04/bin/clang -fno-legacy-pass-manager -fpass-plugin=/usr/local/obfuscator-llvm-x86_64-linux-gnu-ubuntu-18.04/usr/lib/libLLVMObfuscator.so example_ControlFlowFlattening.c -o example_ControlFlowFlattening
clang (LLVM option parsing): CommandLine Error: Option 'enable-fs-discriminator' registered more than once!
fatal error: error in backend: inconsistency in registered CommandLine options
clang-14: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 14.0.6
Target: x86_64-unknown-linux-gnu
Thread model: posix
..

Obfuscation not being applied

I'm successful in building LLVM and the obfuscation plugin, however I'm unable to apply the obfuscation passes. What am I missing here?

main.c

#include <stdlib.h>
int main(int argc, char** argv) {
  int a = atoi(argv[1]);
  if(a == 0)
    return 1;
  else
    return 10;
  return 0;
}

(https://github.com/heroims/obfuscator/wiki/Bogus-Control-Flow)

Compile without obfuscation

clang main.c -o main

Compile with obfuscation

export LLVM_OBF_SCALAROPTIMIZERLATE_PASSES="flattening, bogus, substitution, split-basic-blocks"
clang  -fno-legacy-pass-manager -fpass-plugin=/obfuscator-llvm/build/libLLVMObfuscator.so main.c -o obf

Compare binaries

diff main obf 

Binaries are the same. I've also tried:

export LLVM_OBF_PEEPHOLE_PASSES="flattening, bogus, substitution, split-basic-blocks"
export LLVM_OBF_SCALAROPTIMIZERLATE_PASSES="flattening, bogus, substitution, split-basic-blocks"
export LLVM_OBF_VECTORIZERSTART_PASSES="flattening, bogus, substitution, split-basic-blocks"
export LLVM_OBF_PIPELINESTART_PASSES="flattening, bogus, substitution, split-basic-blocks"
export LLVM_OBF_PIPELINEEARLYSIMPLIFICATION_PASSES="flattening, bogus, substitution, split-basic-blocks"
export LLVM_OBF_OPTIMIZERLASTEP_PASSES="flattening, bogus, substitution, split-basic-blocks"
clang  -fno-legacy-pass-manager -fpass-plugin=/obfuscator-llvm/build/libLLVMObfuscator.so main.c -o obf

Still, obfuscation is not applied.

Dockerfile

FROM archlinux

RUN pacman -Syu --needed base-devel --noconfirm

RUN pacman -S vim git cmake ninja python3 --noconfirm

RUN git clone --depth 1 --branch release/14.x https://github.com/llvm/llvm-project.git

WORKDIR /llvm-project/llvm

RUN mkdir -p build

WORKDIR /llvm-project/llvm/build

RUN cmake -G "Ninja" -DCMAKE_INSTALL_PREFIX=/opt/llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS='lld;clang' -DLLVM_TARGETS_TO_BUILD="host;WebAssembly" -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_INCLUDE_TESTS=OFF -DENABLE_LLVM_SHARED=1 ..

RUN ninja -j$(($(nproc) / 2))

RUN ninja install

WORKDIR /

RUN git clone https://github.com/eshard/obfuscator-llvm.git

WORKDIR /obfuscator-llvm

RUN sed -i 's/ LLVMCore//' CMakeLists.txt

RUN mkdir -p build

WORKDIR /obfuscator-llvm/build

RUN cmake -G "Ninja" -DLLVM_DIR=/opt/llvm/lib/cmake ..

RUN ninja -j$(($(nproc) / 2))

ENV PATH="$PATH:/llvm-project/llvm/build/bin"

WORKDIR /

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.