|
|
|
#ifndef __OBFUSCATOR_H
|
|
|
|
#define __OBFUSCATOR_H
|
|
|
|
|
|
|
|
|
|
|
|
#include "Windas.h"
|
|
|
|
#include "XedWrap.h"
|
|
|
|
#include "NativeCode.h"
|
|
|
|
#include "Jit.h"
|
|
|
|
#include "OpaqueBranching.h"
|
|
|
|
|
|
|
|
#define OBF_ATTRIBUTE_JIT (1<<0)
|
|
|
|
#define OBF_ATTRIBUTE_OPAQUE_BRANCHES (1<<1)
|
|
|
|
#define OBF_ATTRIBUTE_RANDOMIZE_DIVISOR (1<<2)
|
|
|
|
|
|
|
|
typedef struct _OPBR_SETS
|
|
|
|
{
|
|
|
|
ULONG MaxDepth;
|
|
|
|
ULONG MinBranchSize;
|
|
|
|
FLOAT Divisor;
|
|
|
|
ULONG Flags;
|
|
|
|
ULONG MinDepthForBranch;
|
|
|
|
ULONG ChanceForBranch;
|
|
|
|
PNATIVE_CODE_BLOCK ParentBlock;
|
|
|
|
}OPBR_SETS, *POPBR_SETS;
|
|
|
|
|
|
|
|
typedef struct _INSTMUT_SETS
|
|
|
|
{
|
|
|
|
ULONG MutateStart;
|
|
|
|
ULONG MutateChance;
|
|
|
|
}INSTMUT_SETS, *PINSTMUT_SETS;
|
|
|
|
|
|
|
|
//Recursive obfuscation routine using opaque branches and jit
|
|
|
|
VOID ObfGenerateOpaqueBranches(POPBR_SETS Obf, PNATIVE_CODE_BLOCK Block, ULONG Depth = 0);
|
|
|
|
|
|
|
|
VOID ObfMutateInstructions(PINSTMUT_SETS Obf, PNATIVE_CODE_BLOCK Block);
|
|
|
|
|
|
|
|
#endif
|