Giter VIP home page Giter VIP logo

advobfuscator's Introduction

What is ADVobfuscator?

ADVobfuscator demonstates how to use C++11/14 language to generate, at compile time, obfuscated code without using any external tool and without modifying the compiler. The technics presented rely only on C++11/14, as standardized by ISO. It shows also how to introduce some form of randomness to generate polymorphic code and it gives some concrete examples like the encryption of strings literals and the obfuscation of calls using finite state machines.

ADVobfuscator is delivered as a set of source file (source code library). You have to include them into your project and call the appropriate functions or macro. This is not a magic black box or some kind of code pre-processor or post-processor. It has to be integrated manually into your source code.

If you are looking for a more transparent obfuscator, look at Obfuscator-LLVM or strong.codes (commercial version of Obfuscator-LLVM). Note: I have no affiliation with Obfuscator-LLVM and strong.codes. I just know some of those swiss folks.

News

August 2017

  • Enhance the compatibility with compiler's optimizer (such as GCC with O3). Previously, the code was sometimes overoptimized by the compiler and as a consequence, non-obfuscated strings remains in the binary code. This was more or less due to a bug in ADVobfuscator (I was not using volatile).
  • Fix a stupid mistake in algorithm #2 (shift). Sometimes, the encryption key is 0.
  • Clearly seperate the library code (under Lib) from the examples (under Examples and DocCode).
  • Check the compatibility with C++14. In the future, I will probably drop the support of C++11 and keep only C++14 and C++17 compatibility.

August 2016

Several enhancement (suppress warnings, fix some errors, enhance portability). In more details:

  • Increase the warning level for Visual Studio and GCC
  • Remove several (all) compilation warnings
  • Replace int by size_t when it is appropriate (sizeof, position)
  • Remove unused parameters
  • Keys are now of type char (were of type int, it was wrong)
  • Replace the non-portable ##__VA_ARGS__ by the portable __VA_ARGS__. As a consequence, new macros (ending with 0) are defined when there are no parameters
  • Remove some (stupid) syntax errors (; at the end of some functions). C/C++ is odd: you have to put a ; when you define a struct, but none when you define a function
  • A integral type is computed at compile time to store pointers to functions

August 2015

ADVobfuscator code has been updated for Visual Studio 2015. ADVobfuscator is now compatible with the RTM release of Visual Studio 2015 (previous versions or CTP releases are not). The whitepaper is not yet updated. The code has also been modified in order to avoid problems with O3 optimization and GCC. GCC with O3 defeats obfuscation (because it optimizes too much) and sometimes generates wrong code (not clear yet if it is a bug in GCC or in ADVobfuscator).

How to use it?

First you have to follow the requirements below. Then, you just have to include ADVobfuscator header files and use macros such as OBFUSCATED to protect your strings or function calls.

Look at the examples in the Examples folder.

Prerequisites

  • A C++11 or C++14 compatible compiler (i.e. a compiler that is not too old)
  • Obfuscated strings: no other prerequisite
  • Obfuscated calls and predicates: You have to install the Boost library. See below

Boost Library

You have to install the Boost library in order to use some features of ADVdetector (it is used by FSM). To install Boost:

  • Debian / Ubuntu: sudo apt-get install libboost-all-dev
  • Mac OS X: brew install boost
  • Windows: Download Boost and install it. Then you have to change the Visual Studio project to point to Boost

Examples

Linux

cd Examples
make

Each example is in its subdirectory.

macOS

Open ADVobfuscator.xcworkspace and build each example.

Windows

Open ADVobfuscator.sln. Be sure to change the path to Boost library for each project (Properties | C/C++ | General | Additional Include Directories).

Debug Builds

Debug builds are very special: Compiler do not have (and do not most of the time) respect statement such as inline or constexpr. All optimizations are also, by default, disabled. Compilers are doing this for a good reason: let you debug, single step, etc.

As a consequence, ADVobfuscator is not compatible with Debug builds. It works only for Release builds.

Compatibility

ADVobfuscator has been tested with:

  • Xcode (LLVM) 8.1.0 under Mac OS X 10.12
  • GCC 7.2.0 under Debian 10 (buster - testing)
  • Visual Studio 2017 (15.3.3) under Windows 10
  • Boost 1.65.0

