<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Reverse Engineering on Dhiru's Notebook</title><link>https://rfcorner.in/tags/reverse-engineering/</link><description>Recent content in Reverse Engineering on Dhiru's Notebook</description><generator>Hugo</generator><language>en</language><lastBuildDate>Mon, 29 Sep 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://rfcorner.in/tags/reverse-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>Debugging gaming pads on Linux</title><link>https://rfcorner.in/posts/debugging-controllers-linux/</link><pubDate>Mon, 29 Sep 2025 00:00:00 +0000</pubDate><guid>https://rfcorner.in/posts/debugging-controllers-linux/</guid><description>&lt;p&gt;While running &lt;a href="https://github.com/fhoedemakers/pico-infonesPlus"&gt;https://github.com/fhoedemakers/pico-infonesPlus&lt;/a&gt;, I found that my SNES gaming pad was not fully supported.&lt;/p&gt;
&lt;p&gt;Specifically, the UP/DOWN and LEFT/RIGHT keys were not working.&lt;/p&gt;
&lt;p&gt;Let's debug this a bit:&lt;/p&gt;
&lt;p&gt;Plug in the gaming pad on a Linux box and run the following command (&lt;code&gt;hidraw5&lt;/code&gt; will need to be changed as needed):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ lsusb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Bus &lt;span class="m"&gt;001&lt;/span&gt; Device 063: ID 0810:e501 Personal Communication Systems, Inc. SNES Gamepad
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ sudo hexdump -C /dev/hidraw5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00004a50 &lt;span class="m"&gt;01&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; 7f 7f 0f &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;01&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; 7f &lt;span class="m"&gt;00&lt;/span&gt; 0f &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;................&lt;span class="p"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00004a60 &lt;span class="m"&gt;01&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; 7f &lt;span class="m"&gt;00&lt;/span&gt; 0f &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;01&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; 7f &lt;span class="m"&gt;00&lt;/span&gt; 0f &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;................&lt;span class="p"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00004a80 &lt;span class="m"&gt;01&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; 7f 7f 0f &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;01&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt; 7f 7f 0f &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt;................&lt;span class="p"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is what I see when pressing the &lt;code&gt;UP&lt;/code&gt; key.&lt;/p&gt;</description></item><item><title>Debugging/Reversing Firebase gRPC Traffic with mitmproxy</title><link>https://rfcorner.in/posts/debugging-grpc-traffic-with-mitmproxy/</link><pubDate>Wed, 16 Apr 2025 00:00:00 +0000</pubDate><guid>https://rfcorner.in/posts/debugging-grpc-traffic-with-mitmproxy/</guid><description>&lt;p&gt;Recently, I was stuck trying to understand how Firebase gRPC calls worked and
how I could generate, modify, and replay them. Trapping and modifying existing
gRPC traffic was not working well. Finally, I took a step back and spent some
time learning how to build and debug simple Firebase applications. This
approach helped me tremendously, and I was able to make further progress with
my original task quickly.&lt;/p&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;You may find the following code sample useful when reversing/debugging Firebase
applications.&lt;/p&gt;</description></item></channel></rss>