<?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: The Hackers Meetup Nagpur</title>
    <description>The latest articles on DEV Community by The Hackers Meetup Nagpur (@thmnagpur).</description>
    <link>https://dev.to/thmnagpur</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%2F3212130%2Ffd81e0a6-82dd-4871-8e61-91e8cb012032.jpg</url>
      <title>DEV Community: The Hackers Meetup Nagpur</title>
      <link>https://dev.to/thmnagpur</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thmnagpur"/>
    <language>en</language>
    <item>
      <title>Why Linux Being Open Source Doesn’t Automatically Make It Secure</title>
      <dc:creator>The Hackers Meetup Nagpur</dc:creator>
      <pubDate>Sat, 03 Jan 2026 19:14:17 +0000</pubDate>
      <link>https://dev.to/thmnagpur/why-linux-isnt-secure-because-its-open-source-why-windows-isnt-insecure-because-it-isnt-47ll</link>
      <guid>https://dev.to/thmnagpur/why-linux-isnt-secure-because-its-open-source-why-windows-isnt-insecure-because-it-isnt-47ll</guid>
      <description>&lt;p&gt;It is common to hear statements like &lt;strong&gt;“Linux is more secure because it is open source”&lt;/strong&gt; or &lt;strong&gt;“Windows is insecure because its users are dumb.”&lt;/strong&gt; These explanations are popular, but they oversimplify a much deeper reality. Security is not a property that emerges automatically from openness or secrecy; it is a consequence of design assumptions, trust models, and threat environments.&lt;/p&gt;

&lt;p&gt;This write‑up aims to move beyond surface‑level arguments and examine why Windows and Linux behave differently under attack, even though both are mature, heavily scrutinized operating systems.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;em&gt;Open Source ≠ Automatically Secure&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A common argument in favor of Linux security is that open source allows “more eyes” to find bugs early. While transparency can help, it does not guarantee security. Vulnerabilities still exist in widely audited open‑source projects, sometimes for years. Security depends not only on visibility, but on who is motivated to look, how attackers interact with the system, and what assumptions the system makes about its users.&lt;/p&gt;

&lt;p&gt;Availability of source code may reduce the barrier to understanding internals, but modern attacks rarely depend on source code alone. Stable interfaces, predictable behavior, and long‑term compatibility often matter more than whether the source is public.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Different Users, Different Threat Models&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most important differences between Windows and Linux is the assumed user model.&lt;/p&gt;

&lt;p&gt;Linux historically evolved as a technical project, primarily adopted by developers, researchers, and later by server environments. Its security philosophy assumes a relatively competent user who explicitly controls execution and privileges. Linux generally allows users to run arbitrary programs in their own context, trusting that privilege boundaries will prevent system‑wide damage.&lt;/p&gt;

&lt;p&gt;Windows, on the other hand, was designed as a mass‑market operating system from the beginning. Its threat model assumes non‑technical users, frequent execution of untrusted binaries, and a hostile software ecosystem. As a result, Windows implements proactive mechanisms such as SmartScreen, Defender, AMSI, and aggressive loader checks. These measures often feel restrictive, but they reflect a defensive posture shaped by user behavior and scale, not inferior engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;If Windows Is Closed Source, Why Is It Still Exploited?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Windows being closed source does not prevent exploitation. Attackers do not rely on leaked source code; they rely on reverse engineering, stable binary formats, documented behavior, and long‑standing ABI guarantees. The PE format, Windows loader behavior, and backward compatibility across decades make execution paths predictable and reusable.&lt;/p&gt;

&lt;p&gt;From an attacker’s perspective, market share also matters. A larger user base means higher return on investment. This has historically made Windows a more attractive target, regardless of source code availability.&lt;/p&gt;




&lt;h3&gt;
  
  
  Architectural Differences in Execution and Trust
&lt;/h3&gt;

&lt;p&gt;The contrast between Windows and Linux becomes clearer when examining &lt;strong&gt;early process initialization&lt;/strong&gt;, before a program’s user-defined entry point is reached.&lt;/p&gt;

&lt;p&gt;On Windows, execution begins &lt;em&gt;inside the loader&lt;/em&gt;, not at &lt;code&gt;main&lt;/code&gt; or even the program entry point. The Portable Executable (PE) format allows &lt;strong&gt;metadata-driven execution hooks&lt;/strong&gt; that are invoked implicitly during process initialization. One such mechanism is &lt;strong&gt;Thread Local Storage (TLS) callbacks&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;TLS callbacks are listed in the PE’s TLS directory and are executed by the Windows loader &lt;strong&gt;before the program entry point is invoked&lt;/strong&gt;, and in many cases &lt;strong&gt;before debuggers gain full user-mode control&lt;/strong&gt;. These callbacks are trusted by design because they are treated as part of the binary’s initialization contract.&lt;/p&gt;