Other compilers are probably compatible if they are C++11/14 compliant.

Future Directions

These are ideas for the next few months:

  • Create version 5 of MetaString: instead of choosing one algorithm, it will combine several. This way, tools such as XOR breakers will not work.
  • Switch to C++14 and C++17. It will simplify some parts of the code and C++ is now well supported by compilers such as GCC and CLANG
  • Try to better support Visual Studio 2015, but only if it does not implies a restructuring of the code
  • Introduce White Box Cryptography (AES in particular). Still in my mind but I am not very active for the moment
  • Is my code compatible with ASLR? In fact, I don't konw and I have to solve this (I need it for another project)
  • Apply the techniques used in MetaString4.h into ObfuscatedCall.h
  • )ntroduce Unit Testing

Files and Folders

Files and Folders Description
README.md This file
Lib ADVobfuscator library
Examples Examples of using ADVobfuscator
Examples/Makefile Make file that build all the examples
Examples/ObfuscatedString Example of using ADVobfuscator to obfuscate strings
Examples/ObfuscatedCalls Example of using ADVobfuscator to obfuscate function calls
Examples/DetectDebugger Example of using ADVobfuscator to obfuscate function calls triggered by a predicate
Docs My talks and white papers
DocCode Code memtionned in the documents

Lib

Files Description
Indexes.h Generate list of indexes at compile time (0, 1, 2, ... N)
MetaFSM.h Template to generate Finite State Machines at compile time
MetaRandom.h Generate a pseudo-random number at compile time
MetaString.h Obfuscated string - version 4 - Random encryption algorithm
ObfuscatedCall.h Obfuscate function call
ObfuscatedCallWithPredicate.h Obfuscate function call, execute a FSM based on a predicate
ADVobfuscator.xcodeproj Project for Apple Xcode
ADVobfuscator.sln Visual Studio 2015 Solution

DocCode

Files Description
MetaFactorial.h Compute factorial at compile time
MetaFibonacci.h Compute fibonacci sequence at compile time
MetaString1.h Obfuscated string - version 1
MetaString2.h Obfuscated string - version 2 - Remove truncation
MetaString3.h Obfuscated string - version 3 - Random key
MetaString4.h Obfuscated string - version 4 - Random encryption algorithm

Examples

Files Description
DetectDebugger.cpp Debugger detection, implemented for Mac OS X and iOS. It is used by ObfuscatedCallWithPredicate (FSM)
DetectDebugger.h Debugger detection, declaration
main.cpp Samples
Makefile Simple makefile for GCC
ADVobfuscator.sln Visual Studio 2017 Solution
ADVobfuscator.xcworkspace Xcode workspace

Copyright and license

Written by Sebastien Andrivet - Copyright © 2010-2017 Sebastien Andrivet.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

advobfuscator's People

Contributors

andrivet avatar krischer 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

advobfuscator's Issues

ADVobfuscator for OBJECTIVE C

Is ADVObfuscator is supported for Obj C?? If so can I have an example code, what I see in the source code is for MAC OS. Please help.

Visual Studio 2015 (update 2) complains about incomplete type with macros

For example, Visual Studio considers the OBFUSCATED4() macro below as "incomplete" -- so, although it will compile just fine, it underlines every instance of it in red and complains non-stop with warnings.

#define DEF_OBFUSCATED4(str) MetaString4<andrivet::ADVobfuscator::MetaRandom<__COUNTER__, 3>::value, andrivet::ADVobfuscator::MetaRandomChar4<__COUNTER__>::value, Make_Indexes<sizeof(str) - 1>::type>(str)

#define OBFUSCATED4(str) (DEF_OBFUSCATED4(str).decrypt())

Although I'm sure there are many ways to fix it (which is why I'm not doing a pull request), the way I dealt with it was by making it just one macro:

#define OBFUSCATED4(str)    (MetaString4<andrivet::ADVobfuscator::MetaRandom<__COUNTER__, 3>::value, andrivet::ADVobfuscator::MetaRandomChar4<__COUNTER__>::value, Make_Indexes<sizeof(str) - 1>::type>(str)).decrypt()

