<?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: Ramadhan Adam</title>
    <description>The latest articles on Forem by Ramadhan Adam (@ramadhanadam).</description>
    <link>https://forem.com/ramadhanadam</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%2F3696228%2F1148f438-6657-4b74-9428-cd2afb395627.jpeg</url>
      <title>Forem: Ramadhan Adam</title>
      <link>https://forem.com/ramadhanadam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ramadhanadam"/>
    <language>en</language>
    <item>
      <title>Lab 03-01: When Malware Fights Back — Analyzing Poison Ivy's Anti-VM Evasion</title>
      <dc:creator>Ramadhan Adam</dc:creator>
      <pubDate>Tue, 06 Jan 2026 11:51:45 +0000</pubDate>
      <link>https://forem.com/ramadhanadam/lab-03-01-when-malware-fights-back-analyzing-poison-ivys-anti-vm-evasion-ci5</link>
      <guid>https://forem.com/ramadhanadam/lab-03-01-when-malware-fights-back-analyzing-poison-ivys-anti-vm-evasion-ci5</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 2 of the Practical Malware Analysis Labs Series&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In my &lt;a href="https://dev.to/ramadhanadam/lab-01-where-it-all-begins-static-analysis-of-4-malware-samples-36bp"&gt;previous article on Lab 01&lt;/a&gt;, we successfully analyzed basic malware behavior using standard static analysis techniques. Everything worked smoothly — we examined PE structures, extracted IOCs, and understood malicious functionality without even executing the samples.&lt;/p&gt;

&lt;p&gt;Lab 03-01 would prove to be a completely different challenge.&lt;/p&gt;

&lt;p&gt;This article analyzes Lab03-01.exe from the book &lt;em&gt;Practical Malware Analysis&lt;/em&gt; by Michael Sikorski and Andrew Honig — a foundational text in malware analysis education. This particular sample is a Poison Ivy trojan variant that refused to cooperate.&lt;/p&gt;

&lt;p&gt;Within 33 milliseconds of execution, it detected my analysis environment and terminated itself. No network traffic. No malicious behavior. Just a crash report to Microsoft.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Note on Safety
&lt;/h2&gt;

&lt;p&gt;All analysis was performed on isolated systems with no network connectivity to production environments. The samples discussed are training materials from &lt;em&gt;Practical Malware Analysis&lt;/em&gt; and should only be analyzed in controlled environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never execute malware on production systems or networks.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting Up the Lab
&lt;/h2&gt;

&lt;p&gt;For this analysis, I prepared a comprehensive monitoring setup in a VMware Windows 10 environment:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Analysis Tools:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FakeNet 3.5&lt;/strong&gt; — Network simulation and traffic interception&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wireshark&lt;/strong&gt; — Deep packet inspection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ApateDNS&lt;/strong&gt; — DNS query interception&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Procmon (Process Monitor)&lt;/strong&gt; — System call and registry monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Process Explorer&lt;/strong&gt; — Real-time process analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Static Analysis Tools:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PEview&lt;/strong&gt; — PE structure examination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PEStudio&lt;/strong&gt; — Automated PE analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency Walker&lt;/strong&gt; — Import/export analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HxD&lt;/strong&gt; — Hex editor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strings&lt;/strong&gt; — String extraction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I configured FakeNet to redirect all network traffic to a fake IP (192.0.2.123) and set up ApateDNS to intercept DNS queries, returning 127.0.0.1 for all domains.&lt;/p&gt;

&lt;p&gt;This would allow me to capture the malware's command and control communication without it actually reaching the target.&lt;/p&gt;

&lt;p&gt;Or so I thought...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; In this case, a fake server (Linux preferably), set up in the same Host-Only network adapter would have worked better using INetSim and ApateDNS.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Sample Should Do
&lt;/h2&gt;

&lt;p&gt;Before executing the sample, I performed basic static analysis to understand what I should expect to see. I uploaded the .exe file to VirusTotal and got the following results:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File Identification:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Filename:&lt;/strong&gt; Lab03-01.exe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MD5:&lt;/strong&gt; &lt;code&gt;d537acb8f56a1ce206bc35cf8ff959c0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SHA-256:&lt;/strong&gt; &lt;code&gt;eb84360ca4e33b8bb60df47ab5ce962501ef3420bc7aab90655fd507d2ffcedd&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VirusTotal:&lt;/strong&gt; 68/72 detections&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classification:&lt;/strong&gt; Trojan.Poison/PoisonIvy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  PE Structure Analysis
&lt;/h3&gt;

&lt;p&gt;The binary showed clear signs of being packed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.data&lt;/code&gt; section entropy: &lt;strong&gt;6.400&lt;/strong&gt; (high entropy indicates encryption/compression)&lt;/li&gt;
&lt;li&gt;File ratio: &lt;strong&gt;85.711%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Minimal exports (typical of packed executables)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  String Analysis
&lt;/h3&gt;

&lt;p&gt;Several interesting strings were immediately visible:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;www.practicalmalwareanalysis.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Connect %s %d http/1.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ws2_32&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;admin&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The C2 domain was hardcoded, and the connection string format indicated HTTP/1.0 communication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persistence Mechanisms:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SOFTWARE\Classes\http\shell\open\commandV&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Multiple registry keys suggested the malware would attempt to establish persistence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-VM Artifacts:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WinVMXX32-&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vmx32to64.exe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VideoDriver&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And here was the first red flag. These strings are classic VMware detection indicators.&lt;/p&gt;