&lt;p&gt;The following example demonstrates a TLS callback executing before &lt;code&gt;main&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;windows.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="s"&gt;"C"&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;NTAPI&lt;/span&gt; &lt;span class="nf"&gt;MyTlsCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DWORD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="cp"&gt;#pragma comment(linker, "/INCLUDE:_tls_used")
&lt;/span&gt;
&lt;span class="cp"&gt;#ifdef _WIN64
#pragma comment(linker, "/INCLUDE:tls_callback_func")
#else
#pragma comment(linker, "/INCLUDE:_tls_callback_func")
#endif
&lt;/span&gt;
&lt;span class="cp"&gt;#pragma section(".CRT$XLB", read)
&lt;/span&gt;&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="s"&gt;"C"&lt;/span&gt; &lt;span class="kr"&gt;__declspec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;allocate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;".CRT$XLB"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;PIMAGE_TLS_CALLBACK&lt;/span&gt; &lt;span class="n"&gt;tls_callback_func&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MyTlsCallback&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;extern&lt;/span&gt; &lt;span class="s"&gt;"C"&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;NTAPI&lt;/span&gt; &lt;span class="nf"&gt;MyTlsCallback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;PVOID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;DWORD&lt;/span&gt; &lt;span class="n"&gt;dwReason&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;PVOID&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dwReason&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;DLL_PROCESS_ATTACH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;MessageBoxA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"TLS CALLBACK EXECUTED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"TLS"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MB_OK&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;MessageBoxA&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nullptr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"MAIN EXECUTED"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"MAIN"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MB_OK&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When debugging this binary, TLS callbacks may execute &lt;strong&gt;before the debugger’s first user-visible breakpoint&lt;/strong&gt;. Even if a debugger resolves TLS callback addresses from the TLS directory, execution may have already passed unless the debugger attaches &lt;em&gt;before loader initialization&lt;/em&gt;.&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%2F87qs8450izk77lrpm13w.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%2F87qs8450izk77lrpm13w.png" alt=" " width="800" height="102"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This behavior is not accidental. Windows prioritizes &lt;strong&gt;backward compatibility and flexible initialization semantics&lt;/strong&gt;, allowing binaries to register early-execution logic without requiring explicit control-flow changes.&lt;/p&gt;




&lt;h3&gt;
  
  
  Early Execution, DEP, and Loader-Owned State
&lt;/h3&gt;

&lt;p&gt;During TLS execution, the process is still in a transitional state:&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%2Fc19bp6gouneueqz409ue.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%2Fc19bp6gouneueqz409ue.png" alt=" " width="690" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Loader locks may be held&lt;/li&gt;
&lt;li&gt;Thread contexts may not be fully initialized&lt;/li&gt;
&lt;li&gt;Certain memory regions may not yet be executable&lt;/li&gt;
&lt;li&gt;The debugger’s notion of “entry” may not reflect actual execution order&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Attempting to manually redirect execution (e.g., modifying RIP) during this phase often results in &lt;strong&gt;undefined behavior&lt;/strong&gt;, not because TLS callbacks are fragile, but because &lt;strong&gt;the surrounding loader context is missing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the observed crash:&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%2Fvqth1hses4jxqdl22xd1.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%2Fvqth1hses4jxqdl22xd1.png" alt=" " width="686" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This occurs because execution was redirected to a memory region that is &lt;strong&gt;non-executable by design&lt;/strong&gt;. DEP (NX) correctly prevents execution from heap or private memory regions, even if the original TLS callback code was modified or removed.&lt;/p&gt;

&lt;p&gt;Importantly, &lt;strong&gt;nopping out a TLS callback does not restore valid execution&lt;/strong&gt;, because the loader expects the callback to either complete or properly unwind. Once that contract is broken, subsequent execution may jump into memory that was never intended to be executable.&lt;/p&gt;




&lt;h3&gt;
  
  
  Linux Comparison: Explicit Roots vs Metadata Trust
&lt;/h3&gt;

