<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Just Maniak</title>
    <description>The latest articles on Forem by Just Maniak (@justmaniak).</description>
    <link>https://forem.com/justmaniak</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3731540%2F7bbdcfea-62b6-493f-b05d-73ebfac5449b.png</url>
      <title>Forem: Just Maniak</title>
      <link>https://forem.com/justmaniak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/justmaniak"/>
    <language>en</language>
    <item>
      <title>why i chose to build nyami instead of just using pyarmor</title>
      <dc:creator>Just Maniak</dc:creator>
      <pubDate>Mon, 13 Apr 2026 21:04:06 +0000</pubDate>
      <link>https://forem.com/justmaniak/why-i-chose-to-build-nyami-instead-of-just-using-pyarmor-3f6j</link>
      <guid>https://forem.com/justmaniak/why-i-chose-to-build-nyami-instead-of-just-using-pyarmor-3f6j</guid>
      <description>&lt;p&gt;before i built nyami i used pyarmor. a lot of people do.&lt;/p&gt;

&lt;p&gt;and honestly? for what it was designed to do, it's fine.&lt;/p&gt;

&lt;p&gt;but "fine" isn't the same as "works against someone who actually knows what they're doing."&lt;/p&gt;

&lt;p&gt;here's why i moved on from pyarmor and why i built something different.&lt;/p&gt;

&lt;p&gt;how pyarmor actually works:&lt;/p&gt;

&lt;p&gt;pyarmor encrypts your bytecode and wraps it in a bootstrap loader.&lt;br&gt;
at runtime, the loader decrypts the bytecode and hands it to the python interpreter.&lt;/p&gt;

&lt;p&gt;the idea is: encrypted bytecode = unreadable bytecode.&lt;/p&gt;

&lt;p&gt;and against someone with zero RE knowledge, that's true.&lt;/p&gt;

&lt;p&gt;the problem:&lt;/p&gt;

&lt;p&gt;the decryption has to happen somewhere.&lt;br&gt;
the key has to exist somewhere.&lt;br&gt;
the decrypted bytecode has to exist in memory at some point.&lt;/p&gt;

&lt;p&gt;and that's the attack surface.&lt;/p&gt;

&lt;p&gt;tools like frida can hook the python interpreter at the moment decryption happens and read your bytecode clean out of memory.&lt;/p&gt;

&lt;p&gt;pyarmor's protection is a locked box where the key is taped to the outside.&lt;br&gt;
if you know where to look, the lock doesn't matter.&lt;/p&gt;

&lt;p&gt;i know this because i broke pyarmor-protected scripts regularly during my year of python RE.&lt;br&gt;
it wasn't even the hard ones. it was just part of the normal process.&lt;/p&gt;

&lt;p&gt;what pyarmor doesn't do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;it doesn't break decompilers. pylingual still runs fine on pyarmor output in many configurations.&lt;/li&gt;
&lt;li&gt;it doesn't use polymorphism. the same obfuscation pattern means once you figure out the approach, every pyarmor-protected script is vulnerable the same way.&lt;/li&gt;
&lt;li&gt;it doesn't detect dynamic analysis. frida hooks work. patched interpreters work. the runtime protection isn't there.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;pyarmor's approach is: hide the code.&lt;br&gt;
the problem is that hidden code has to be unhidden to run.&lt;/p&gt;

&lt;p&gt;what i built differently with nyami:&lt;/p&gt;

&lt;p&gt;pytoc - python to C compilation&lt;br&gt;
this doesn't encrypt your bytecode. it eliminates it.&lt;br&gt;
your python gets converted to C and compiled to machine code.&lt;br&gt;
there's no python bytecode to decrypt because there's no python bytecode at all.&lt;br&gt;
a decompiler has nothing to work with. there's no key to find because there's nothing to decrypt.&lt;br&gt;
this is a fundamentally different approach, not a better version of the same thing.&lt;/p&gt;

&lt;p&gt;polymorphic everything&lt;br&gt;
every nyami build is unique.&lt;br&gt;
different obfuscation patterns, different keys, different structures.&lt;br&gt;
this matters because pyarmor's static approach means breaking one copy scales to every copy.&lt;br&gt;
with nyami, breaking one build tells you nothing about the next version.&lt;br&gt;
signature-based attacks don't work when there are no signatures.&lt;/p&gt;

&lt;p&gt;decompiler-breaking&lt;br&gt;
i spent a year understanding how pylingual, pycdc, and uncompyle6 work internally.&lt;br&gt;
then i built output that specifically breaks their analysis pipelines.&lt;br&gt;
not output that confuses them. output that crashes them.&lt;br&gt;
when the tool fails entirely, the attacker has to switch approaches entirely.&lt;br&gt;
this is different every build so it can't be fingerprinted.&lt;/p&gt;