&lt;h3&gt;
  
  
  Expected Behavior
&lt;/h3&gt;

&lt;p&gt;Based on static analysis, I expected to observe:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;DNS query for &lt;code&gt;www.practicalmalwareanalysis.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;HTTP/1.0 connection to resolved IP on port 80&lt;/li&gt;
&lt;li&gt;Registry modifications for persistence&lt;/li&gt;
&lt;li&gt;Potential system information exfiltration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Time to see if reality matched expectations.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Execution: 33 Milliseconds of Nothing
&lt;/h2&gt;

&lt;p&gt;I started all monitoring tools, took a clean VM snapshot, and ran Lab03-01.exe through the terminal.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Happened
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Execution Timeline:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;T+0ms:&lt;/strong&gt; Lab03-01.exe launched&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;T+33ms:&lt;/strong&gt; Process terminated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;T+50ms:&lt;/strong&gt; WerFault.exe (Windows Error Reporting) appeared in Process Explorer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it. The malware executed for exactly &lt;strong&gt;33 milliseconds&lt;/strong&gt; before crashing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding the Smoking Gun
&lt;/h3&gt;

&lt;p&gt;Looking at Process Monitor logs, I found what happened:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Successful Registry Access:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HKLM\System\CurrentControlSet\Control\Session Manager\kernel32&lt;/code&gt; — SUCCESS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HKLM\Software\Microsoft\Wow64\x86&lt;/code&gt; — SUCCESS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/code&gt; — SUCCESS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Failed Registry Access (Anti-VM Checks):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot&lt;/code&gt; — NAME NOT FOUND&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HKLM\SOFTWARE\Policies\Microsoft\Windows&lt;/code&gt; — NAME NOT FOUND&lt;/li&gt;
&lt;/ul&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%2Fq80fkj7w0di1fo56vu3m.webp" 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%2Fq80fkj7w0di1fo56vu3m.webp" alt="Process Monitor window showing system activity log for WerFault.exe with registry operations, file reads, and thread events. One row is highlighted showing a ReadFile operation with 'NAME NOT FOUND' result" width="800" height="717"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The malware was actively probing the registry for specific keys. Several returned "NAME NOT FOUND" — likely part of its VM detection logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Critical Finding:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In my system directory, I found what it was looking for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Windows\System32\vmx32to64.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This VMware-specific executable gave away the virtualized environment.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Network That Never Was
&lt;/h2&gt;

&lt;p&gt;Despite comprehensive network monitoring, Lab03-01.exe generated &lt;strong&gt;zero network traffic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Was Captured:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows Error Reporting (watson.events.data.microsoft.com)&lt;/li&gt;
&lt;li&gt;Standard system traffic (WPAD, Windows Update)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What Was Missing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No DNS query for &lt;code&gt;www.practicalmalwareanalysis.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;No HTTP/1.0 connection attempts&lt;/li&gt;
&lt;li&gt;No TCP traffic on port 80 from the malware process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FakeNet logged activity from six processes — none of them Lab03-01.exe. The malware terminated before initiating any network communication, confirming successful evasion.&lt;/p&gt;




&lt;h2&gt;
  
  
  How the Anti-VM Detection Works
&lt;/h2&gt;

&lt;p&gt;So why did the malware terminate? Let's break down the techniques it employed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detection Method 1: File System Artifacts
&lt;/h3&gt;

&lt;p&gt;The malware checked for VMware-specific files:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;vmx32to64.exe&lt;/code&gt; — VMware executable in System32&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;VMware installs various utilities and drivers. Checking these files is a quick way to detect virtualization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detection Method 2: Mutex/String Checks
&lt;/h3&gt;

&lt;p&gt;The string &lt;code&gt;WinVMXX32-&lt;/code&gt; suggests mutex or process name checking. VMware processes often contain "vmx" in their names.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detection Method 3: Registry Queries
&lt;/h3&gt;

&lt;p&gt;The failed registry queries weren't accidents. Certain registry keys exist only in physical machines or have different values in VMs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Detection Method 4: Behavioral Analysis
&lt;/h3&gt;

&lt;p&gt;The 33-millisecond execution time wasn't random:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Load → Check environment → Detect VM → Exit cleanly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern malware performs environment checks before unpacking or executing its main payload.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Still Learned
&lt;/h2&gt;

&lt;p&gt;Despite the malware refusing to fully execute, the analysis provided valuable intelligence.&lt;/p&gt;