&lt;p&gt;Linux also provides early-execution mechanisms, such as ELF constructors (.init_array) that run before main. For example, a small C program like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main() {
    printf("Hello\n");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When debugging it with GDB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gdb ./program
run
info file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;_&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;small excercise: try to map entry point's address and segment's address and figure out what constructors are intialized before &lt;code&gt;_start&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&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%2Fqavcn01f4e69bikxz8dh.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%2Fqavcn01f4e69bikxz8dh.png" alt=" " width="637" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’ll see references to /lib64/ld-linux-x86-64.so.2 and /lib/x86_64-linux-gnu/libc.so.6. These are the loader and standard C library performing initialization—setting up the process before main is called. Unlike Windows’ TLS callbacks, Linux uses a single, linear entry path (_start) and executes constructors in a predictable, centralized order.&lt;/p&gt;

&lt;p&gt;This doesn’t mean Linux is “simpler” or “better engineered”: it just places trust differently:&lt;/p&gt;

&lt;p&gt;Linux loaders and constructors execute as part of an explicit startup path. Tools like GDB can intercept them early.&lt;/p&gt;

&lt;p&gt;Windows loaders execute PE metadata-driven hooks (TLS callbacks) before the program entry point, trusting the binary’s declared intentions.&lt;/p&gt;

&lt;p&gt;Historically, this difference affected exploitation. Linux loaders once allowed environment variables like LD_PRELOAD or files such as /etc/ld.so.preload to override shared objects, creating a wide attack surface. Modern Linux mitigations ignore these overrides for setuid/setgid binaries and enforce stricter checks, illustrating how the OS adjusts trust boundaries in response to threats.&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%2Fojzye4fokewlgfggam4c.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%2Fojzye4fokewlgfggam4c.png" alt=" " width="655" height="72"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;one of the example of such&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Linux provides comparable early-execution mechanisms via ELF constructors such as &lt;code&gt;.init_array&lt;/code&gt;. However, Linux maintains a more &lt;strong&gt;centralized execution model&lt;/strong&gt;, with &lt;code&gt;_start&lt;/code&gt; acting as the explicit root of control flow.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt; trusts PE metadata to drive early execution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux&lt;/strong&gt; emphasizes a single, explicit entry path with additive initialization stages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These design decisions directly influence how certain attack techniques are implemented.&lt;/p&gt;

&lt;p&gt;For example, MITRE ATT&amp;amp;CK documents &lt;strong&gt;TLS callback abuse&lt;/strong&gt; as a Windows-specific injection vector (T1055.005), reflecting Windows’ trust in loader-executed metadata. This does not indicate a flaw, but rather a different trust boundary compared to Linux’s more centralized startup model.&lt;/p&gt;




&lt;p&gt;And maybe next time someone says "&lt;em&gt;Real hackers use Kali Linux&lt;/em&gt;", maybe 1337 hackers on Windows are trying to find another zero day...?&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Written By:&lt;/strong&gt; Akanksha Sawant&lt;br&gt;
&lt;strong&gt;From:&lt;/strong&gt; THM Nagpur Team&lt;/p&gt;




&lt;h1&gt;
  
  
  Disclaimer
&lt;/h1&gt;

&lt;p&gt;This article reflects a practical, opinion-based exploration of how system architecture influences security in Windows and Linux. While care has been taken to ensure technical accuracy, some interpretations may be incomplete or context-dependent. Constructive corrections or clarifications are welcome.&lt;/p&gt;

</description>
      <category>explorative</category>
      <category>linux</category>
      <category>architecture</category>
      <category>microsoft</category>
    </item>
    <item>
      <title>Cybersecurity ProxyChains: A Mask of Anonymity</title>
      <dc:creator>The Hackers Meetup Nagpur</dc:creator>
      <pubDate>Sat, 27 Dec 2025 17:09:02 +0000</pubDate>
      <link>https://dev.to/thmnagpur/cybersecurity-proxychains-a-mask-of-anonymity-45pn</link>
      <guid>https://dev.to/thmnagpur/cybersecurity-proxychains-a-mask-of-anonymity-45pn</guid>
      <description>&lt;p&gt;Maintaining anonymity when performing offensive operations or security assessments is essential in the dynamic field of cybersecurity. Routing traffic through several servers is a common strategy used by malicious actors attempting to avoid detection or by penetration testers mimicking real-world attacks. ProxyChains is among the most powerful tools in this toolbox.&lt;/p&gt;




&lt;p&gt;ProxyChains: What Are They?&lt;br&gt;
A UNIX/Linux tool called ProxyChains compels any TCP connection made by a specific application to go via a series of proxies, like SOCKS or HTTP proxies. In essence, this enables you to hide your IP address and send your connection via a number of middlemen before arriving at the destination server. The outcome? increased anonymity and difficulty in determining the request's actual source.&lt;/p&gt;




&lt;p&gt;The Operation of ProxyChains&lt;br&gt;
ProxyChains connect to the networking features of dynamically linked programs by altering the dynamic linker settings. It routes outgoing TCP connections via the configured proxy chain after intercepting them. This is how the flow could appear:&lt;/p&gt;

&lt;p&gt;To improve anonymity, this method is frequently combined with programs like Tor (The Onion Router). Your IP address is not only hidden but also redirected via a dispersed network of relays operated by volunteers when Tor and ProxyChains are combined.&lt;/p&gt;




&lt;p&gt;Real-World Use: Case Study of Russian Military Cyber Actors (2024)&lt;br&gt;
According to a joint advisory released by CISA, Russian military cyber actors used ProxyChains in combination with tools like CrackMapExec. Their goal was to avoid detection while automating evaluations of sizable Active Directory networks. These threat actors were able to spoof internal victim IP addresses and move covertly across networks by chaining proxies together.&lt;br&gt;
The practical use of proxy chaining in actual cyber operations is demonstrated by this incident, which highlights how adversaries employ these tools to obtain deeper access to vital infrastructure in addition to evading detection.&lt;/p&gt;




&lt;p&gt;Example Configuration&lt;br&gt;
ProxyChains’ configuration file is usually located at /etc/proxychains.conf. Here’s a basic snippet of how the file might be set up:&lt;/p&gt;

&lt;h1&gt;
  
  
  ProxyList format: [type] [IP] [port]
&lt;/h1&gt;

&lt;p&gt;You can add multiple proxies and even define the chaining method:&lt;br&gt;
• Dynamic Chain: Tries proxies in the order listed, skipping any that fail.&lt;br&gt;
• Strict Chain: Must use proxies in the order listed, throws errors if one fails.&lt;br&gt;
• Random: Uses a random proxy each time.&lt;/p&gt;




&lt;p&gt;NOTE: Guys, proxychains is a tool that is only full supported in Linux distributions and no other.&lt;br&gt;
Hands-On with ProxyChains&lt;br&gt;
Let’s say you want to use Nmap through ProxyChains.&lt;br&gt;
Run the below command in linux terminal.&lt;br&gt;
proxychains nmap -sT -Pn scanme.nmap.org&lt;br&gt;
Or to run Firefox through it:&lt;/p&gt;

&lt;p&gt;ProxyChains: Why Use Them?&lt;br&gt;
ProxyChains may be used by cybersecurity experts for the following reasons:&lt;br&gt;
• Anonymity: conceal your initial IP address.&lt;br&gt;
• Get around IP-based limitations: Avoid IP filtering and geo-blocking.&lt;br&gt;
• Evade Detection: Assists in keeping attackers and pentesters hidden.&lt;br&gt;
• Chaining with Tor: By navigating the Tor network, this method increases anonymity even more.&lt;/p&gt;




&lt;p&gt;Limitations&lt;br&gt;
ProxyChains has certain drawbacks in spite of its advantages:&lt;br&gt;
• It only functions with TCP traffic.&lt;br&gt;
• Has the potential to drastically slow down connections.&lt;br&gt;
• Needs proxy lists to be manually updated.&lt;br&gt;
• Incompatible with binaries that are statically compiled.&lt;/p&gt;




&lt;p&gt;Conclusion&lt;br&gt;
In conclusion, proxychains are an effective addition to any cybersecurity toolkit, especially when stealth and anonymity are crucial. Whether you work as a cyber researcher, pentester, or red teamer, knowing how to use ProxyChains can help you learn about adversarial tactics and, more crucially, how to counter them.&lt;br&gt;
Remain covert. Remain safe.&lt;/p&gt;




&lt;p&gt;References:&lt;br&gt;
• CISA Advisory on Russian Cyber Activity&lt;br&gt;
• The Evolution and Abuse of Proxy Networks &lt;/p&gt;

&lt;p&gt;The information and methods presented above are all solely for educational purposes. Their purpose is to alert readers to the dangers that exist on the internet. IT IS A CRIME TO HACK WITHOUT PERMISSION. The author and publisher of this article are not in any way liable for the actions of any readers.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>proxy</category>
      <category>security</category>
      <category>testing</category>
    </item>
    <item>
      <title>Why Some Android Games Resist Naïve Reverse Engineering</title>
      <dc:creator>The Hackers Meetup Nagpur</dc:creator>
      <pubDate>Sat, 20 Dec 2025 18:00:07 +0000</pubDate>
      <link>https://dev.to/thmnagpur/why-some-android-games-resist-naive-reverse-engineering-303h</link>
      <guid>https://dev.to/thmnagpur/why-some-android-games-resist-naive-reverse-engineering-303h</guid>
      <description>&lt;h2&gt;
  
  
  Audience
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Beginners, students, CTF players, and AppSec enthusiasts.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope &amp;amp; Intent
&lt;/h2&gt;

&lt;p&gt;This article documents a practical reverse-engineering attempt on a small Android game.&lt;/p&gt;

&lt;p&gt;The goal is &lt;strong&gt;not&lt;/strong&gt; to present a complete exploit, but to show how &lt;strong&gt;tooling, architecture, and app design&lt;/strong&gt; affect what is realistically modifiable.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Why Reverse Engineering APKs Matters
&lt;/h2&gt;

&lt;p&gt;Reverse engineering is the process of understanding what a system does &lt;strong&gt;without having access to its original source code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In Android security, reverse engineering is used for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AppSec audits (logic flaws, exposed components)&lt;/li&gt;
&lt;li&gt;Malware analysis&lt;/li&gt;
&lt;li&gt;CTFs &amp;amp; crackmes&lt;/li&gt;
&lt;li&gt;Understanding proprietary apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reverse engineering isn’t limited to software. It applies to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hardware
&lt;/li&gt;
&lt;li&gt;Firmware
&lt;/li&gt;
&lt;li&gt;Embedded devices
&lt;/li&gt;
&lt;li&gt;Automotive systems
&lt;/li&gt;
&lt;li&gt;Mobile applications
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article, we focus on &lt;strong&gt;Android APK reverse engineering&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. What Readers Will Learn by the End
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Common beginner mistakes in Android reverse engineering
&lt;/li&gt;
&lt;li&gt;How app architecture (Flutter vs native) changes attack surfaces
&lt;/li&gt;
&lt;li&gt;How to recognize dead ends early
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. What Is an APK?
&lt;/h2&gt;

&lt;p&gt;An APK (Android Package) is the installable executable format for Android, similar to &lt;code&gt;.exe&lt;/code&gt; on Windows.&lt;/p&gt;

&lt;p&gt;Technically, an APK is just a &lt;strong&gt;ZIP archive&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you unzip it, you’ll find:&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Components
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;classes.dex&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contains DEX bytecode executed by Android Runtime (ART)&lt;/li&gt;
&lt;li&gt;Primary target for reverse engineers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;AndroidManifest.xml&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defines:

&lt;ul&gt;
&lt;li&gt;Entry points (activities)&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Exported components&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;First file attackers inspect&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;res/&lt;/code&gt; &amp;amp; &lt;code&gt;resources.arsc&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI layouts, strings, images&lt;/li&gt;
&lt;li&gt;Hardcoded secrets often leak here&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;META-INF/&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App signatures &amp;amp; certificates&lt;/li&gt;
&lt;li&gt;Any modification breaks integrity unless re-signed&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Static Analysis
&lt;/h2&gt;

&lt;p&gt;Let’s do something interesting: reverse-engineer a small Android game and make it behave the way we want.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spoiler:&lt;/strong&gt; I thought this would be simple.&lt;/p&gt;

&lt;p&gt;The plan was straightforward: grab a small Android game, reverse it, tweak a few things, and “win” at will.&lt;/p&gt;

&lt;p&gt;Easy, right?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Famous last words.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Target APK
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;APK: &lt;a href="https://f-droid.org/en/packages/fr.odrevet.kingdomino_score_count/" rel="noopener noreferrer"&gt;https://f-droid.org/en/packages/fr.odrevet.kingdomino_score_count/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Downloaded as: &lt;code&gt;KingDomino.apk&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since this is from &lt;strong&gt;F-Droid&lt;/strong&gt;, we can safely assume the app is non-obfuscated and cleanly built: perfect for a beginner reverse-engineering attempt.&lt;/p&gt;




&lt;h3&gt;
  
  
  a) Manifest Analysis