&lt;p&gt;anti-tamper that actually watches runtime&lt;br&gt;
frida detection. hook detection. integrity checks.&lt;br&gt;
not just a startup check you can patch out.&lt;br&gt;
if someone tries to patch your running process, nyami crashes it.&lt;/p&gt;

&lt;p&gt;the honest comparison:&lt;/p&gt;

&lt;p&gt;pyarmor is good at stopping the most casual attackers.&lt;br&gt;
if someone has never done python RE before, pyarmor will slow them down.&lt;/p&gt;

&lt;p&gt;nyami is built by someone who was on the attacking side.&lt;br&gt;
i know the attacks because i used them.&lt;br&gt;
i know where pyarmor fails because i made it fail.&lt;/p&gt;

&lt;p&gt;the goal isn't protection that looks strong.&lt;br&gt;
it's protection that holds up against someone who actually tries.&lt;/p&gt;

&lt;p&gt;if you want to see the difference yourself:&lt;br&gt;
we post protected test files on discord after every update.&lt;br&gt;
try whatever tools you want.&lt;/p&gt;

&lt;p&gt;nyami.cc | discord.nyami.cc | documentation.nyami.cc&lt;/p&gt;

&lt;p&gt;got any questions? dm me on discord &lt;a class="mentioned-user" href="https://dev.to/justmaniak"&gt;@justmaniak&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>security</category>
      <category>obfuscate</category>
    </item>
    <item>
      <title>obfuscate python before selling: what you actually need to do</title>
      <dc:creator>Just Maniak</dc:creator>
      <pubDate>Mon, 13 Apr 2026 20:48:50 +0000</pubDate>
      <link>https://forem.com/justmaniak/obfuscate-python-before-selling-what-you-actually-need-to-do-4eh5</link>
      <guid>https://forem.com/justmaniak/obfuscate-python-before-selling-what-you-actually-need-to-do-4eh5</guid>
      <description>&lt;p&gt;so you built something in python and you want to sell it.&lt;/p&gt;

&lt;p&gt;maybe a discord bot. maybe an automation tool. maybe a SaaS script. maybe something niche that people in a specific community will pay for.&lt;/p&gt;

&lt;p&gt;before you ship it to your first customer, read this.&lt;/p&gt;

&lt;p&gt;because the thing most developers do before selling, "obfuscate it with X tool", probably isn't protecting anything.&lt;/p&gt;

&lt;p&gt;what most people do:&lt;/p&gt;

&lt;p&gt;they run their script through a basic obfuscator. the output looks scary. nested lambdas, encoded strings, everything renamed to _0x3f7a style names. looks protected.&lt;/p&gt;

&lt;p&gt;then they sell it.&lt;/p&gt;

&lt;p&gt;what actually happens:&lt;/p&gt;

&lt;p&gt;someone buys it, opens pylingual, uploads in the bytecode(.pyc).&lt;/p&gt;

&lt;p&gt;reads the logic in five minutes.&lt;/p&gt;

&lt;p&gt;i know because i did this for a year as a hobby. my friend kept buying paid scripts. i kept cracking them. price didn't matter. obfuscator used didn't matter. if it had python bytecode, i could read it.&lt;/p&gt;

&lt;p&gt;the obfuscation everyone uses doesn't work because it doesn't address how decompilers actually work.&lt;/p&gt;

&lt;p&gt;decompilers don't care about variable names. they don't care about string encoding. they reconstruct logic from bytecode patterns. and as long as your bytecode is there and readable, the obfuscation on top is irrelevant.&lt;/p&gt;

&lt;p&gt;what you actually need before selling:&lt;/p&gt;

&lt;p&gt;minimum viable protection:&lt;br&gt;
bytecode encryption with polymorphic keys. this makes the decompiler fail — not produce messy output, actually fail to read the file. and because the keys are different every build, once someone breaks one copy they have to start over with the next version.&lt;/p&gt;

&lt;p&gt;recommended protection:&lt;br&gt;
python to C compilation. this eliminates the bytecode entirely. your source is compiled to machine code. reversing it requires disassembly, not a python decompiler. this is a completely different threat model that makes casual attackers give up immediately.&lt;/p&gt;

&lt;p&gt;full protection:&lt;br&gt;
combine the above with a decompiler-breaker (output specifically designed to crash pylingual and pycdc internally) and anti-tamper (detects hooking and frida at runtime). this covers every practical attack vector.&lt;/p&gt;

&lt;p&gt;the honest version:&lt;/p&gt;

