Decompile Python Byte Code || CODE

Hai guys ... Problem matika untuk keamanan code / enkripsi sebuah code memang di perlukan untuk mencegah anak anak bucin yang cuma mengganti AUTHOR sebuah code, mungkin kamu juga pernah mengalami.

 Banyak yang menggunakan byte-code python sebagai obfuscator tetapi kita tahu bahwa “OBFUSCATOR” never works. karena tujuannya adalah menumpang tindih code dan me — revealnya, itu lah yang menjadi sebab mengapa obfuscator tidak pernah bekerja bahkan bisa lead to Remote Code Execution. walaupun bisa di deobfus tetapi banyak developer mempersengaja obfuscatornya supaya merepotkan Reverse Engineer dan Encryption Analyst.

Sekarang kita melanjutkan dengan requirements melakukan metode ini:

  • Menggunakan UNCOMPYLE6
  • Pemilihan versi
  • Examinasi file byte-code atau marshal
untuk examinasi file di artikel ini saya menggunakan python 2.7 dan file berupa https://github.com/hatakecnk/CompileMarshal yang berisi:

#Compiled By xNot_Found
#Github : https://github.com/hatakecnk
import marshal
exec(marshal.loads('c\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00@\x00\x00\x00s\xfb\x02\x00\x00d\x00\x00d\x01\x00l\x00\x00Z\x00\x00d\x00\x00d\x01\x00l\x01\x00Z\x01\x00d\x00\x00d\x01\x00l\x02\x00Z\x02\x00d\x00\x00d\x01\x00l\x03\x00Z\x03\x00d\x02\x00Z\x04\x00d\x03\x00Z\x05\x00d\x04\x00Z\x06\x00d\x05\x00Z\x07\x00d\x06\x00Z\x08\x00d\x07\x00\x84\x00\x00Z\t\x00y2\x00e\t\x00\x83\x00\x00\x01e\x06\x00d\x08\x00\x17GHe\n\x00d\t\x00\x83\x01\x00Z\x0b\x00e\x0b\x00j\x0c\x00d\n\x00d\x0b\x00\x83\x02\x00Z\r\x00Wn\x0e\x01\x04e\x0e\x00k\n\x00r\xc7\x00\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x0f\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\xd3\x00\x04e\x10\x00k\n\x00r0\x01\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x10\x00\x17GHe\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x11\x00\x17GHe\x03\x00j\x11\x00d\x12\x00\x83\x01\x00\x01e\x01\x00j\x0f\x00\x83\x00\x00\x01nj\x00\x04e\x12\x00k\n\x00r\x99\x01\x01\x01\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x13\x00\x17GHe\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x11\x00\x17GHe\x03\x00j\x11\x00d\x12\x00\x83\x01\x00\x01e\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xy\x19\x00e\x13\x00e\x0b\x00d\x14\x00\x83\x02\x00j\x14\x00\x83\x00\x00Z\x15\x00WnC\x00\x04e\x16\x00k\n\x00r\xf8\x01\x01\x01\x01e\t\x00\x83\x00\x00\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x15\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xy%\x00e\x17\x00e\x15\x00d\x16\x00d\x17\x00\x83\x03\x00Z\x18\x00e\x00\x00j\x19\x00e\x18\x00\x83\x01\x00Z\x1a\x00WnC\x00\x04e\x1b\x00k\n\x00rc\x02\x01\x01\x01e\t\x00\x83\x00\x00\x01e\x05\x00d\x0c\x00\x17e\x07\x00\x17d\r\x00\x17e\x05\x00\x17d\x0e\x00\x17e\x07\x00\x17d\x18\x00\x17GHe\x01\x00j\x0f\x00\x83\x00\x00\x01n\x01\x00Xe\x13\x00e\r\x00d\x19\x00\x17d\x1a\x00\x83\x02\x00Z\x1c\x00e\x1c\x00j\x1d\x00d\x1b\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1c\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1d\x00\x83\x01\x00\x01e\x1c\x00j\x1d\x00d\x1e\x00e\x1e\x00e\x1a\x00\x83\x01\x00\x17d\x1f\x00\x17\x83\x01\x00\x01e\x1c\x00j\x1f\x00\x83\x00\x00\x01e\t\x00\x83\x00\x00\x01e\x04\x00d\x0c\x00\x17e\x07\x00\x17d \x00\x17e\x04\x00\x17d\x0e\x00\x17e\x06\x00\x17d!\x00\x17e\x07\x00\x17e\r\x00\x17d"\x00\x17GHd\x01\x00S(#\x00\x00\x00i\xff\xff\xff\xffNs\x05\x00\x00\x00\x1b[34ms\x05\x00\x00\x00\x1b[31ms\x05\x00\x00\x00\x1b[32ms\x04\x00\x00\x00\x1b[0ms\x07\x00\x00\x00\x1b[33;5mc\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00C\x00\x00\x00s\xfb\x00\x00\x00t\x00\x00j\x01\x00d\x01\x00\x83\x01\x00\x01t\x02\x00d\x02\x00\x17GHt\x03\x00d\x03\x00\x17GHt\x02\x00d\x02\x00\x17GHt\x04\x00d\x04\x00\x17d\x05\x00d\x06\x00\x14\x17d\x07\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\t\x00\x17t\x03\x00\x17d\n\x00\x17t\x04\x00\x17d\x0b\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x0c\x00\x17t\x03\x00\x17d\r\x00\x17t\x04\x00\x17d\x0e\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x0f\x00\x17t\x03\x00\x17d\x10\x00\x17t\x04\x00\x17d\x08\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x11\x00\x17t\x03\x00\x17d\x12\x00\x17t\x04\x00\x17d\x13\x00\x17GHt\x04\x00d\x08\x00\x17t\x05\x00\x17d\x14\x00\x17t\x03\x00\x17d\x15\x00\x17t\x04\x00\x17d\x16\x00\x17GHt\x04\x00d\x04\x00\x17d\x05\x00d\x06\x00\x14\x17d\x17\x00\x17GHd\x00\x00S(\x18\x00\x00\x00Nt\x05\x00\x00\x00clears$\x00\x00\x00     +-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+s$\x00\x00\x00     |C|o|m|p|i|l|e| |M|a|r|s|h|a|l|s\x02\x00\x00\x000{i\'\x00\x00\x00t\x01\x00\x00\x00=s\x02\x00\x00\x00}0t\x01\x00\x00\x00|s\x0b\x00\x00\x00 Coded by: t\n\x00\x00\x00xNot_Founds\x15\x00\x00\x00                    |s\x0b\x00\x00\x00 Contact : s\x10\x00\x00\x00+62823-8637-2115s\x0f\x00\x00\x00              |s\x0b\x00\x00\x00 Email   : s\x1e\x00\x00\x00febryafriansyah@programmer.nets\x0b\x00\x00\x00 Website : s\x1a\x00\x00\x00http://hatakecnk.noads.bizs\x05\x00\x00\x00    |s\x0b\x00\x00\x00 Github  : s\x1c\x00\x00\x00https://github.com/hatakecnks\x03\x00\x00\x00  |s\x03\x00\x00\x00}0\n(\x06\x00\x00\x00t\x02\x00\x00\x00ost\x06\x00\x00\x00systemt\x01\x00\x00\x00Rt\x01\x00\x00\x00Wt\x01\x00\x00\x00Yt\x01\x00\x00\x00B(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<debby>t\x06\x00\x00\x00banner\t\x00\x00\x00s\x16\x00\x00\x00\x00\x01\r\x01\t\x01\t\x01\t\x01\x15\x01!\x01!\x01!\x01!\x01!\x01s\x11\x00\x00\x00Ex :/sdcard/ex.pys*\x00\x00\x00\x1b[0m[\x1b[31mInput Your File Path\x1b[0m]> \x1b[36ms\x03\x00\x00\x00.pyt\x00\x00\x00\x00t\x01\x00\x00\x00[t\x01\x00\x00\x00!s\x02\x00\x00\x00] s\x12\x00\x00\x00there is an error\ns\x0f\x00\x00\x00ctrl+c detecteds\x0f\x00\x00\x00trying to exit\ni\x03\x00\x00\x00s\x0f\x00\x00\x00ctrl+d detectedt\x01\x00\x00\x00rs\x0f\x00\x00\x00file not exist\ns\x07\x00\x00\x00<debby>t\x04\x00\x00\x00execs\x16\x00\x00\x00file already compiled\ns\x06\x00\x00\x00enc.pyt\x02\x00\x00\x00wbs\x18\x00\x00\x00#Compiled By xNot_Found\ns\'\x00\x00\x00#Github : https://github.com/hatakecnk\ns\x0f\x00\x00\x00import marshal\ns\x13\x00\x00\x00exec(marshal.loads(s\x02\x00\x00\x00))t\x01\x00\x00\x00+s\r\x00\x00\x00file saved : s\x07\x00\x00\x00enc.py\n( \x00\x00\x00t\x07\x00\x00\x00marshalt\x03\x00\x00\x00sysR\x04\x00\x00\x00t\x04\x00\x00\x00timeR\t\x00\x00\x00R\x06\x00\x00\x00t\x01\x00\x00\x00GR\x07\x00\x00\x00R\x08\x00\x00\x00R\n\x00\x00\x00t\t\x00\x00\x00raw_inputt\x04\x00\x00\x00filet\x07\x00\x00\x00replacet\x01\x00\x00\x00ot\n\x00\x00\x00IndexErrort\x04\x00\x00\x00exitt\x11\x00\x00\x00KeyboardInterruptt\x05\x00\x00\x00sleept\x08\x00\x00\x00EOFErrort\x04\x00\x00\x00opent\x04\x00\x00\x00readt\x05\x00\x00\x00strngt\x07\x00\x00\x00IOErrort\x07\x00\x00\x00compilet\x04\x00\x00\x00codet\x05\x00\x00\x00dumpst\x04\x00\x00\x00datat\t\x00\x00\x00TypeErrort\x07\x00\x00\x00fileoutt\x05\x00\x00\x00writet\x04\x00\x00\x00reprt\x05\x00\x00\x00close(\x00\x00\x00\x00(\x00\x00\x00\x00(\x00\x00\x00\x00s\x07\x00\x00\x00<debby>t\x08\x00\x00\x00<module>\x02\x00\x00\x00sZ\x00\x00\x000\x01\x06\x01\x06\x01\x06\x01\x06\x01\x06\x02\t\r\x03\x01\x07\x01\t\x01\x0c\x01\x16\x01\r\x01!\x01\r\x01\r\x01!\x01!\x01\r\x01\r\x01\r\x01!\x01!\x01\r\x01\x0e\x02\x03\x01\x19\x01\r\x01\x07\x01!\x01\x0e\x01\x03\x01\x12\x01\x13\x01\r\x01\x07\x01!\x01\x0e\x02\x13\x01\r\x01\r\x01\r\x01\x1b\x01\n\x01\x07\x01'))

Menginstall UNCOMPYLE6
-sudo apt-get install python-pip ( apt install python2 yang ane gunakan di termux)
-pip install uncompyle6 ( pip2 install uncompyle6 di termux)

Untuk python3 kita bisa menggunakan pip3 dengan metode sama dengan yang di atas.

Ubah exec menjadi variable dengan nama apapun. disini saya menggunakan variable x

x = marshal.loads("bytecode")

Lakukan Decompile dengan string berikut :

from sys import stdout
from uncompyle6.main import decompile
import marshal

x = marshal.loads("REDACTED BYTECODE")

decompile(2.7, x, stdout)


Taraa.... byte-code sudah terpecah menjadi code biasa tanpa marshal .

Sekian dan Terima Kasih