&lt;/h3&gt;

&lt;p&gt;First stop: &lt;code&gt;AndroidManifest.xml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I unpacked the APK using apktool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apktool d KingDomino.apk -o king
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The manifest is always worth inspecting first: not because it tells you how the app works, but because it tells you &lt;strong&gt;what the app is allowed to do&lt;/strong&gt;: permissions, exported components, entry points, and intent filters.&lt;/p&gt;

&lt;p&gt;Minimal example of what we usually look for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;uses-permission android:name="android.permission.INTERNET"/&amp;gt;
&amp;lt;activity android:name=".MainActivity"&amp;gt;
    &amp;lt;intent-filter&amp;gt;
        &amp;lt;action android:name="android.intent.action.MAIN"/&amp;gt;
        &amp;lt;category android:name="android.intent.category.LAUNCHER"/&amp;gt;
    &amp;lt;/intent-filter&amp;gt;
&amp;lt;/activity&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This immediately answers two questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What capabilities does the app request?&lt;/li&gt;
&lt;li&gt;Where does execution start?&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  What This App’s Manifest Shows
&lt;/h3&gt;

&lt;p&gt;In this case, the manifest was refreshingly boring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A single launcher activity&lt;/li&gt;
&lt;li&gt;No suspicious permissions&lt;/li&gt;
&lt;li&gt;No exported services or receivers doing anything shady&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relevant part (trimmed for clarity):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;application&lt;/span&gt;
    &lt;span class="na"&gt;android:extractNativeLibs=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
    &lt;span class="na"&gt;android:icon=&lt;/span&gt;&lt;span class="s"&gt;"@mipmap/ic_launcher"&lt;/span&gt;
    &lt;span class="na"&gt;android:label=&lt;/span&gt;&lt;span class="s"&gt;"Kingdomino Score"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;activity&lt;/span&gt;
        &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"com.example.kingdomino_score_count.MainActivity"&lt;/span&gt;
        &lt;span class="na"&gt;android:exported=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;intent-filter&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;action&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.intent.action.MAIN"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
           &lt;span class="nt"&gt;&amp;lt;category&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.intent.category.LAUNCHER"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/intent-filter&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/activity&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta-data&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"flutterEmbedding"&lt;/span&gt; &lt;span class="na"&gt;android:value=&lt;/span&gt;&lt;span class="s"&gt;"2"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/application&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing crazy here: just a game asking for local storage and declaring a main activity.&lt;/p&gt;




