<?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>DEV Community: Mikhail Chernov</title>
    <description>The latest articles on DEV Community by Mikhail Chernov (@2m12).</description>
    <link>https://dev.to/2m12</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3982906%2F4f11b2b6-f64d-4859-bcb4-6c7f7c2629d3.jpg</url>
      <title>DEV Community: Mikhail Chernov</title>
      <link>https://dev.to/2m12</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/2m12"/>
    <language>en</language>
    <item>
      <title>How to look inside a .exe compiled with Nuitka? A new open‑source tool</title>
      <dc:creator>Mikhail Chernov</dc:creator>
      <pubDate>Sun, 14 Jun 2026 06:45:34 +0000</pubDate>
      <link>https://dev.to/2m12/how-to-look-inside-a-exe-compiled-with-nuitka-a-new-open-source-tool-32dm</link>
      <guid>https://dev.to/2m12/how-to-look-inside-a-exe-compiled-with-nuitka-a-new-open-source-tool-32dm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hi everyone!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ve always wondered how to disassemble an .exe file compiled with Nuitka. I knew there were tools like IDA&amp;nbsp;PRO, Cremniy, and HxD, but I decided to try building an open‑source project. That’s how I created DeNuitkanizator.&lt;/p&gt;

&lt;p&gt;Important: DeNuitkanizator is an analyzer, not a decompiler. It extracts only the available information from the binary.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2F0343054u5x0sb6ro64l8.png" class="article-body-image-wrapper"&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%2Farticles%2F0343054u5x0sb6ro64l8.png" alt="Thumbnail" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  History of creation
&lt;/h2&gt;

&lt;p&gt;At first, I thought there must already be such decompilers. Personally, I couldn’t find any. So I started thinking about how to make one. I remembered the &lt;strong&gt;pefile&lt;/strong&gt; and &lt;strong&gt;Capstone&lt;/strong&gt; libraries. After I finally managed to build something, I realized my program could also parse PyInstaller .exe files and even native binaries. I found that really cool, so I published it on GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is this needed?
&lt;/h2&gt;

&lt;p&gt;Many developers use &lt;strong&gt;Nuitka&lt;/strong&gt; to compile Python scripts into executable files. &lt;strong&gt;Nuitka&lt;/strong&gt; translates Python code into C++ and then compiles it into an .exe file. This reduces the file size and speeds up startup time.&lt;/p&gt;

&lt;p&gt;But unlike &lt;strong&gt;PyInstaller&lt;/strong&gt;, where you can use &lt;strong&gt;pydumpck&lt;/strong&gt;, full reverse decompilation is nearly impossible with &lt;strong&gt;Nuitka&lt;/strong&gt; because it has better protection against reverse engineering. However, you can still extract useful data from it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;paths, URLs, email addresses;&lt;/li&gt;
&lt;li&gt;names of modules and variables;&lt;/li&gt;
&lt;li&gt;metadata about the compiler and protection;&lt;/li&gt;
&lt;li&gt;signs of anti‑debugging techniques;&lt;/li&gt;
&lt;li&gt;compressed data blocks (zstd, zlib).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s exactly why I created DeNuitkanizator.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2F5gz5m7h6xlltc6gnkwfi.png" class="article-body-image-wrapper"&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%2Farticles%2F5gz5m7h6xlltc6gnkwfi.png" alt="TUI Interface" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What can DeNuitkanizator do?
&lt;/h2&gt;