&lt;p&gt;if you sell something valuable enough, someone will eventually try to crack it. that's just reality.&lt;/p&gt;

&lt;p&gt;but there's a massive difference between "anyone with pylingual and 5 minutes can read your code" and "cracking this requires weeks of serious RE work."&lt;/p&gt;

&lt;p&gt;most people trying to steal a $20/month script don't have weeks of serious RE work in them. make the economics not work and they move on.&lt;/p&gt;

&lt;p&gt;one thing to do before you launch:&lt;/p&gt;

&lt;p&gt;test your own protection. download pylingual(or use the web version). run it against your protected output. if you can read your logic, so can your customers.&lt;/p&gt;

&lt;p&gt;if pylingual crashes or produces garbage, you're in a much better position.&lt;/p&gt;

&lt;p&gt;we post openly available protected test files on discord after every nyami update. you can test our output yourself with whatever tools you want. no trust required.&lt;/p&gt;

&lt;p&gt;nyami.cc | discord.nyami.cc | documentation.nyami.cc&lt;/p&gt;

&lt;p&gt;got any questions? dm me on discord &lt;a class="mentioned-user" href="https://dev.to/justmaniak"&gt;@justmaniak&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>obfuscate</category>
      <category>beginners</category>
    </item>
    <item>
      <title>python intellectual property protection: a practical guide for developers selling code</title>
      <dc:creator>Just Maniak</dc:creator>
      <pubDate>Mon, 13 Apr 2026 20:44:09 +0000</pubDate>
      <link>https://forem.com/justmaniak/python-intellectual-property-protection-a-practical-guide-for-developers-selling-code-2j29</link>
      <guid>https://forem.com/justmaniak/python-intellectual-property-protection-a-practical-guide-for-developers-selling-code-2j29</guid>
      <description>&lt;p&gt;if you sell python software, your source code is your product.&lt;/p&gt;

&lt;p&gt;and right now, there's a good chance it's readable by anyone who downloads it.&lt;/p&gt;

&lt;p&gt;i'm not being dramatic. i spent a year reversing paid python scripts as a hobby. scripts people were paying $5-50/month for. scripts with real commercial value. i could read most of them in minutes with free tools.&lt;/p&gt;

&lt;p&gt;that's an IP protection problem.&lt;/p&gt;

&lt;p&gt;why python is uniquely vulnerable:&lt;/p&gt;

&lt;p&gt;most compiled languages compile to machine code. reverse engineering machine code is hard, it requires disassemblers, significant time, and serious skill.&lt;/p&gt;

&lt;p&gt;python compiles to bytecode. bytecode is high-level. it preserves your logic, your structure, even reconstructable approximations of your original source. tools like pylingual were specifically built to take bytecode and give you back something close to the original python.&lt;/p&gt;

&lt;p&gt;this means if you ship a .py file or a pyinstaller executable without proper protection, your source is readable by anyone with a free tool and 5 minutes.&lt;/p&gt;

&lt;p&gt;the real-world impact:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your competitor downloads your tool, reads your source, and ships a clone&lt;/li&gt;
&lt;li&gt;someone buys your script once and sells cracked copies for less&lt;/li&gt;
&lt;li&gt;someone removes your license check and distributes it free&lt;/li&gt;
&lt;li&gt;someone reads your API integration logic and replicates your service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;these aren't theoretical. they happen. and they happen specifically because python's default protection is essentially nothing.&lt;/p&gt;

&lt;p&gt;what real IP protection looks like:&lt;/p&gt;

&lt;p&gt;native compilation&lt;br&gt;
the strongest protection is eliminating python bytecode entirely. converting python to C and compiling to machine code means there's no bytecode to decompile. your logic exists as native machine code. reversing it requires disassembly skills, not a python decompiler. this is a completely different threat model.&lt;/p&gt;

&lt;p&gt;polymorphic protection&lt;br&gt;
static obfuscation breaks once. once someone figures out how to reverse one copy of your script, every copy is broken. polymorphic protection means every build is different, different obfuscation patterns, different keys, different structures. breaking one copy tells you nothing about the next version.&lt;/p&gt;

&lt;p&gt;decompiler resistance&lt;br&gt;
targeted techniques that make the specific tools attackers use (pylingual, pycdc, uncompyle6) fail on your output. when the decompiler crashes or produces garbage, the casual attacker stops. this is different from obfuscating the output, it means breaking the tool's analysis pipeline entirely.&lt;/p&gt;

&lt;p&gt;runtime integrity&lt;br&gt;
protection that continues working after deployment. detecting when someone is trying to hook or instrument your running process, and failing loudly when tampered with. this stops the "run it and intercept" approach that bypasses static protection.&lt;/p&gt;