Is this a new C++11 standard? I don't recall this being an issue with previous versions of Visual Studio.

Compiler warning (which results in string obfuscation not functioning) with MetaString4<1,K...

I'm using your OBFUSCATED4() macro, which randomly chooses string obfuscation methods. In some cases, it chooses one that causes a compiler warning on line 78 of MetaString4.h:

    constexpr ALWAYS_INLINE MetaString4(const char* str)
    : buffer_ {static_cast<char>(K), encrypt(str[I], I)...} { }

The compiler warning:

3>MetaString4.h(78): warning C4309: 'argument': truncation of constant value
3>MetaString4.h(78): note: while compiling class template member function 'andrivet::ADVobfuscator::MetaString4<1,85,andrivet::ADVobfuscator::Indexes<0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130>>::MetaString4(const char *)'
3>  isxCurl_http.cpp(213): note: see reference to function template instantiation 'andrivet::ADVobfuscator::MetaString4<1,85,andrivet::ADVobfuscator::Indexes<0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130>>::MetaString4(const char *)' being compiled
3>  isxCurl_http.cpp(213): note: see reference to class template instantiation 'andrivet::ADVobfuscator::MetaString4<1,85,andrivet::ADVobfuscator::Indexes<0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130>>' being compiled

The code referenced in the warning (line 222 of isxCurl_http.cpp):

printf(OBFUSCATED4(" \n \nIt appears as though this extension is attempting to connect to a website that is not available.  Please try again in a moment."));

(Please note that I have a LOT of other code lines that look identical to this one....just with different text. "printf" is a macro defined in the API I use for this software. Anyway, the other lines must be using the other obfuscation methods, so that's why they're not causing the warning.)

sprintf/sprintf_s cause Visual Studio 2015 (update 2) compiler crash with OBFUSCATED4()

This may be something that you might expect, given that this project utilizes some newer features of C++ (and sprintf, etc. are C functions); however, if there's not a way to fix it, I think it'd be a good idea to include a line about it in this documentation. sprintf is still used quite a bit, even in C++, and tracking down why this crash was happening was a bit of a pain :)

Anyway, here's the code I used for testing. Comments included. Let me know if you have any questions.

#include <iostream>
#include <string>
#include "ADVobfuscator\ADVobfuscator\MetaString4.h"
#include <boost/algorithm/string.hpp>
#include <boost/format.hpp>
using namespace andrivet::ADVobfuscator;

int main()
{
    char buf[2048];
    buf[0] = '\0';

    // Enabling this line crashes the compiler!
    //sprintf_s(buf, 2048, OBFUSCATED4("%s %s!\n"), "Hello", "World");

    // Enabling this line also crashes the compiler!
    //sprintf(buf, OBFUSCATED4("%s %s!\n"), "Hello", "World");

    // Compiles and runs just fine
    std::string buf2 = boost::str(boost::format(OBFUSCATED4("%1% %2%!\n")) % "Hello" % "World");
    std::string buf3 = boost::str(boost::format(OBFUSCATED4("%s %s!\n")) % "Hello" % "World");

    std::cout << buf;
    std::cout << buf2;
    std::cout << buf3;
    return 0;
}

String obfuscation fails

I've compiled a C++ project in which I encrypted strings using the OBFUSCATED4(...) macro. I modified it by put it inside std::string() constructor so that it becomes something like '#define OBFUSCATED4 std::string(MetaString4...)' so I can assign it to a std::string for example: std::string myStr = OBFUSCATED4("MyString");. Now, when I disassemble the code I can see all string characters one by one, sometimes in random order. I also use clang to compile and I set the -O2 compiler flag. Any suggestion?

issues

Was having issues with it decrypting the strings properly

Function in class

Hello,

First, I want to thank you for this amazing project and its ease of use.

My issue might in fact be a question coming from a lack of experience.

The functions I want to obfuscate are inside a class such as:

