You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.5 KiB
61 lines
1.5 KiB
#include "Obfuscator.h"
|
|
|
|
|
|
|
|
|
|
VOID ObfObfuscate(POBFUSCATOR Obf, PNATIVE_CODE_BLOCK Block)
|
|
{
|
|
ULONG InstructionCount = NcCountInstructions(Block);
|
|
printf("RECIEVED INSTRUCTION COUNT: %u\n", InstructionCount);
|
|
if (InstructionCount <= Obf->MinInstCount)
|
|
{
|
|
|
|
}
|
|
else
|
|
{
|
|
ULONG TargetCount = InstructionCount / 2;
|
|
ULONG CurrentCount = 0;
|
|
PNATIVE_CODE_LINK NewBlockStart = Block->Start;
|
|
PNATIVE_CODE_LINK RealEnd = Block->End->Next;
|
|
for (PNATIVE_CODE_LINK T = Block->Start; T && T != RealEnd;)
|
|
{
|
|
if (T->Flags & CODE_FLAG_IS_LABEL)
|
|
{
|
|
T = T->Next;
|
|
continue;
|
|
}
|
|
|
|
++CurrentCount;
|
|
|
|
if (CurrentCount == TargetCount)
|
|
{
|
|
NATIVE_CODE_BLOCK NotTaken, Taken;
|
|
ObfCreateOpaqueBranches(NewBlockStart, T, &NotTaken, &Taken);
|
|
ObfObfuscate(Obf, &NotTaken);
|
|
ObfObfuscate(Obf, &Taken);
|
|
if (!ObfCombineOpaqueBranches(&NotTaken, &Taken, NcGenUnusedLabelId(Obf->GlobalBlock), NcGenUnusedLabelId(Obf->GlobalBlock)))
|
|
{
|
|
printf("FAILED TO COMBINE BRANCHES.\n");
|
|
system("pause");
|
|
}
|
|
ObfInsertOpaqueBranchBlock(NewBlockStart, T, &NotTaken);
|
|
T = NotTaken.End;
|
|
NewBlockStart = T->Next;
|
|
CurrentCount = 0;
|
|
}
|
|
T = T->Next;
|
|
}
|
|
if (NewBlockStart)
|
|
{
|
|
NATIVE_CODE_BLOCK NotTaken, Taken;
|
|
ObfCreateOpaqueBranches(NewBlockStart, Block->End, &NotTaken, &Taken);
|
|
ObfObfuscate(Obf, &NotTaken);
|
|
ObfObfuscate(Obf, &Taken);
|
|
ObfCombineOpaqueBranches(&NotTaken, &Taken, NcGenUnusedLabelId(Obf->GlobalBlock), NcGenUnusedLabelId(Obf->GlobalBlock));
|
|
ObfInsertOpaqueBranchBlock(NewBlockStart, Block->End, &NotTaken);
|
|
}
|
|
}
|
|
|
|
}
|
|
|