&lt;h3&gt;
  
  
  IOC — Indicators of Compromise
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Network Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C2 Domain: &lt;code&gt;www.practicalmalwareanalysis.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Protocol: HTTP/1.0&lt;/li&gt;
&lt;li&gt;Port: 80 (inferred)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Host Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Registry Key: &lt;code&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Mutex: &lt;code&gt;WinVMXX32&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;File Check: &lt;code&gt;C:\Windows\System32\vmx32to64.exe&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  YARA Detection Rule
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rule Lab03_01_PoisonIvy {
    meta:
        description = "Detects Lab03-01 Poison Ivy variant"
        author = "Ramadhan Adam Zome"

    strings:
        $c2 = "www.practicalmalwareanalysis.com" ascii
        $http = "Connect %s %d http/1.0" ascii
        $vm1 = "WinVMXX32-" ascii
        $vm2 = "vmx32to64.exe" ascii

    condition:
        uint16(0) == 0x5A4D and
        filesize &amp;lt; 500KB and
        ($c2 or ($http and 2 of ($vm*)))
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Lessons Learned
&lt;/h2&gt;

&lt;p&gt;This analysis taught me several valuable lessons:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Anti-Analysis is the Norm
&lt;/h3&gt;

&lt;p&gt;Modern threats actively check for virtual machines, sandboxes, debuggers, and analysis tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Static Analysis is Critical
&lt;/h3&gt;

&lt;p&gt;When dynamic analysis fails, static analysis becomes your primary source of intelligence.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. "Failure" is Intelligence
&lt;/h3&gt;

&lt;p&gt;The malware refusing to execute tells us it has sophisticated anti-analysis capabilities and prioritizes evasion over execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Multiple Attempts Required
&lt;/h3&gt;

&lt;p&gt;A single analysis run isn't sufficient. I should have attempted VM artifact removal, bare-metal execution, or binary patching.&lt;/p&gt;




&lt;h2&gt;
  
  
  Next Steps: Bypassing the Protection
&lt;/h2&gt;

&lt;p&gt;For complete analysis, several approaches could work:&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 1: VM Artifact Removal
&lt;/h3&gt;

&lt;p&gt;Edit the VMX configuration file and remove VMware-specific files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 2: Binary Patching
&lt;/h3&gt;

&lt;p&gt;Use a debugger to patch the VM check routine and force execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 3: Bare-Metal Execution
&lt;/h3&gt;

&lt;p&gt;Run on a physical machine with network isolation and complete monitoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option 4: Advanced Sandboxing
&lt;/h3&gt;

&lt;p&gt;Use sophisticated sandboxes designed to hide their presence.&lt;/p&gt;




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

&lt;p&gt;Lab 03-01 demonstrated that malware analysis isn't always straightforward. Sometimes, the most interesting finding is what the malware &lt;em&gt;doesn't&lt;/em&gt; do.&lt;/p&gt;

&lt;p&gt;This Poison Ivy variant successfully detected my VMware environment and refused to execute its malicious payload. While frustrating, it's a realistic scenario that analysts frequently encounter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anti-VM techniques are sophisticated and multilayered&lt;/li&gt;
&lt;li&gt;Static analysis remains valuable even when dynamic analysis fails&lt;/li&gt;
&lt;li&gt;Environment preparation is critical&lt;/li&gt;
&lt;li&gt;"Failure" provides intelligence about adversary capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In my next article, I'll attempt to bypass these protections and observe this malware's complete behavior.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Full Analysis:&lt;/strong&gt; &lt;a href="https://github.com/RamadhanAdam/Malware-analysis-labs/tree/main/Lab03-01" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample Source:&lt;/strong&gt; Practical Malware Analysis Book Labs&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools Used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FakeNet-NG&lt;/li&gt;
&lt;li&gt;Sysinternals Suite&lt;/li&gt;
&lt;li&gt;Wireshark&lt;/li&gt;
&lt;li&gt;PEStudio&lt;/li&gt;
&lt;li&gt;PEview&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This is Part 2 of my Practical Malware Analysis Labs series, where I'm documenting my journey learning malware analysis techniques. Read &lt;a href="https://dev.to/ramadhanadam/lab-01-where-it-all-begins-static-analysis-of-4-malware-samples-36bp"&gt;Part 1: Static Analysis of 4 Malware Samples&lt;/a&gt; if you haven't already.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with me:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/RamadhanAdam" rel="noopener noreferrer"&gt;RamadhanAdam&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;BlueSky: &lt;a href="https://bsky.app/profile/0x_zome" rel="noopener noreferrer"&gt;@0x_zome&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href="https://x.com/RamadhanZome" rel="noopener noreferrer"&gt;@RamadhanZome&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Medium: &lt;a href="https://medium.com/@ramadhanzome4" rel="noopener noreferrer"&gt;RamadhanZome&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>malwareanalysis</category>
      <category>reverseengineering</category>
      <category>infosec</category>
      <category>security</category>
    </item>
    <item>
      <title>Lab 01: Where It All Begins — Static Analysis of 4 Malware Samples</title>
      <dc:creator>Ramadhan Adam</dc:creator>
      <pubDate>Tue, 06 Jan 2026 11:45:34 +0000</pubDate>
      <link>https://forem.com/ramadhanadam/lab-01-where-it-all-begins-static-analysis-of-4-malware-samples-36bp</link>
      <guid>https://forem.com/ramadhanadam/lab-01-where-it-all-begins-static-analysis-of-4-malware-samples-36bp</guid>
      <description>&lt;p&gt;&lt;em&gt;Part 1 of the Practical Malware Analysis Labs Series&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Static analysis means examining malware without executing it. No virtual machines spinning up. No network traffic to capture. Just you, the binary, and a set of forensic tools trying to extract intelligence before the malware even knows you're looking.&lt;/p&gt;

&lt;p&gt;These four samples would teach me how to read the language malware speaks: Portable Executable structures, import tables, suspicious strings, and the telltale signs of packing and obfuscation.&lt;/p&gt;

&lt;p&gt;I didn't know it then, but the patterns I learned here would later help me identify when malware was actively fighting back — like the Poison Ivy sample in Lab 03-01 that detected my VM and vanished in 33 milliseconds.&lt;/p&gt;

&lt;p&gt;But that's getting ahead of the story. Let's start at the beginning.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Note on Safety
&lt;/h2&gt;

&lt;p&gt;All analysis was performed on isolated systems with no network connectivity. The samples discussed are training materials from &lt;em&gt;Practical Malware Analysis&lt;/em&gt; and should only be analyzed in controlled environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never execute malware on production systems or networks.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Setting Up the Analysis Environment
&lt;/h2&gt;

&lt;p&gt;Before diving into the samples, I assembled my static analysis toolkit:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analysis Tools:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PEStudio&lt;/strong&gt; — PE structure examination and automated behavioral analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PEview&lt;/strong&gt; — Detailed PE header inspection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strings&lt;/strong&gt; — Extract readable text from binaries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency Walker&lt;/strong&gt; — Import/export analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HxD&lt;/strong&gt; — Hex editor for raw binary examination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UPX&lt;/strong&gt; — Unpacking utility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The beauty of static analysis lies in its safety. These tools examine the file structure and metadata without executing any code. Even the most sophisticated malware can't hurt you if you never run it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lab 01-01: The Foundation — File Infection &amp;amp; Import Redirection
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Initial Triage
&lt;/h3&gt;

&lt;p&gt;I started with the basics: file identification and hashing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Generate file hashes&lt;/span&gt;
&lt;span class="nb"&gt;md5sum &lt;/span&gt;Lab01-01.exe Lab01-01.dll
&lt;span class="nb"&gt;sha256sum &lt;/span&gt;Lab01-01.exe Lab01-01.dll
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Lab01-01.exe:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MD5:&lt;/strong&gt; &lt;code&gt;bb7425b82141a1c0f7d60e5106676bb1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SHA-256:&lt;/strong&gt; &lt;code&gt;58898bd42c5bd3bf9b1389f0eee5b39cd59180e8370eb9ea838a0b327bd6fe47&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lab01-01.dll:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MD5:&lt;/strong&gt; &lt;code&gt;290934c61de9176ad682ffdd65f0a669&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SHA-256:&lt;/strong&gt; &lt;code&gt;f50e42c8dfaab649bde0398867e930b86c2a599e8db83b8260393082268f2dba&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two files. An executable and a DLL. Immediately suspicious.&lt;/p&gt;

&lt;h3&gt;
  
  
  VirusTotal Confirmation
&lt;/h3&gt;

&lt;p&gt;Before diving deeper, I uploaded both samples to VirusTotal to see what the antivirus community already knew about them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lab01-01.exe:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detection rate: Multiple engines flagged it as malicious&lt;/li&gt;
&lt;li&gt;Common classifications: Generic trojan, backdoor variants&lt;/li&gt;
&lt;li&gt;First submission: Years ago (training sample)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lab01-01.dll:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detection rate: Similar multi-engine detection&lt;/li&gt;
&lt;li&gt;Classifications: Trojan downloader, backdoor component&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The high detection rate confirmed these weren't false positives. The hashes from VirusTotal matched my generated MD5 and SHA256 hashes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Compile Timestamps
&lt;/h3&gt;

&lt;p&gt;Loading both files into PEStudio revealed something interesting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lab01-01.exe compiled:&lt;/strong&gt; 2010/12/19 16:16:19 UTC&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lab01-01.dll compiled:&lt;/strong&gt; 2010/12/19 16:16:38 UTC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;19 seconds apart.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;These files were built together, packaged together, designed to work together. The .exe likely loads the .dll to perform its malicious operations — a common technique to separate detection surfaces and make analysis harder.&lt;/p&gt;

&lt;h3&gt;
  
  
  PE Structure Analysis
&lt;/h3&gt;

&lt;p&gt;Neither file was packed — a relief for a first analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entropy:&lt;/strong&gt; ~1.9 in the .text section (normal compiled code, not packed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Section alignment:&lt;/strong&gt; Virtual sizes slightly smaller than raw sizes (normal compiler padding)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Import table:&lt;/strong&gt; Fully visible and not obfuscated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The low entropy immediately told me these weren't encrypted or compressed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Import Analysis: What Does It Want To Do?
&lt;/h3&gt;

&lt;p&gt;The import table tells you what capabilities malware has before you ever run it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lab01-01.exe imports (The Installer/Infector):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;FindFirstFileA&lt;/code&gt; / &lt;code&gt;FindNextFileA&lt;/code&gt; - File enumeration (searching for targets)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CopyFileA&lt;/code&gt; - File manipulation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CreateFileMappingA&lt;/code&gt; / &lt;code&gt;MapViewOfFile&lt;/code&gt; - Memory mapping to modify executable headers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Lab01-01.dll imports (The Backdoor):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ws2_32.dll&lt;/code&gt; - Network socket operations (socket, connect, send, recv)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CreateProcessA&lt;/code&gt; - Remote command execution&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Sleep&lt;/code&gt; - Wait for instructions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Typosquatting Technique
&lt;/h3&gt;

&lt;p&gt;Examining the strings revealed something clever:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Strings Found:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;C:\windows\system32\kerne132.dll&lt;/code&gt; (note the digit '1' instead of letter 'l')&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kerne132.dll&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C2 IP Address:&lt;/strong&gt; &lt;code&gt;127.26.152.13&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beacon String:&lt;/strong&gt; &lt;code&gt;"hello"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mutex:&lt;/strong&gt; &lt;code&gt;SADFHUHF&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The malware uses &lt;strong&gt;DLL typosquatting&lt;/strong&gt; — replacing &lt;code&gt;kernel32.dll&lt;/code&gt; with &lt;code&gt;kerne132.dll&lt;/code&gt; in import tables.&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%2Fitdhy9pdu1cutecidy7m.webp" 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%2Fitdhy9pdu1cutecidy7m.webp" alt="Comparison table showing normal program using kernel32.dll versus infected program using typo-squatted kerne132.dll, demonstrating DLL hijacking technique" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How Lab 01-01 Works
&lt;/h3&gt;

&lt;p&gt;Based on static analysis, here's the complete infection chain:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lab01-01.exe&lt;/strong&gt; (installer) executes first&lt;/li&gt;
&lt;li&gt;Searches C:\ drive for executables using &lt;code&gt;FindFirstFileA&lt;/code&gt; / &lt;code&gt;FindNextFileA&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Uses &lt;code&gt;CreateFileMappingA&lt;/code&gt; and &lt;code&gt;MapViewOfFile&lt;/code&gt; to &lt;strong&gt;patch executable import tables&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Replaces legitimate &lt;code&gt;kernel32.dll&lt;/code&gt; string with typo-squatted &lt;code&gt;kerne132.dll&lt;/code&gt; (hex: &lt;code&gt;6B 65 72 6E 65 31 33 32&lt;/code&gt; instead of &lt;code&gt;6B 65 72 6E 65 6C 33 32&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Drops &lt;strong&gt;Lab01-01.dll&lt;/strong&gt; into System32 as &lt;code&gt;kerne132.dll&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lab01-01.dll&lt;/strong&gt; gets loaded by infected programs (thinking it's the real kernel32.dll)&lt;/li&gt;
&lt;li&gt;DLL establishes connection to &lt;code&gt;127.26.152.13&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sends beacon string &lt;code&gt;"hello"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Awaits commands from C2 server&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Malware Type:&lt;/strong&gt; Multi-component backdoor with file infection capabilities and network-based C2 communication.&lt;/p&gt;

&lt;h3&gt;
  
  
  IOC Summary — Lab 01-01
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;File Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MD5: &lt;code&gt;bb7425b82141a1c0f7d60e5106676bb1&lt;/code&gt; (.exe)&lt;/li&gt;
&lt;li&gt;MD5: &lt;code&gt;290934c61de9176ad682ffdd65f0a669&lt;/code&gt; (.dll)&lt;/li&gt;
&lt;li&gt;File: &lt;code&gt;C:\Windows\System32\kerne132.dll&lt;/code&gt; (typo-squatted DLL)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Network Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C2 IP: &lt;code&gt;127.26.152.13&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Beacon: &lt;code&gt;"hello"&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Behavioral Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Import table modification in executables&lt;/li&gt;
&lt;li&gt;DLL typosquatting technique&lt;/li&gt;
&lt;li&gt;Mutex: &lt;code&gt;SADFHUHF&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Lab 01-02: Malicious Services &amp;amp; The UPX Packer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  First Signs of Obfuscation
&lt;/h3&gt;

&lt;p&gt;Lab 01-02 looked different from the start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File Hash:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MD5:&lt;/strong&gt; &lt;code&gt;8363436878404da0ae3e46991e355b83&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SHA-256:&lt;/strong&gt; &lt;code&gt;c876a332d7dd8da331cb8eee7ab7bf32752834d4b2b54eaa362674a2a48f64a6&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;VirusTotal Results:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detection:&lt;/strong&gt; Trojan.Ulise / Trojan.Clicker&lt;/li&gt;
&lt;li&gt;Multiple engines flagged it as packed/obfuscated malware&lt;/li&gt;
&lt;li&gt;UPX packer specifically identified&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detecting the Packer
&lt;/h3&gt;

&lt;p&gt;Loading it into PEStudio immediately revealed packing indicators:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPX Packer Signatures:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Section names: &lt;code&gt;UPX0&lt;/code&gt;, &lt;code&gt;UPX1&lt;/code&gt;, &lt;code&gt;.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Section flags:&lt;/strong&gt; Writable, Executable, Self-Modifying&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtual Size anomaly:&lt;/strong&gt; &lt;code&gt;.txt&lt;/code&gt; section has 16,384 bytes virtual size but &lt;strong&gt;0 bytes raw size&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entropy:&lt;/strong&gt; N/A (can't calculate entropy for empty section on disk)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This discrepancy confirms the file is a compressed shell that expands upon execution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Pack Malware?
&lt;/h3&gt;

&lt;p&gt;Packing serves multiple purposes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Size reduction&lt;/strong&gt; — Smaller files transfer faster&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Obfuscation&lt;/strong&gt; — Hides real code and strings from static analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-analysis&lt;/strong&gt; — Forces analysts to unpack before examining behavior&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Unpacking Process
&lt;/h3&gt;

&lt;p&gt;UPX is one of the easiest packers to reverse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;upx &lt;span class="nt"&gt;-d&lt;/span&gt; Lab01-02.exe &lt;span class="nt"&gt;-o&lt;/span&gt; Lab01-02_unpacked.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One command. The file decompresses instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Post-Unpacking Analysis
&lt;/h3&gt;

&lt;p&gt;After unpacking, two sets of imports became visible:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Packer Imports (KERNEL32.dll):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;LoadLibraryA&lt;/code&gt; / &lt;code&gt;GetProcAddress&lt;/code&gt; - Dynamic API loading&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;VirtualProtect&lt;/code&gt; - Memory permission modification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Malicious Functionality:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ADVAPI32.dll:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;CreateServiceA&lt;/code&gt; - Service installation for persistence&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CreateMutexA&lt;/code&gt; - Instance control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;WININET.dll:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;InternetOpenA&lt;/code&gt; / &lt;code&gt;InternetOpenUrlA&lt;/code&gt; - Network communication&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Strings Extracted
&lt;/h3&gt;

&lt;p&gt;Post-unpacking strings revealed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service Name:&lt;/strong&gt; &lt;code&gt;MalService&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mutex:&lt;/strong&gt; &lt;code&gt;HGL345&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;C2 URL:&lt;/strong&gt; &lt;code&gt;http://www.malwareanalysisbook.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Lab 01-02 Works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Unpacks itself in memory&lt;/strong&gt; using UPX stub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creates Windows service&lt;/strong&gt; named &lt;code&gt;MalService&lt;/code&gt; via &lt;code&gt;CreateServiceA&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configures auto-start&lt;/strong&gt; for persistence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creates mutex&lt;/strong&gt; &lt;code&gt;HGL345&lt;/code&gt; to prevent multiple instances&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connects to C2&lt;/strong&gt; at &lt;code&gt;www.malwareanalysisbook.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Downloads/executes&lt;/strong&gt; secondary payloads&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Malware Type:&lt;/strong&gt; Service-based persistent backdoor with UPX obfuscation.&lt;/p&gt;

&lt;h3&gt;
  
  
  IOC Summary — Lab 01-02
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;File Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MD5: &lt;code&gt;8363436878404da0ae3e46991e355b83&lt;/code&gt; (packed)&lt;/li&gt;
&lt;li&gt;Packer: UPX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Host Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service: &lt;code&gt;MalService&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Mutex: &lt;code&gt;HGL345&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Network Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;URL: &lt;code&gt;http://www.malwareanalysisbook.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Lab 01-03: Advanced Obfuscation — The FSG Packer
&lt;/h2&gt;

&lt;p&gt;If UPX was a speed bump, FSG was a brick wall.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Different Kind of Packer
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;File Hash:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MD5:&lt;/strong&gt; &lt;code&gt;9c5c27494c28ed0b14853b346b113145&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SHA-256:&lt;/strong&gt; &lt;code&gt;7983a582939924c70e3da2da80fd3352ebc90de7b8c4c427d484ff4f050f0aec&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;VirusTotal Results:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detection ratio:&lt;/strong&gt; 64/72&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Common signatures:&lt;/strong&gt; Trojan.Graftor, Genome, Tegan&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identified packer:&lt;/strong&gt; FSG 1.0&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Detecting FSG Packing
&lt;/h3&gt;

&lt;p&gt;PEStudio analysis revealed advanced obfuscation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FSG Packer Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Minimal IAT:&lt;/strong&gt; Only &lt;code&gt;LoadLibraryA&lt;/code&gt; and &lt;code&gt;GetProcAddress&lt;/code&gt; (classic packer signature)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Section anomalies:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Section [0] Raw Size: &lt;strong&gt;0 bytes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Section [0] Virtual Size: &lt;strong&gt;12,288 bytes&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High entropy:&lt;/strong&gt; Section [1] entropy = &lt;strong&gt;7.362&lt;/strong&gt; (indicates encryption/compression)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Section name:&lt;/strong&gt; &lt;code&gt;.fsgrub&lt;/code&gt; (FSG signature)&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Why FSG Is Harder
&lt;/h3&gt;

&lt;p&gt;Unlike UPX, FSG uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Custom compression algorithms&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-debugging checks&lt;/strong&gt; during unpacking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encrypted import tables&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Polymorphic decompression stubs&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Attempted unpacking&lt;/span&gt;
upx &lt;span class="nt"&gt;-d&lt;/span&gt; Lab01-03.exe
&lt;span class="c"&gt;# Result: NotPackedException&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FSG requires specialized tools or manual memory dumping.&lt;/p&gt;

&lt;h3&gt;
  
  
  Static Analysis Limitations
&lt;/h3&gt;

&lt;p&gt;With Lab 01-03, I hit a wall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I could determine:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File packed with FSG 1.0&lt;/li&gt;
&lt;li&gt;Original entry point hidden&lt;/li&gt;
&lt;li&gt;Import table encrypted&lt;/li&gt;
&lt;li&gt;Minimal strings available&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What I couldn't determine:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Actual malicious functionality&lt;/li&gt;
&lt;li&gt;Network indicators&lt;/li&gt;
&lt;li&gt;C2 infrastructure&lt;/li&gt;
&lt;li&gt;Behavioral patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Lesson
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Not all malware yields its secrets to static analysis alone.&lt;/strong&gt; FSG-packed samples require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dynamic execution monitoring&lt;/li&gt;
&lt;li&gt;Debugger-assisted manual unpacking&lt;/li&gt;
&lt;li&gt;Memory dumps of unpacked code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This sample served as a humbling reminder that malware authors actively work to make analysis harder.&lt;/p&gt;

&lt;h3&gt;
  
  
  IOC Summary — Lab 01-03
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;File Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MD5: &lt;code&gt;9c5c27494c28ed0b14853b346b113145&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Packer: FSG 1.0&lt;/li&gt;
&lt;li&gt;Entropy: 7.362 (highly compressed/encrypted)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Analysis Status:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Static analysis: &lt;strong&gt;Limited intelligence&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Requires: Dynamic analysis and memory inspection&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Lab 01-04: Resource Manipulation &amp;amp; Dropper Tactics
&lt;/h2&gt;

&lt;p&gt;The final sample introduced resource-based payload delivery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Initial Analysis
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;File Hash:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MD5:&lt;/strong&gt; &lt;code&gt;625ac05fd47adc3c63700c3b30de79ab&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SHA-256:&lt;/strong&gt; &lt;code&gt;0fa1498340fca6c562cfa389ad3e93395f44c72fd128d7ba08579a69aaf3b126&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;VirusTotal Results:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detection ratio:&lt;/strong&gt; 63/72&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classifications:&lt;/strong&gt; TrojanDownloader:Win32, Trojan.cerbu/gofot, Dropper&lt;/li&gt;
&lt;li&gt;Widely recognized as downloader/dropper malware&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Suspicious Resource Section
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;PE Structure Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Entropy:&lt;/strong&gt; 3.123 (.text section - normal, not packed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anomaly:&lt;/strong&gt; &lt;code&gt;.rsrc&lt;/code&gt; section = &lt;strong&gt;55.56% of total file size&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This unusually large resource section suggested embedded payload.&lt;/p&gt;

&lt;h3&gt;
  
  
  Resource Extraction
&lt;/h3&gt;

&lt;p&gt;Using PEStudio, I examined the &lt;code&gt;.rsrc&lt;/code&gt; section:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resource Details:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Type:&lt;/strong&gt; DUMP/BINARY&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name:&lt;/strong&gt; #101&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding:&lt;/strong&gt; Fully functional malicious PE executable embedded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Extracted Resource Analysis:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VirusTotal score:&lt;/strong&gt; 63/73 (trojan.jtgz/gofot)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functionality:&lt;/strong&gt; Contains &lt;code&gt;URLDownloadToFileA&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Target URL:&lt;/strong&gt; &lt;code&gt;http://www.practicalmalwareanalysis.com/updater.exe&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File references:&lt;/strong&gt; &lt;code&gt;\winup.exe&lt;/code&gt;, &lt;code&gt;wupdmgr.exe&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Import Analysis
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Resource Manipulation (The Dropper):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;FindResourceA&lt;/code&gt; / &lt;code&gt;LoadResource&lt;/code&gt; / &lt;code&gt;SizeofResource&lt;/code&gt; - Locate and extract embedded payload&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WriteFile&lt;/code&gt; - Write payload to disk&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WinExec&lt;/code&gt; - Execute dropped payload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Execution &amp;amp; Persistence:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GetWindowsDirectoryA&lt;/code&gt; / &lt;code&gt;GetTempPathA&lt;/code&gt; - Determine drop location&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MoveFileA&lt;/code&gt; - Rename/move files (replace legitimate &lt;code&gt;wupdmgr.exe&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Privilege Escalation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AdjustTokenPrivileges&lt;/code&gt; - Enable security privileges&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;LookupPrivilegeValueA&lt;/code&gt; - Query privilege values&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;OpenProcessToken&lt;/code&gt; - Access process tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These functions allow the malware to &lt;strong&gt;bypass Windows File Protection&lt;/strong&gt; and modify system-level files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Additional Capabilities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sfc_os.dll&lt;/code&gt; (System File Checker) - Disable file protection&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;psapi.dll&lt;/code&gt; - Monitor running processes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How Lab 01-04 Works
&lt;/h3&gt;

&lt;p&gt;Complete infection chain:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Lab01-04.exe executes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Locates resource #101&lt;/strong&gt; using &lt;code&gt;FindResourceA&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extracts embedded PE&lt;/strong&gt; from &lt;code&gt;.rsrc&lt;/code&gt; section&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalates privileges&lt;/strong&gt; via &lt;code&gt;AdjustTokenPrivileges&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Writes payload&lt;/strong&gt; to &lt;code&gt;C:\Windows\System32\&lt;/code&gt; as &lt;code&gt;winup.exe&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Replaces legitimate&lt;/strong&gt; &lt;code&gt;wupdmgr.exe&lt;/code&gt; (Windows Update Manager)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executes dropped payload&lt;/strong&gt; using &lt;code&gt;WinExec&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dropped component downloads&lt;/strong&gt; secondary payload from &lt;code&gt;http://www.practicalmalwareanalysis.com/updater.exe&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Malware runs with system privileges&lt;/strong&gt; under "trusted" filename&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Malware Type:&lt;/strong&gt; Sophisticated dropper with privilege escalation and remote download capabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  IOC Summary — Lab 01-04
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;File Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MD5: &lt;code&gt;625ac05fd47adc3c63700c3b30de79ab&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Modified file: &lt;code&gt;C:\Windows\System32\wupdmgr.exe&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Malicious process: &lt;code&gt;winup.exe&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Network Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C2 URL: &lt;code&gt;http://www.practicalmalwareanalysis.com/updater.exe&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Behavioral Indicators:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource-based payload delivery&lt;/li&gt;
&lt;li&gt;Windows File Protection bypass&lt;/li&gt;
&lt;li&gt;System file replacement&lt;/li&gt;
&lt;li&gt;Privilege escalation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Comparative Analysis: What I Learned
&lt;/h2&gt;

&lt;p&gt;Analyzing these four samples in sequence was intentional — each one built on lessons from the previous.&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%2F1gmr3rj3m2ep1tlmhz82.webp" 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%2F1gmr3rj3m2ep1tlmhz82.webp" alt="Comparative analysis table of Lab 01 samples showing techniques (DLL typosquatting, UPX packer, FSG obfuscation, resource dropper), host indicators, network indicators, and analysis difficulty levels" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Takeaways
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Import Tables Are Intelligence Gold&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before executing malware, imports reveal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network capabilities (&lt;code&gt;ws2_32.dll&lt;/code&gt;, &lt;code&gt;wininet.dll&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;File manipulation (&lt;code&gt;kernel32.dll&lt;/code&gt; file functions)&lt;/li&gt;
&lt;li&gt;Persistence mechanisms (&lt;code&gt;CreateServiceA&lt;/code&gt;, registry functions)&lt;/li&gt;
&lt;li&gt;Privilege escalation (&lt;code&gt;AdjustTokenPrivileges&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Packing Is Common, But Not Uniform&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple packers (UPX) are trivial to reverse with one command&lt;/li&gt;
&lt;li&gt;Advanced packers (FSG) require dynamic analysis and memory dumps&lt;/li&gt;
&lt;li&gt;Always check entropy and section names first&lt;/li&gt;
&lt;li&gt;High entropy (6.0+) + minimal imports = likely packed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Static Analysis Has Limits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some malware won't reveal secrets without execution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Advanced packers encrypt everything&lt;/li&gt;
&lt;li&gt;Droppers hide payloads until runtime&lt;/li&gt;
&lt;li&gt;Polymorphic code changes with each sample&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Multi-Stage Malware Is The Norm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern threats rarely execute everything in one file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.exe&lt;/code&gt; + &lt;code&gt;.dll&lt;/code&gt; components (Lab 01-01)&lt;/li&gt;
&lt;li&gt;Dropper extracts payload from resources (Lab 01-04)&lt;/li&gt;
&lt;li&gt;Service downloads Stage 2 from C2 (Lab 01-02)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each stage makes detection incrementally harder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Typosquatting and Social Engineering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lab 01-01's &lt;code&gt;kerne132.dll&lt;/code&gt; technique demonstrates that malware doesn't always rely on technical exploits — sometimes simple deception works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users see "kernel" and assume it's legitimate&lt;/li&gt;
&lt;li&gt;Applications load it thinking it's &lt;code&gt;kernel32.dll&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Malware gets system-level access through misdirection&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tools &amp;amp; Techniques Summary
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Essential Static Analysis Tools:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PEStudio&lt;/strong&gt; — Automated PE analysis, indicator flagging, entropy calculation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PEview&lt;/strong&gt; — Manual PE header inspection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strings&lt;/strong&gt; — Extract human-readable text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency Walker&lt;/strong&gt; — Import/export relationships&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HxD&lt;/strong&gt; — Hex-level examination&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UPX&lt;/strong&gt; — Unpacking utility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Analysis Workflow:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hash the sample&lt;/strong&gt; — Establish unique identifier (MD5/SHA-256)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VirusTotal check&lt;/strong&gt; — Confirm malicious nature, identify packer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check for packing&lt;/strong&gt; — Entropy analysis, section names, virtual/raw size discrepancies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examine PE structure&lt;/strong&gt; — Headers, sections, resources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyze imports&lt;/strong&gt; — Understand capabilities before execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extract strings&lt;/strong&gt; — Find C2 indicators, configuration data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource inspection&lt;/strong&gt; — Check for embedded payloads&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document IOCs&lt;/strong&gt; — Hashes, domains, file paths, mutexes&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What's Next: When Malware Fights Back
&lt;/h2&gt;

&lt;p&gt;These four samples were cooperative. They sat still while I examined them. They revealed their secrets (or at least tried to) through static analysis alone.&lt;/p&gt;

&lt;p&gt;But sophisticated malware doesn't cooperate.&lt;/p&gt;

&lt;p&gt;In my next analysis, I encountered a very different challenge: a Poison Ivy trojan that detected my VMware environment and terminated itself in 33 milliseconds.&lt;/p&gt;

&lt;p&gt;No network traffic. No malicious behavior. Just a crash report to Microsoft.&lt;/p&gt;

&lt;p&gt;That sample taught me that malware analysis isn't always about finding answers — sometimes it's about understanding why the malware refuses to give them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Full Technical Report:&lt;/strong&gt; &lt;a href="https://github.com/RamadhanAdam/Malware-analysis-labs/tree/main/Lab01" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample Source:&lt;/strong&gt; Practical Malware Analysis Book Labs&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tools Used:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PEStudio&lt;/li&gt;
&lt;li&gt;PEview&lt;/li&gt;
&lt;li&gt;Strings&lt;/li&gt;
&lt;li&gt;Dependency Walker&lt;/li&gt;
&lt;li&gt;HxD Hex Editor&lt;/li&gt;
&lt;li&gt;UPX&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This is Part 1 of my Practical Malware Analysis Labs series, where I'm documenting my journey learning malware analysis techniques. Follow along as I progress from basic static analysis to advanced dynamic analysis and anti-debugging techniques.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Connect with me:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/RamadhanAdam" rel="noopener noreferrer"&gt;RamadhanAdam&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;BlueSky: &lt;a href="https://bsky.app/profile/0x_zome" rel="noopener noreferrer"&gt;@0x_zome&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Twitter : &lt;a href="https://x.com/RamadhanZome" rel="noopener noreferrer"&gt;@RamadhanZome&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Medium : &lt;a href="https://medium.com/@ramadhanzome4" rel="noopener noreferrer"&gt;RamadhanZome&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Continue to &lt;a href="https://dev.to/ramadhanadam/lab-03-01-when-malware-fights-back-analyzing-poison-ivys-anti-vm-evasion-ci5"&gt;Part 2: Lab 03–01: When Malware Fights Back — Analyzing Poison Ivy's Anti-VM Evasion&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>tutorial</category>
      <category>security</category>
      <category>malware</category>
    </item>
  </channel>
</rss>