&lt;p&gt;what to do today:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;assume your current protection is inadequate unless you've tested it specifically against modern decompilers&lt;/li&gt;
&lt;li&gt;test it yourself, download pylingual and run it(or use the web version) against your protected output. if you can read the logic, so can anyone else&lt;/li&gt;
&lt;li&gt;move to protection that actually works in your case&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;i built nyami specifically because i spent a year on the attacking side and could see exactly how every existing obfuscator failed. the protection covers every layer: native compilation, polymorphic bytecode encryption, decompiler-breaking, anti-tamper and many more not mentioned.&lt;/p&gt;

&lt;p&gt;your code is your livelihood. it deserves protection that actually works.&lt;/p&gt;

&lt;p&gt;nyami.cc | documentation.nyami.cc | discord.nyami.cc&lt;/p&gt;

&lt;p&gt;got any questions? dm me on discord &lt;a class="mentioned-user" href="https://dev.to/justmaniak"&gt;@justmaniak&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>how to stop someone from stealing your python code</title>
      <dc:creator>Just Maniak</dc:creator>
      <pubDate>Mon, 13 Apr 2026 20:38:38 +0000</pubDate>
      <link>https://forem.com/justmaniak/how-to-stop-someone-from-stealing-your-python-code-44ni</link>
      <guid>https://forem.com/justmaniak/how-to-stop-someone-from-stealing-your-python-code-44ni</guid>
      <description>&lt;p&gt;let's skip the theory and get to what actually works.&lt;/p&gt;

&lt;p&gt;if you sell python scripts, deploy python tools, or just don't want your code readable by anyone who downloads it, this is for you.&lt;/p&gt;

&lt;p&gt;first, understand what you're actually protecting against:&lt;/p&gt;

&lt;p&gt;most people stealing python code aren't elite hackers. they're developers who:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;want to understand how your logic works so they can copy it&lt;/li&gt;
&lt;li&gt;want to remove your license checks so they can use it without paying&lt;/li&gt;
&lt;li&gt;want to resell a cracked version of your paid tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;these people are not running custom exploits. they're opening pylingual and uploading in your bytecode(.pyc). it takes them two minutes if you have no real protection.&lt;/p&gt;

&lt;p&gt;that's the actual threat. not a nation-state attacker. a bored developer with a decompiler.&lt;/p&gt;

&lt;p&gt;what doesn't work (and why):&lt;/p&gt;

&lt;p&gt;variable obfuscation&lt;br&gt;
renaming calculate_price to x7a3f doesn't matter. decompilers reconstruct the logic, not the names. your code is just as readable, just harder to skim.&lt;/p&gt;

&lt;p&gt;string encoding&lt;br&gt;
base64, xor, rot13 on your strings. trivially reversible. anyone who finds the encoding finds the decoder right next to it. two minutes to reverse.&lt;/p&gt;

&lt;p&gt;most obfuscators on the market&lt;br&gt;
i tested this. i spent a year cracking paid scripts protected with real commercial obfuscators. the output looked scary - nested lambdas, encoded strings, renamed everything. i still cracked them in minutes with pylingual. because the bytecode was still there, readable, unencrypted.&lt;/p&gt;

&lt;p&gt;the obfuscators looked like protection. they weren't.&lt;/p&gt;

&lt;p&gt;pyinstaller alone&lt;br&gt;
a lot think packaging an exe hides the code. it doesn't. pyinstxtractor extracts the bytecodes in 30 seconds. then you decompile normally.&lt;/p&gt;

&lt;p&gt;what actually works:&lt;/p&gt;

&lt;p&gt;python to C compilation (the best option)&lt;br&gt;
convert your python to C code and compile it to machine code. there's no python bytecode anymore. decompilers have nothing to work with. your logic exists as compiled native code that requires serious reverse engineering skill to understand, not five minutes with a python decompiler.&lt;/p&gt;

&lt;p&gt;bytecode encryption with polymorphic keys&lt;br&gt;
encrypt the actual bytecode and use a different key every build. even if someone breaks one copy, they have to start over with the next version. signatures don't work because every build is different.&lt;/p&gt;

&lt;p&gt;decompiler-breaking&lt;br&gt;
build output that specifically causes pylingual, pycdc, and similar tools to crash or fail. when the tool fails, the casual attacker moves on. this is different from just confusing the output, it means understanding how decompilers work internally and breaking their analysis pipeline.&lt;/p&gt;

&lt;p&gt;anti-tamper that watches for hooking&lt;br&gt;
the last line of defense. when someone uses frida or a patched interpreter to hook your running process, detect it and crash. make the failure loud and unhelpful. this stops the dynamic analysis approach when static decompilation fails.&lt;/p&gt;