class Loop1 : public BaseThread
{
public:
    Loop1();
...

The problem with that is that when I call a function like OBFUSCATED_CALL0(FaceToCursorPos)
I have an error (below). I tried different things without success.

MetaFSM.h:162: error: invalid cast from type 'void (Loop1::*)()' to type 'andrivet::ADVobfuscator::ObfuscatedAddress

Thank you so much for your help.

Question

how obfuscator call works? and why we need this?
I think obfuscator string is enough, Maybe add this in README is more great.

Does not compile when obfuscating long strings

Error:

fatal error C1202: recursive type or function dependency context too complex
message : see reference to class template instantiation 'Make_Indexes<7429>' being compiled
[...]
message : see reference to class template instantiation 'Make_Indexes<7926>' being compiled
message : see reference to class template instantiation 'Make_Indexes<7927>' being compiled

Ciphertext randomness

Congratulations for your great work. I've been testing it, but I have one doubt:

I see that you use a char as key for MetaString. Does this mean that there will be only 255 possible "ciphertexts" for a given plaintext (using the same algorythm)?

Version 2, support for AES

I am working on a new version of ADVobfuscator. A complete rewrite based on C++ 20. It will support obfuscation of string like the existing version but will permit to use a combination of different algorithms and keys so it will be more resistant. It will also avoid using undefined behaviour and will thus be more reliable (data always obfuscated at compile time).

It will also introduce AES encryption (still at compile time, decryption at runtime) for big chucks of data (for ex. certificates with private keys, ...)

Currently, the obfuscation part is ready but not the AES one which has some bugs I need to solve. Then I need to write the documentation, package the code, etc.

Don't ask when it will be released. I don't know. When I consider it to be ready.

de-boostify

The Boost Library is a terrible set of utter craps, can you really drop it in favor of STL?

Complied error with struct operator() called.

// To remove Boost assert messages
#if !defined(DEBUG) || DEBUG == 0
#define BOOST_DISABLE_ASSERTS
#endif

#pragma warning(disable: 4503)

#include
#include "MetaString.h"
#include "ObfuscatedCall.h"
#include "ObfuscatedCallWithPredicate.h"

using namespace andrivet::ADVobfuscator;
struct Function1 {
inline void operator()(int a, int b) {
cout << DEF_OBFUSCATED("Womenizer").decrypt() << endl;
}
};
// Obfuscate function calls
void SampleFiniteStateMachine() {
using namespace andrivet::ADVobfuscator::Machine1;
OBFUSCATED_CALL(Function1 , 1, 2);
}

// Entry point
int main(int, const char *[]) {
SampleFiniteStateMachine();
return 0;
}

aboved code cannot complied with Visual Stdio 2015

If you can support Visual Studio 2012?

I am very interested in this project but I really need it more than in the Visual Studio 2012 build with v110_xp, so I ask you to support this. It would be appreciated.

Compiler warning question

On line 93 of MetaString4.h:
constexpr char key(int position) const { return buffer_[0] + position; }

I got a compiler warning on this and after looking at it, I thought you might want to check it out. Should 'position' also be a char in this instance? (The compiler does not like returning a value as char when you're doing math with an int.)

There are a few other instances similar to this in the same file.

Problems with the obfuscation of functions (It does not really get obfuscation)

this code:
`int main()
{
bool res = OBFUSCATED_CALL_RET(BOOL,IsDebuggerPresent);
printf("%d\n" , res);

return 0;

}`

will be translate with msvc2015 x86 to: (using ida)
`
lea eax, [ebp+var_C]

mov large fs:0, eax

mov esi, ds:IsDebuggerPresent

lea ecx, [ebp+var_58]

add esi, 175h

call sub_401470

or in xray to :
sub_401470(&v5);

v8 = 0;

sub_401390((char *)&IsDebuggerPresent + 373, 373);

v3 = v6;

sub_401530(&Memory);
`

As you can see the code does not really get obfuscation - it does get at the level of the program but the function names (which is the most central thing to the researcher) still remain ...

MetaString<1, K, Indexes<I...>> doesn't obfuscate string at compile-time but runtime

Using MetaString<1, K, Indexes<I...>>, compile with VS 2017 ver 15.7.1, disassemble and you'll find constexpr not working as supposed. As a result, the strings are obfuscated at runtime.
For some unknown reason, the compiler regards the position I as a variant not a const value though it can be and indeed is produced at compile-time.

After several tries, an ugly template function fools the compiler to obfuscate string at compile-time.

template<char K, int... I>
  struct MetaString<1, K, Indexes<I...>>
  {
    // Constructor. Evaluated at compile time. Instantiate template function **encrypt**.
    constexpr ALWAYS_INLINE MetaString(const char* str)
    : key_(K), buffer_ {encrypt<K+I>(str[I])...} { }
    /* untouched  inline const char* decrypt() */
    private:
        // ......
        // decrypt and encrypt2 are evaluated at runtime.
        constexpr char  encrypt2(char c, size_t position) const { return c ^ key(position); }
	constexpr char decrypt(char c, size_t position) const { return encrypt2(c, position); }
        // **encrypt** will be instantiated at compile time in the constructor of this MetaString.
	template<char _k>
	constexpr char encrypt(char c) const { return c ^ _k; }
        /* key_ and buffer_ */
};

build error with CMake

I have been working on a project and first I built it with visual studio solutions and it worked perfectly. However, when trying to build the same project with CMake an error occurs that I cannot understand why it happens!

Here is the error message

C2440   'reinterpret_cast': cannot convert from 'F' to 'andrivet::ADVobfuscator::ObfuscatedAddress<std::string>::func_ptr_integral' 
my_project_directory\out\build\x64-Debug\quantumsample
C:\Users\Bpc\myProjects\vcpkg-master\installed\x64-windows-mixed\include\Lib\MetaFSM.h  162 

And here is the block code of this part

template<typename F>
    struct ObfuscatedAddress
    {
        // Pointer to a function
        using func_ptr_t = void(*)();
        // Integral type big enough (and not too big) to store a function pointer
        using func_ptr_integral = std::conditional<sizeof(func_ptr_t) <= sizeof(long), long, long long>::type;

        func_ptr_integral f_;
        int offset_;

        constexpr ObfuscatedAddress(F f, int offset): f_{reinterpret_cast<func_ptr_integral>(f) + offset}, offset_{offset} {}
        constexpr F original() const { return reinterpret_cast<F>(f_ - offset_); }
    };

Java JNI + C++ Library causes EXCEPTION_ACCESS_VIOLATION

Hi

I have a C++ library using OBFUSCATOR that always works fine with Java JNI 32/64 bits.
But know on, jvm crashes while calling OBFUSCATED_CALL_P() only with JDK 64 Bits on Win10. Works fine on Win7, Linux (32 and 64).
See log below.

A fatal error has been detected by the Java Runtime Environment:

EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000f9a51f90, pid=1896, tid=0x0000000000001590

Can you show me how to use it please ?

Can you show me how to use it please ?

i want to see it obfuscate an c++ output then if i look in ida 6.8 i must see the string has been obfuscate :( please

ADVobfuscator support for VS2019

Hi,

Is ADVobfuscator supported for VS2019? Currently I am using the current release with VS2019 but getting below errors.
image
Can you please help me to resolve the issue?

Regards,
Monali

Internal compiler error (sometimes)

VS2015 (v140), internal compiler error if I replace XOR with XOR2.
sprintf_s(szInfoString, XOR("%s = %d"), varName.c_str(), GetInt());
sprintf(szValue, XOR("%.02f"), fltValue);

definitions:

define XOR(a) a //Place holder to be swapped with XOR2

define XOR2(a) OBFUSCATED4(a)

I didnt touch any of your code, it's all original.
I tested it separetly and XOR2("%s is %s") works fine (at least compiles, didn't check runtime, but it's not issue) so I guess it's related to sprintf_s/sprintf.

Alternative/Production ready function call obfuscation?

Are there any plans on implementing an alternative function call obfuscation without requiring Boost and what about the production ready function call obfuscation with the function call being placed in the middle of the state machine you mentioned in the comment here?

Conan idea?

This is just an idea/suggestion. Conan is a package manager for C/C++ projects, could ADVobfuscator be added to that package manager? As it would allow for easier integration with C/C++ projects. If you are unfamiliar with Conan https://conan.io/

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.