&lt;h3&gt;
  
  
  b) Decompiled Code (jadx)
&lt;/h3&gt;

&lt;p&gt;Next step: &lt;code&gt;jadx-gui&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Normally, this is where you start tracing logic from &lt;code&gt;MainActivity&lt;/code&gt;, following method calls, hunting for score calculations or state variables.&lt;/p&gt;

&lt;p&gt;…and that was it.&lt;/p&gt;

&lt;p&gt;No logic.&lt;br&gt;
No methods.&lt;br&gt;
No state.&lt;/p&gt;

&lt;p&gt;My brain hit pause.&lt;/p&gt;


&lt;h3&gt;
  
  
  First Red Flag
&lt;/h3&gt;

&lt;p&gt;Scrolling through the imports and parent classes, something felt off. I kept seeing references to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;io.flutter.embedding.android.FlutterActivity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Flutter?&lt;/p&gt;

&lt;p&gt;Wait… what?&lt;/p&gt;

&lt;p&gt;This wasn’t a normal Java/Kotlin game. The Java/Kotlin code wasn’t the game at all, it was just a wrapper.&lt;/p&gt;

&lt;p&gt;Exploring around different main files in root directories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Signature panel&lt;/strong&gt;&lt;br&gt;
Shows signer name, signatures, and hashes.&lt;br&gt;
If this were a malicious APK, this would be a starting point to match hashes with known malware.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Summary panel&lt;/strong&gt;&lt;br&gt;
Shows what jadx has found after decoding the APK.&lt;br&gt;
It clearly states native libs, a strong indicator of a Flutter build.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;jadx also shows &lt;code&gt;kotlin-tooling-metadata&lt;/code&gt;, which is an easy trap to fall into.&lt;/p&gt;