&lt;p&gt;the honest answer:&lt;/p&gt;

&lt;p&gt;nothing is truly uncrackable. if someone dedicates serious time and skill they can reverse anything.&lt;/p&gt;

&lt;p&gt;but that's not the goal. the goal is making your code not worth cracking for the 99% of people who'd consider it. if breaking your protection takes 3 weeks of serious work instead of 5 minutes, most people give up. the economics stop making sense.&lt;/p&gt;

&lt;p&gt;that's what real protection looks like.&lt;/p&gt;

&lt;p&gt;i built nyami after spending a year on the other side of this problem, cracking paid scripts and understanding exactly why every protection i encountered failed. it covers every layer above: pytoc, bytecode encryption with polymorphic keys, decompiler-breaking, and anti-tamper.&lt;/p&gt;

&lt;p&gt;if you want to see what properly protected python looks like, we post test files on discord after every update. try to decompile them yourself with whatever tools you want.&lt;/p&gt;

&lt;p&gt;nyami.cc | discord.nyami.cc&lt;/p&gt;

&lt;p&gt;got any questions? dm on discord &lt;a class="mentioned-user" href="https://dev.to/justmaniak"&gt;@justmaniak&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>beginners</category>
      <category>security</category>
    </item>
    <item>
      <title>python reverse engineering protection: what actually works in 2026</title>
      <dc:creator>Just Maniak</dc:creator>
      <pubDate>Mon, 13 Apr 2026 20:33:15 +0000</pubDate>
      <link>https://forem.com/justmaniak/python-reverse-engineering-protection-what-actually-works-in-2026-3p59</link>
      <guid>https://forem.com/justmaniak/python-reverse-engineering-protection-what-actually-works-in-2026-3p59</guid>
      <description>&lt;p&gt;i spent over a year on the attacking side of python RE before i switched to building defenses.&lt;/p&gt;

&lt;p&gt;so when i say "this doesn't work" i mean i've personally used the attacks.&lt;/p&gt;

&lt;p&gt;here's what the threat model actually looks like and what protection means against each layer.&lt;/p&gt;

&lt;p&gt;the attacks, in order of how easy they are:&lt;/p&gt;

&lt;p&gt;layer 1 - static decompilation (easiest)&lt;/p&gt;

&lt;p&gt;tools: pylingual, pycdc, uncompyle6, decompile3&lt;/p&gt;

&lt;p&gt;what they do: take your .pyc bytecode and reconstruct something close to your original source&lt;/p&gt;

&lt;p&gt;how long it takes: 30 seconds&lt;/p&gt;

&lt;p&gt;protection that stops it: bytecode encryption, pytoc (python to C compilation), decompiler-breaking techniques that make these tools crash on your specific output&lt;/p&gt;

&lt;p&gt;protection that doesn't stop it: variable renaming, string encoding, basic obfuscation&lt;/p&gt;

&lt;p&gt;layer 2 - pyinstaller extraction (easy)&lt;/p&gt;

&lt;p&gt;tools: pyinstxtractor + decompiler&lt;/p&gt;

&lt;p&gt;what they do: unpack your exe, extract the bytecodes, then decompile from there&lt;/p&gt;

&lt;p&gt;how long it takes: 2-5 minutes&lt;/p&gt;

&lt;p&gt;protection that stops it: encrypting the bytecodes inside the bundle, making extraction fail or produce garbage, converting to native code with pytoc&lt;/p&gt;

&lt;p&gt;protection that doesn't stop it: pyinstaller alone, most off-the-shelf obfuscators applied before packing&lt;/p&gt;

&lt;p&gt;layer 3 - dynamic analysis / hooking (medium)&lt;/p&gt;

&lt;p&gt;tools: frida, x64dbg, custom python hooks, patched interpreters&lt;/p&gt;

&lt;p&gt;what they do: instrument the running process, intercept function calls, read decrypted code from memory at runtime&lt;/p&gt;

&lt;p&gt;how long it takes: hours to days depending on skill&lt;/p&gt;

&lt;p&gt;protection that stops it: anti-tamper that detects hooks, debugger detection, integrity checks that crash the process when tampering is detected, checks that fire from external files and can't be trivially patched out&lt;/p&gt;

&lt;p&gt;protection that doesn't stop it: anything that only checks once at startup, anything that's easy to patch with a hex editor&lt;/p&gt;

&lt;p&gt;layer 4 - full RE with serious dedication (hard)&lt;/p&gt;

&lt;p&gt;tools: all of the above, custom tooling, time&lt;/p&gt;

&lt;p&gt;what they do: systematic reverse engineering of the whole protection stack&lt;/p&gt;

&lt;p&gt;how long it takes: days -&amp;gt; weeks&lt;/p&gt;

&lt;p&gt;protection that stops it: honestly, nothing stops a truly dedicated attacker with unlimited time. but the goal isn't "impossible" it's "not worth it." at weeks of work for a script that costs $20/month, most people stop.&lt;/p&gt;

&lt;p&gt;what this means practically:&lt;/p&gt;

&lt;p&gt;if you protect with basic obfuscation you're stopping nobody. a bored teenager with pylingual cracks it in minutes.&lt;/p&gt;

&lt;p&gt;if you protect with real bytecode encryption + anti-tamper + decompiler-breaking, you're stopping probably 99% of real-world attempts. the remaining 1% have to invest weeks of serious work, which just doesn't happen for most targets.&lt;/p&gt;

&lt;p&gt;that's the gap that matters.&lt;/p&gt;

&lt;p&gt;i built nyami specifically to cover layers 1-3 properly. every build is polymorphic so signature-based attacks don't scale. the decompiler-breaker is different per build. the anti-tamper watches for frida and external hooks, not just in-process ones.&lt;/p&gt;

&lt;p&gt;protection isn't magic. but it doesn't have to be magic to be effective.&lt;/p&gt;

&lt;p&gt;nyami.cc | discord.nyami.cc | documentation.nyami.cc&lt;/p&gt;

&lt;p&gt;got any questions? ask me on discord &lt;a class="mentioned-user" href="https://dev.to/justmaniak"&gt;@justmaniak&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>security</category>
      <category>obfuscate</category>
    </item>
    <item>
      <title>My python script was decompiled. here's what i learned.</title>
      <dc:creator>Just Maniak</dc:creator>
      <pubDate>Mon, 13 Apr 2026 20:27:48 +0000</pubDate>
      <link>https://forem.com/justmaniak/my-python-script-was-decompiled-heres-what-i-learned-khk</link>
      <guid>https://forem.com/justmaniak/my-python-script-was-decompiled-heres-what-i-learned-khk</guid>
      <description>&lt;p&gt;so this happens more than people talk about.&lt;/p&gt;

&lt;p&gt;you sell a script, or you share a tool, or you release something you spent months building.&lt;/p&gt;

&lt;p&gt;and then someone sends you your own source code back.&lt;/p&gt;

&lt;p&gt;or you find it on a github repo you've never seen. or someone's selling a "cracked" version of your paid tool for free.&lt;/p&gt;

&lt;p&gt;it's a horrible feeling. and the worst part is it's almost always preventable.&lt;/p&gt;

&lt;p&gt;here's what actually happened and why:&lt;/p&gt;

&lt;p&gt;the decompilation problem:&lt;/p&gt;

&lt;p&gt;python compiles your code to bytecode (.pyc files) before running it.&lt;/p&gt;

&lt;p&gt;bytecode is not source code. but it's close enough.&lt;/p&gt;

&lt;p&gt;tools like pylingual, pycdc, and uncompyle6 can take that bytecode and reconstruct something very close to your original source. variable names, logic, structure. all of it.&lt;/p&gt;

&lt;p&gt;if you shipped a .py file or a pyinstaller exe with no real protection, anyone with five minutes and a decompiler has your source code.&lt;/p&gt;

&lt;p&gt;and i know this because i used to be the person doing it.&lt;/p&gt;

&lt;p&gt;what doesn't help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;renaming your variables to x1, x2, a, b — decompilers don't care about names, they care about bytecode&lt;/li&gt;
&lt;li&gt;base64 encoding your strings — easily decodable lmao&lt;/li&gt;
&lt;li&gt;using a basic obfuscator — most of them just do the above and call it protection&lt;/li&gt;
&lt;li&gt;pyinstaller alone — the exe is just a container, extractable in minutes with pyinstxtractor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;i cracked tons of paid scripts using exactly these tools. scripts people were paying monthly for. scripts that were "supposed" to be protected.&lt;/p&gt;

&lt;p&gt;the obfuscation was just bad.&lt;/p&gt;

&lt;p&gt;what actually helps:&lt;/p&gt;

&lt;p&gt;real protection means making the decompiler fail, not just making the output messy.&lt;/p&gt;

&lt;p&gt;the approach that works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;converting python to C and compiling to machine code (no bytecode = nothing to decompile)&lt;/li&gt;
&lt;li&gt;encrypting bytecode with polymorphic keys so every build is different&lt;/li&gt;
&lt;li&gt;specifically targeting the internal pipelines of decompilers so they crash instead of output&lt;/li&gt;
&lt;li&gt;anti-tamper that detects hooking and instrumentation at runtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;if your source got decompiled, it's not your fault for writing python. it's that the protection you trusted wasn't designed by someone who actually understands how the attacks work.&lt;/p&gt;

&lt;p&gt;what to do right now:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;check if your deployed files are already floating around — search github for unique strings from your codebase&lt;/li&gt;
&lt;li&gt;rotate any hardcoded API keys or credentials immediately&lt;/li&gt;
&lt;li&gt;rebuild your protection from scratch with something that actually understands decompilation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;the damage is done for existing deployments. but the next version can be protected properly.&lt;/p&gt;

&lt;p&gt;i built nyami after going through exactly this process — understanding every attack vector, then building defenses that actually counter them.&lt;/p&gt;

&lt;p&gt;if you want to test what proper protection looks like, we post protected test files on our discord after every update. try to decompile them yourself.&lt;/p&gt;

&lt;p&gt;nyami.cc | discord.nyami.cc&lt;/p&gt;

&lt;p&gt;happy to answer questions, if you want to contact me directly on discord &lt;a class="mentioned-user" href="https://dev.to/justmaniak"&gt;@justmaniak&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Just Maniak</dc:creator>
      <pubDate>Sun, 25 Jan 2026 15:04:59 +0000</pubDate>
      <link>https://forem.com/justmaniak/-59ag</link>
      <guid>https://forem.com/justmaniak/-59ag</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/justmaniak" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3731540%2F7bbdcfea-62b6-493f-b05d-73ebfac5449b.png" alt="justmaniak"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/justmaniak/i-spent-a-year-cracking-paid-python-scripts-so-i-built-an-obfuscator-that-actually-works-4j02" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;I spent a year+ cracking paid Python scripts, so I built an obfuscator that actually works&lt;/h2&gt;
      &lt;h3&gt;Just Maniak ・ Jan 25&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#python&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#obfuscate&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>programming</category>
      <category>python</category>
      <category>obfuscate</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I spent a year+ cracking paid Python scripts, so I built an obfuscator that actually works</title>
      <dc:creator>Just Maniak</dc:creator>
      <pubDate>Sun, 25 Jan 2026 15:02:44 +0000</pubDate>
      <link>https://forem.com/justmaniak/i-spent-a-year-cracking-paid-python-scripts-so-i-built-an-obfuscator-that-actually-works-4j02</link>
      <guid>https://forem.com/justmaniak/i-spent-a-year-cracking-paid-python-scripts-so-i-built-an-obfuscator-that-actually-works-4j02</guid>
      <description>&lt;p&gt;so about a year and a half ago i got bored and started learning python RE. &lt;br&gt;
like actually learning it, going through decompilers, understanding bytecode, &lt;br&gt;
the whole thing.&lt;/p&gt;

&lt;p&gt;but here's the thing that really sent me down the rabbit hole: my friend kept &lt;br&gt;
sending me paid python scripts he'd bought. cheap/expensive ones. scripts people &lt;br&gt;
were actually paying for.&lt;/p&gt;

&lt;p&gt;and i just... cracked them. all of them.&lt;/p&gt;

&lt;p&gt;like genuinely every single paid script he sent me, i could break through the &lt;br&gt;
obfuscation/security it had in minutes.&lt;/p&gt;

&lt;p&gt;and that's when i realized: the obfuscators protecting these aren't actually &lt;br&gt;
protecting anything.&lt;/p&gt;

&lt;p&gt;the reality:&lt;/p&gt;

&lt;p&gt;i'm talking scripts that cost $5-50+ monthly. scripts with/without obfuscation built in. &lt;br&gt;
scripts that were supposed to be "secure" or "uncrackable" or whatever.&lt;/p&gt;

&lt;p&gt;none of them were.&lt;/p&gt;

&lt;p&gt;because the obfuscation they used was just... bad. like really bad.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;they were just renaming variables and encoding strings&lt;/li&gt;
&lt;li&gt;decompilers don't care about variable names&lt;/li&gt;
&lt;li&gt;string encoding is trivial to reverse&lt;/li&gt;
&lt;li&gt;most of them you could just pylingual and read the logic in minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;so i'm sitting there looking at all these paid scripts that i was able to &lt;br&gt;
completely reverse engineer, and i'm thinking: "how is this even possible?"&lt;/p&gt;

&lt;p&gt;like people are paying money monthly for these scripts and anyone can break them in &lt;br&gt;
5 minutes?&lt;/p&gt;

&lt;p&gt;that's when i asked the real questions:&lt;/p&gt;

&lt;p&gt;if the obfuscation is this weak on paid scripts, what's the obfuscator doing?&lt;/p&gt;

&lt;p&gt;how bad must the obfuscation market be if people are selling protected scripts &lt;br&gt;
with this level of protection?&lt;/p&gt;

&lt;p&gt;and most importantly: what would real protection actually look like?&lt;/p&gt;

&lt;p&gt;so i spent a year researching python security and obfuscation.&lt;/p&gt;

&lt;p&gt;because if i can break paid scripts that are supposed to be protected, then &lt;br&gt;
the obfuscators everyone's using are fundamentally broken.&lt;/p&gt;

&lt;p&gt;what i learned:&lt;/p&gt;

&lt;p&gt;most obfuscators are made by people who understand code but don't understand &lt;br&gt;
attacks.&lt;/p&gt;

&lt;p&gt;they use static obfuscation so signature detection works. once you break one &lt;br&gt;
copy, every copy is broken.&lt;/p&gt;

&lt;p&gt;they don't use polymorphism. they don't encrypt the bytecode. they don't think &lt;br&gt;
about actual defense in depth.&lt;/p&gt;

&lt;p&gt;the market is broken.&lt;/p&gt;

&lt;p&gt;so i built nyami:&lt;/p&gt;

&lt;p&gt;because if i can break paid scripts protected with current obfuscators, then &lt;br&gt;
developers need real protection.&lt;br&gt;
full feature list @ &lt;a href="https://nyami.cc/features" rel="noopener noreferrer"&gt;https://nyami.cc/features&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;the 4 core features:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Python To C (PYTOC)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;literally converts your python to C, then compiles it to machine code&lt;/li&gt;
&lt;li&gt;your python source code basically doesn't exist anymore&lt;/li&gt;
&lt;li&gt;still deploys as one .py file like normal&lt;/li&gt;
&lt;li&gt;best one imo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bytecode Encryption&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;encrypts the actual compiled bytecode&lt;/li&gt;
&lt;li&gt;and the keys are polymorphic so every build is different&lt;/li&gt;
&lt;li&gt;decompilers literally cannot read encrypted bytecode&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Decompiler Breaker&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;i spent time understanding how pycdc, pylingual, uncompyle6 actually work&lt;/li&gt;
&lt;li&gt;the tools that broke every paid script i tested&lt;/li&gt;
&lt;li&gt;then built stuff specifically to break them&lt;/li&gt;
&lt;li&gt;and it's different every build so signatures don't work&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Polymorphic Obfuscator&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;every build is unique&lt;/li&gt;
&lt;li&gt;v1.0 and v1.1 look different even though they do the same thing&lt;/li&gt;
&lt;li&gt;this is why paid scripts fail, they use the same obfuscation pattern which if broken once, its over&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;real talk:&lt;/p&gt;

&lt;p&gt;obfuscation isn't magic. if someone dedicates serious time they can probably &lt;br&gt;
still reverse your code. but that's not the point.&lt;/p&gt;

&lt;p&gt;right now if you sell a python script protected with basic obfuscation, i can &lt;br&gt;
probably crack it in minutes. with nyami it would take weeks of serious work, which at that point&lt;br&gt;
most give up on even trying, because lets be real most of the times is not that important.&lt;/p&gt;

&lt;p&gt;that's the difference that matters.&lt;/p&gt;

&lt;p&gt;pricing:&lt;/p&gt;

&lt;p&gt;€1 per token if you want to just test it out. €20/month if you're actually &lt;br&gt;
protecting production code or selling scripts.&lt;/p&gt;

&lt;p&gt;i didn't want to gatekeep this. if i could break paid scripts, small devs &lt;br&gt;
should have access to something that actually works.&lt;/p&gt;

&lt;p&gt;link: nyami.cc&lt;br&gt;
you can also find nyami on discord @ &lt;a href="https://discord.nyami.cc" rel="noopener noreferrer"&gt;https://discord.nyami.cc&lt;/a&gt;&lt;br&gt;
and if you want to read documentation is @ &lt;a href="https://documentation.nyami.cc" rel="noopener noreferrer"&gt;https://documentation.nyami.cc&lt;/a&gt;&lt;br&gt;
if you want to try deobfuscating one of our files we offer test files on discord&lt;br&gt;
after almost every update, we also have the same file posted open-source on there&lt;/p&gt;

&lt;p&gt;honestly just tired of seeing people trust broken tools so i built something &lt;br&gt;
better.&lt;/p&gt;

&lt;p&gt;happy to answer questions if anyone's curious about the technical stuff or &lt;br&gt;
python security in general. or if you want to tell me why i'm wrong lol&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>obfuscate</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