&lt;p&gt;The tool has (I think) good functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detects the packer used to package the .exe file (currently detects whether it’s Nuitka or not);&lt;/li&gt;
&lt;li&gt;Determines the Python code version (at least my program includes magic numbers for different versions);&lt;/li&gt;
&lt;li&gt;Extracts names of modules and variables;&lt;/li&gt;
&lt;li&gt;Analyzes protection mechanisms &lt;strong&gt;(DEP, ASLR)&lt;/strong&gt; and searches for anti‑debugging mechanisms;&lt;/li&gt;
&lt;li&gt;Unpacks data (zstd, zlib) and searches for compressed blocks (gzip, bzip2, zip);&lt;/li&gt;
&lt;li&gt;Disassembles the entry point with comments and finds cross‑references to strings;&lt;/li&gt;
&lt;li&gt;Calculates hashes (MD5, SHA1, SHA256) and identifies the compiler (MinGW GCC, MSVC, Clang/LLVM);&lt;/li&gt;
&lt;li&gt;Checks the architecture (x86/x64) and searches for packed sections or sections with high entropy;&lt;/li&gt;
&lt;li&gt;Automatically checks for updates via the GitHub API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;You can find more details in the repository.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works: a brief technical breakdown
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;The file is read into memory, and pefile parses the PE headers;&lt;/li&gt;
&lt;li&gt;Searches for &lt;strong&gt;Nuitka&lt;/strong&gt; signatures (8 patterns) + analyzes entropy in .rsrc;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regex search&lt;/strong&gt; for strings, modules, paths, IP/URL/email;&lt;/li&gt;
&lt;li&gt;Searches for P*&lt;em&gt;ython magic numbers (42 0D 0D 0A, etc.)&lt;/em&gt;* + marshal.loads;&lt;/li&gt;
&lt;li&gt;Searches and unpacks &lt;strong&gt;zstd (28 B5 2F FD) and zlib (78 9C, 78 01, etc.). **I’m planning to add LZ4 and LZMA unpacking in the future (it already searches for **LZMA&lt;/strong&gt;, but doesn’t do anything with it yet);&lt;/li&gt;
&lt;li&gt;Disassembly via Capstone with automatic x86/x64 detection;&lt;/li&gt;
&lt;li&gt;Builds xrefs: searches for lea/mov/push → matches them with strings;&lt;/li&gt;
&lt;li&gt;Analysis: anti‑debug, packed sections, entropy, compiler detection.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fcw2t973g9jiaaycsgpv4.png" class="article-body-image-wrapper"&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%2Farticles%2Fcw2t973g9jiaaycsgpv4.png" alt="Example" width="799" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Installing the program
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Method&amp;nbsp;1: Pre‑built .exe&lt;/strong&gt;&lt;br&gt;
Download &lt;code&gt;DeNuitkanizator.exe&lt;/code&gt; from Releases and run it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method&amp;nbsp;2: From source&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;git clone https://github.com/2M12/DeNuitkanizator.git
cd DeNuitkanizator
pip install -r requirements.txt
python DeNuitkanizator.py
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage instructions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Launch &lt;strong&gt;DeNuitkanizator.exe&lt;/strong&gt;, or if you downloaded the Python file, run &lt;strong&gt;DeNuitkanizator.py&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Then enter the path to the .exe file, or simply run:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;python DeNuitkanizator.py "path"
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;The file analysis will start, and the results will appear in the &lt;strong&gt;DeNuitkanizator_Output&lt;/strong&gt; folder.&lt;/li&gt;
&lt;li&gt;You can then examine the files yourself. The &lt;strong&gt;summary.txt&lt;/strong&gt; file contains only a summary.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fxbv46xewwkkcvpuz94p7.png" class="article-body-image-wrapper"&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%2Farticles%2Fxbv46xewwkkcvpuz94p7.png" alt="Summary Example" width="799" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  ❗ Important notes
&lt;/h2&gt;

&lt;p&gt;As I said, results aren’t always guaranteed.&lt;br&gt;
The program can analyze regular .exe files (native) that weren’t written in Python.&lt;br&gt;
&lt;strong&gt;PyInstaller&lt;/strong&gt; provides more detailed information because it’s simpler - it doesn’t translate code into C++, but simply packages the interpreter together with the script.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DeNuitkanizator&lt;/strong&gt; can be a useful tool for you - and at the very least, an interesting experiment. It has quite powerful features and automates a lot. In the future, the project will be improved and updated, with new functions added.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/2M12/DeNuitkanizator" rel="noopener noreferrer"&gt;[here]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I hope you’ll appreciate my project on GitHub!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.S. Which packer do you use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;br&gt;
Nuitka, PyInstaller, reverse engineering, PE analysis, disassembly, static analysis, binary analysis, exe analyzer, open‑source, Python&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