&lt;p&gt;Seeing Kotlin build metadata does &lt;strong&gt;not&lt;/strong&gt; mean the app logic is written in Kotlin.&lt;/p&gt;

&lt;p&gt;Flutter apps still use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gradle&lt;/li&gt;
&lt;li&gt;Kotlin plugins&lt;/li&gt;
&lt;li&gt;Android wrappers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This metadata only tells you &lt;strong&gt;how the Android shell was built&lt;/strong&gt;, not where the game logic lives.&lt;/p&gt;




&lt;h3&gt;
  
  
  Where the Logic Actually Lives
&lt;/h3&gt;

&lt;p&gt;The real game logic wasn’t in Java or Kotlin at all.&lt;/p&gt;

&lt;p&gt;It was written in &lt;strong&gt;Dart&lt;/strong&gt;, compiled &lt;strong&gt;ahead-of-time&lt;/strong&gt; into a native shared library: &lt;code&gt;libapp.so&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Everything I normally do hunting strings, patching methods in Java was useless.&lt;/p&gt;

&lt;p&gt;The logic was literally hidden behind Flutter’s engine.&lt;/p&gt;

&lt;p&gt;At that moment, I realized this was going to be a lesson in why Flutter apps are so resilient to beginner hacks.&lt;/p&gt;

&lt;p&gt;My plan to just “patch the logic” hit a wall.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Dynamic Analysis
&lt;/h2&gt;

&lt;p&gt;Dart is &lt;strong&gt;AOT (Ahead-Of-Time compiled)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The game logic may not appear anywhere obvious in the decoded app but it exists inside &lt;code&gt;lib/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Example directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\king\lib\arm64-v8a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;libapp.so
libflutter.so
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These are shared object files.&lt;/p&gt;

&lt;p&gt;We can’t just “Ghidra” over them in any meaningful way.&lt;br&gt;
Ghidra will only show stripped native code with little semantic meaning.&lt;/p&gt;

&lt;p&gt;Flutter AOT compiles Dart directly into native code.&lt;/p&gt;


&lt;h3&gt;
  
  
  What’s the Workaround?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Frida (or any binary instrumentation tool)&lt;/li&gt;
&lt;li&gt;A partial hack&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We’ll talk about the &lt;strong&gt;hack&lt;/strong&gt; here.&lt;/p&gt;

&lt;p&gt;Since we downloaded the APK from F-Droid (important), we can &lt;strong&gt;patch the Manifest to enable debugging&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  Enabling Debugging
&lt;/h3&gt;

&lt;p&gt;Open &lt;code&gt;AndroidManifest.xml&lt;/code&gt; and add:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;android:debuggable="true"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;application&lt;/span&gt;
    &lt;span class="na"&gt;android:appComponentFactory=&lt;/span&gt;&lt;span class="s"&gt;"androidx.core.app.CoreComponentFactory"&lt;/span&gt;
    &lt;span class="na"&gt;android:extractNativeLibs=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;
    &lt;span class="na"&gt;android:icon=&lt;/span&gt;&lt;span class="s"&gt;"@mipmap/ic_launcher"&lt;/span&gt;
    &lt;span class="na"&gt;android:label=&lt;/span&gt;&lt;span class="s"&gt;"Kingdomino Score"&lt;/span&gt;
    &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.app.Application"&lt;/span&gt;
    &lt;span class="na"&gt;android:debuggable=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Make sure this is inside &lt;code&gt;&amp;lt;application&amp;gt;&lt;/code&gt; and above the first &lt;code&gt;&amp;lt;activity&amp;gt;&lt;/code&gt; tag.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Rebuild, Align, and Sign
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-jar&lt;/span&gt; apktool_2.12.1.jar b .&lt;span class="se"&gt;\k&lt;/span&gt;ing &lt;span class="nt"&gt;-o&lt;/span&gt; .&lt;span class="se"&gt;\k&lt;/span&gt;ing_rebuilt.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;zipalign &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 4 .&lt;span class="se"&gt;\k&lt;/span&gt;ing_rebuilt.apk .&lt;span class="se"&gt;\k&lt;/span&gt;ing_aligned.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Verification successful
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apksigner sign &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--ks&lt;/span&gt; debug.keystore &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--ks-pass&lt;/span&gt; pass:android &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--key-pass&lt;/span&gt; pass:android &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--out&lt;/span&gt; king_signed.apk &lt;span class="se"&gt;\&lt;/span&gt;
  king_aligned.apk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Using &lt;code&gt;run-as&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Start adb shell and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;run-as fr.odrevet.kingdomino_score_count
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Directory listing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app_flutter
cache
code_cache
files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the game were persistent, saved scores or preferences would appear here.&lt;/p&gt;

&lt;p&gt;But this game isn’t persistent.&lt;/p&gt;

&lt;p&gt;Files may also be visible in phone storage, but &lt;strong&gt;real-time scores are never stored&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dead End? Or…
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why This Failed
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Flutter apps are extremely resilient&lt;/strong&gt; to beginner-level hacks.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Is this possible with Frida?
 &lt;em&gt;Maybe. Yes.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The game itself is non-persistent&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Scores are calculated and rendered at runtime&lt;/li&gt;
&lt;li&gt;Nothing is written to disk&lt;/li&gt;
&lt;li&gt;No preferences, database, or file to patch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if this were a pure Java/Kotlin app, there would still be nothing to modify.&lt;/p&gt;

&lt;p&gt;If high scores or coins were stored locally, modifying them via &lt;code&gt;run-as&lt;/code&gt; would have been trivial.&lt;/p&gt;

&lt;p&gt;Here, there was simply nothing to persist.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Real Problem
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Game logic lives in native AOT Dart code&lt;/li&gt;
&lt;li&gt;Logic operates entirely in memory&lt;/li&gt;
&lt;li&gt;No persistence&lt;/li&gt;
&lt;li&gt;No exposed state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To modify behavior, you’d need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runtime instrumentation&lt;/li&gt;
&lt;li&gt;Memory hooks&lt;/li&gt;
&lt;li&gt;A middleman between logic and rendering&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is &lt;strong&gt;not feasible&lt;/strong&gt; on a non-rooted device without advanced tooling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Takeaways
&lt;/h2&gt;

&lt;p&gt;Before touching jadx.&lt;br&gt;
Before hunting strings.&lt;br&gt;
Before dreaming about patches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Know what you’re reversing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Next time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I’ll check for Flutter first.&lt;/li&gt;
&lt;li&gt;And maybe I’ll bring Frida.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stay tuned.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Written By:&lt;/strong&gt; Akanksha Sawant&lt;br&gt;
&lt;strong&gt;From:&lt;/strong&gt; THM Nagpur Core Team&lt;/p&gt;




&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;This article documents a practical reverse-engineering attempt and the conclusions drawn from it. While care has been taken to ensure technical accuracy, some interpretations may be incomplete or context-dependent. Constructive corrections or clarifications are welcome.&lt;/p&gt;

</description>
      <category>explorative</category>
      <category>security</category>
      <category>learning</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Supply Chain Attacks: The Silent Killer</title>
      <dc:creator>The Hackers Meetup Nagpur</dc:creator>
      <pubDate>Tue, 27 May 2025 05:15:55 +0000</pubDate>
      <link>https://dev.to/thmnagpur/supply-chain-attacks-the-silent-killer-with-thm-nagpur-138k</link>
      <guid>https://dev.to/thmnagpur/supply-chain-attacks-the-silent-killer-with-thm-nagpur-138k</guid>
      <description>&lt;p&gt;Hello, Today we are going to talk about one such cybersecurity threat that silently enters our system and causes a lot of destruction – Supply Chain Attacks. These attacks are so silent that companies do not even know when their data and system got compromised. In a digital-first economy like India, where the craze for UPI, Aadhaar and cloud services is increasing, this threat becomes even more critical. So let us understand – what is supply chain attacks, why is it so dangerous, and how can it be stopped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Is a Supply Chain Attack?&lt;/strong&gt;&lt;br&gt;
A supply chain attack is a cyber security attack where hackers target the company's trusted vendors, suppliers or third party services rather than directly targeting the company, which makes it easier for them to get access to the main organisation&lt;/p&gt;

&lt;p&gt;Imagine a plan to hack a fort's trusted gatekeeper and enter inside - exactly like that!&lt;/p&gt;

&lt;p&gt;If a company's system runs on some third-party software, and a hacker injects malware during the update of that software, then all the companies using that software automatically get infected. Just one small mistake can bring down the entire system!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Is It So Dangerous?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The attack comes from a trusted vendor, which is difficult to detect .A single attack can affect thousands or millions of systems. Like the case of SolarWinds (2020), in which 18,000 organizations were compromised.&lt;/p&gt;

&lt;p&gt;According to the ENISA 2021 report, supply chain attacks cannot be detected for months or years . State-sponsored groups like China's APT-41 and Russia's Cozy Bear use these attacks for espionage and attacking infrastructure.&lt;/p&gt;

&lt;p&gt;In 2023, a compromised software update of an Indian IT service provider leaked sensitive data of multiple clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recent Research: What Do the Numbers Say?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cowbell Cyber ​​Risk Report (2025): Supply chain attacks have seen a growth of 431% between 2021-2023.&lt;/p&gt;

&lt;p&gt;Data Theorem Survey (2024): 91% of organizations are those that faced a software supply chain attack last year.&lt;/p&gt;

&lt;p&gt;Gartner (2023): According to Gartner, by 2025, 45% of global organizations can fall victim to supply chain attacks.&lt;/p&gt;

&lt;p&gt;ReversingLabs (2024): According to ReversingLabs, malicious packages in open-source repositories have increased by 28%.&lt;/p&gt;

&lt;p&gt;India Cyber ​​Threat Report 2025: Finance or healthcare sectors are most likely to be at risk, especially due to AI-driven attacks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indian Context: Challenges and Examples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Digital Boom&lt;br&gt;
 UPI did transactions worth more than ₹200 lakh crore in 2024 – and this whole ecosystem is heavily dependent on third-party vendors.&lt;/p&gt;

&lt;p&gt;• Vendor Ecosystem&lt;br&gt;
 Indian companies depend on global vendors (cloud providers, software tools) – which become entry points for attackers.&lt;/p&gt;

&lt;p&gt;• Geopolitical Tensions&lt;br&gt;
 According to the report, China and Pakistan-backed groups like Cosmic Leopard are actively targeting Indian orgs.&lt;/p&gt;

&lt;p&gt;• Lack of Audits&lt;br&gt;
 According to PwC India (2024) survey, only 23% organizations monitor real-time vendor security.&lt;/p&gt;

&lt;p&gt;• Example: In 2023, a Mumbai-based IT service provider's software update contained malware which leaked financial data of many companies. This clearly shows that Indian companies will have to focus more on their vendor ecosystem&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-World Global Examples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• SolarWinds (2020): Russian hackers injected malware into an update of SolarWinds' Orion software - affecting 18,000 organizations - including Microsoft and US gov.&lt;/p&gt;

&lt;p&gt;• MOVEit (2023): The Cl0p ransomware group exploited a zero-day vulnerability in MOVEit's file transfer tool, compromising 620+ organizations, including BBC, British Airways.&lt;/p&gt;

&lt;p&gt;• Wipro (2020): Hackers launched a phishing attack using Wipro's systems, stealing sensitive data from clients. This incident clearly shows that Indian companies are also vulnerable to cyber attacks.&lt;/p&gt;

&lt;p&gt;• XZ Utils (2024): A backdoor was hidden in the open-source tool which was not detected for years – this highlights that open source dependencies can also be risky&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How Do These Attacks Happen?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Malicious code is injected into software updates or libraries.&lt;br&gt;
Vendors and employees are targeted through Phishing &amp;amp; Social Engineering&lt;br&gt;
 and credentials are stolen.&lt;br&gt;
Malware is pre-installed in hardware components.&lt;br&gt;
Unknown vulnerabilities are exploited like zero- Day vulnerabilities&lt;br&gt;
AI-driven malware and deepfake technologies are making supply chain attacks more dangerous (India Cyber ​​Threat Report 2025).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;India-Specific Challenges&lt;/strong&gt;&lt;br&gt;
• Regulatory Gaps: IT Act, 2000 is outdated, does not cover modern supply chain threats.&lt;br&gt;
• Lack of Awareness: SMEs have a lack of cybersecurity  training and vendor audits.&lt;br&gt;
• Import Dependency: Nuclear and defense systems are dependent on foreign hardware/software.&lt;br&gt;
• Geopolitical Threats: Groups like China's Salt Typhoon are targeting financial and government systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prevention and Mitigation Strategies&lt;/strong&gt;&lt;br&gt;
Do security checks of every vendor, make audits mandatory.&lt;br&gt;
Do not blindly trust any access – use continuous verification.&lt;br&gt;
Use Software Composition Analysis tools to detect open-source vulnerabilities.&lt;br&gt;
SBOM (Software Bill of Materials): Keep a detailed list of every software component.&lt;br&gt;
Keep sensitive data secure with AES encryption.&lt;br&gt;
Regularly test systems for vulnerabilities.&lt;br&gt;
Train staff on phishing and social engineering attacks.&lt;br&gt;
Be prepared for quick response and recovery.&lt;br&gt;
Increase the use of local software and hardware to reduce foreign risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Indian Initiatives and Future Outlook&lt;/strong&gt;&lt;br&gt;
• CERT-In: Provides guidelines and alerts against supply chain attacks.&lt;br&gt;
• NCIIPC: Works on security of critical sectors like finance, energy.&lt;br&gt;
• RBI Guidelines (2024): Vendor audits and zero trust rules made mandatory for banks.&lt;br&gt;
• Make in India: Development of local cybersecurity products is increasing.&lt;/p&gt;

&lt;p&gt;But gaps still exist. As per PwC India’s 2024 survey, Indian organisation need to increase cyber budgets by 6-15%. Public-private partnerships, like India Stack for Aadhaar, could be a game-changer in cybersecurity in the future.&lt;/p&gt;

&lt;p&gt;Supply Chain Attacks are a silent killer – a single weak vendor can collapse the entire digital ecosystem. In a rapidly digitizing country like India, this threat becomes even more dangerous. According to 2025 reports, AI and open-source vulnerabilities are making these attacks even more intense.&lt;/p&gt;

&lt;p&gt;But if we take steps like vendor management, zero trust and proactive monitoring, we can stop this silent killer.&lt;/p&gt;

&lt;p&gt;Share your thoughts in the comments&lt;/p&gt;

&lt;p&gt;&lt;em&gt;written By &lt;a href="https://in.linkedin.com/in/parveshdahale" rel="noopener noreferrer"&gt;Parvesh Dahale&lt;/a&gt;&lt;br&gt;
From &lt;a href="https://www.instagram.com/thm_ngp/" rel="noopener noreferrer"&gt;THM Nagpur Core Team&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>attack</category>
      <category>security</category>
      <category>community</category>
      <category>cybersecurity</category>
    </item>
  </channel>
</rss>
