Skip to content

VM-Auth-Challenge A proof-of-concept for a self-contained, anti-reversing authentication challenge using a custom C++ virtual machine.

Notifications You must be signed in to change notification settings

Vu2n/Code-Virtualizer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

What It Is

The provided code is a C++ virtual machine (VM) with a custom instruction set, designed as a proof-of-concept for a software authentication challenge. The project's primary goal is to demonstrate a sophisticated form of software protection and anti-reversing techniques.

Why It Was Created

This project was created to show how a simple virtual machine can be used to obfuscate and protect critical application logic. Instead of writing authentication code directly in native machine language where it's easy to analyze, the logic is converted into a custom bytecode format. This custom format is deliberately difficult for standard reverse engineering tools (like disassemblers or debuggers) to understand. The key features of the design are:

  • Obfuscation: The opcodes are not directly mapped to their functions. A mathematical formula, (opcode * 17 + 3) % 50, is used to dispatch handlers, making it harder to determine what each instruction does without reversing the VM itself.
  • Self-Modifying Code: The VM's own bytecode is modified at runtime using the VM_MUTATE instruction. This means a static dump of the code is insufficient for analysis, as the instructions change after being executed.
  • Anti-Tampering: The code uses checksums (VM_CHECKSUM_CHECK) to verify its integrity at runtime. If any part of the critical logic is modified, the checksum will fail, and the program will halt.
  • Anti-Debugging: A VM_TIMING_CHECK is included to detect if the program is running too slowly, which is a common side effect of being in a debugger. This can be used to trigger an integrity failure.
  • Dynamic Key Derivation: The correct authentication key is not a static string or value. It's calculated at runtime by performing a series of bitwise operations (XOR and rotate-left) on checksums of the self-modifying bytecode. This ensures the key is unique to the specific, unmodified state of the program.

What It Could Be Used For

While this is a proof-of-concept, the techniques demonstrated here are directly applicable to a variety of real-world scenarios where software protection is crucial:

  • Digital Rights Management (DRM): Protecting license keys, preventing unauthorized copying, and enforcing usage restrictions.
  • Cheating Prevention in Games: The VM can be used to execute critical game logic, making it extremely difficult for players to reverse engineer and create cheats like aimbots or wallhacks.
  • Malware Obfuscation: Malicious software often uses similar techniques to hide its true function and evade detection by antivirus software.
  • Intellectual Property Protection: Businesses can use these methods to protect proprietary algorithms or sensitive data processing logic embedded in their software, making it harder for competitors to steal.

Try it here

https://crackmes.one/crackme/68a0a83c8fac2855fe6fb666

About

VM-Auth-Challenge A proof-of-concept for a self-contained, anti-reversing authentication challenge using a custom C++ virtual machine.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages