- Focused on what it does best: making things slightly uglier.
- This program relies on Regex to "detect" variable/function names, rather than using a Abstract Syntax Tree.
| before | after |
|---|---|
![]() |
![]() |
- Removes both C-style (
/* */) and C++-style (//) comments - Obfuscates:
- Global and local variables
- Function names
- Function parameters
- Object instances (e.g.,
Servo myServo;)
- Ignores Arduino reserved keywords and function names
- Outputs clean, comment-free obfuscated code
- Python 3.13
(1) Clone this project
git clone https://github.com/brianoy/SketchObfus.git(2) Start obfuscated the code
python SketchObfus.py your_sketch.inoThis generates an obfuscated version of the sketch named your_sketch_obf.ino.
You can also specify a custom output filename:
python SketchObfus.py your_sketch.ino obfuscated_output.ino(1) Clone this project
git clone https://github.com/brianoy/SketchObfus.git(2) Compile the python script
pip install auto-py-to-exeCompiling with "Nuitka" may cause Windows Defender to flag the generated .exe as a malicious file, use pyinstaller instead.
pyinstaller --noconfirm --onefile --console .\SketchObfus.py(3) Start obfuscated the code
You will see the exe file under dist folder, open a cmd window and execute it by:
SketchObfus.exe your_sketch.inoYou can also specify a custom output filename:
SketchObfus.exe your_sketch.ino obfuscated_output.inoBefore:
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}After:
int _0xA3B1C2D4 = 13;
void setup() {
pinMode(_0xA3B1C2D4, OUTPUT);
}
void loop() {
digitalWrite(_0xA3B1C2D4, HIGH);
delay(1000);
digitalWrite(_0xA3B1C2D4, LOW);
delay(1000);
}- Not suitable for sketches that rely on external macro-generated names or dynamically referenced variables.
- Does not analyze code semantically — relies solely on regex patterns.
- 🐛 Found a bug? Feel free to open an issue.

