    {"id":884,"date":"2021-04-16T10:25:35","date_gmt":"2021-04-16T10:25:35","guid":{"rendered":"http:\/\/student-activity.binus.ac.id\/csc\/?p=884"},"modified":"2021-04-16T10:25:35","modified_gmt":"2021-04-16T10:25:35","slug":"picoctf%e2%80%8c-%e2%80%8c2021%e2%80%8c-%e2%80%8cwriteup%e2%80%8c","status":"publish","type":"post","link":"https:\/\/student-activity.binus.ac.id\/csc\/2021\/04\/picoctf%e2%80%8c-%e2%80%8c2021%e2%80%8c-%e2%80%8cwriteup%e2%80%8c\/","title":{"rendered":"PICOCTF\u200c \u200c2021\u200c \u200cWRITEUP\u200c"},"content":{"rendered":"<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Pada artikel CTF kali ini, kami akan membahas mengenai PICOCTF 2021 yang bisa kalian akses soalnya di <\/span><a href=\"https:\/\/picoctf.org\/\"><span style=\"font-weight: 400\">https:\/\/picoctf.org\/<\/span><\/a><span style=\"font-weight: 400\">. Soal yang akan kami jelaskan adalah soal Reverse Engineering yang bernama <\/span><strong>Transformation<\/strong><span style=\"font-weight: 400\"> dengan nilai 20 poin.<\/span><\/p>\n<p style=\"text-align: justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-885\" src=\"http:\/\/student-activity.binus.ac.id\/csc\/wp-content\/uploads\/sites\/37\/2021\/04\/Screenshot-from-2021-03-19-19-42-16.png\" alt=\"\" width=\"924\" height=\"491\" \/><\/p>\n<p style=\"text-align: justify\"><b>Attached file content:<\/b><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">enc :<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">\u7069\u636f\u4354\u467b\u3136\u5f62\u6974\u735f\u696e\u7374\u3334\u645f\u6f66\u5f38\u5f65\u3134\u3161\u3066\u377d<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">\n<p style=\"text-align: justify\"><b>Analisa Soal<\/b><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Diberikan sebuah <\/span><i><span style=\"font-weight: 400\">text<\/span><\/i><span style=\"font-weight: 400\"> yang nampaknya sudah terenkripsi menggunakan <\/span><i><span style=\"font-weight: 400\">code python <\/span><\/i><span style=\"font-weight: 400\">yang telah diberikan. Kami mencoba untuk memodifikasi <\/span><i><span style=\"font-weight: 400\">code <\/span><\/i><span style=\"font-weight: 400\">tersebut agar lebih mudah dimengerti. Setelah dianalisa, <\/span><i><span style=\"font-weight: 400\">code<\/span><\/i><span style=\"font-weight: 400\"> tersebut dapat kita rekonstruksi menjadi seperti ini:\u00a0<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>def<\/b> <b>encrypted<\/b><span style=\"font-weight: 400\">(flag):<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 enc = <\/span><span style=\"font-weight: 400\">&#8220;&#8221;<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 <\/span><b>for<\/b><span style=\"font-weight: 400\"> i <\/span><b>in<\/b><span style=\"font-weight: 400\"> range(<\/span><span style=\"font-weight: 400\">0<\/span><span style=\"font-weight: 400\">, len(flag), <\/span><span style=\"font-weight: 400\">2<\/span><span style=\"font-weight: 400\">):<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\"> \u00a0 <\/span> <span style=\"font-weight: 400\"> enc += chr((ord(flag[i]) &lt;&lt; <\/span><span style=\"font-weight: 400\">8<\/span><span style=\"font-weight: 400\">) + ord(flag[i + <\/span><span style=\"font-weight: 400\">1<\/span><span style=\"font-weight: 400\">]))<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 dec = <\/span><span style=\"font-weight: 400\">&#8221;<\/span><span style=\"font-weight: 400\">.join(enc)<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 print(dec)<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">\n<p style=\"text-align: justify\"><b>Alur <\/b><b><i>code<\/i><\/b><b>:<\/b><\/p>\n<ol style=\"text-align: justify\">\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Fungsi <\/span><span style=\"font-weight: 400\"><em>encrypted<\/em> <\/span><span style=\"font-weight: 400\">akan menerima <\/span><span style=\"font-weight: 400\"><em>string<\/em> <\/span><span style=\"font-weight: 400\">flag.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Fungsi akan mengambil per 2 karakter. Dimana karakter pertama akan diubah ke bentuk desimal dan di-<\/span><em><span style=\"font-weight: 400\">shift<\/span><\/em><span style=\"font-weight: 400\"> sebanyak 8 bit ke kiri. Kemudian hasilnya akan ditambahkan dengan nilai desimal karakter setelahnya. Jumlah nilai ini akan dijadikan karakter baru melalui fungsi chr().<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Proses ini dilakukan secara repetitif hingga seluruh karakter dari<\/span><em><span style=\"font-weight: 400\"> string<\/span><\/em><span style=\"font-weight: 400\"> flag terenkripsi.<\/span><\/li>\n<\/ol>\n<p style=\"text-align: justify\"><em><span style=\"font-weight: 400\">*catatan: Karena fungsi mengambil per 2 karakter, maka total panjang hasil enkripsi akan berjumlah setengahnya dari string flag. Hal itu menandakan bahwa panjang flag pasti genap.<\/span><\/em><\/p>\n<p style=\"text-align: justify\">\n<p style=\"text-align: justify\"><b>Solusi<\/b><\/p>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Berarti yang harus kami lakukan adalah men-<\/span><em><span style=\"font-weight: 400\">shift<\/span><\/em><span style=\"font-weight: 400\"> setiap karakter yang telah dienkripsi sebanyak 8 kali ke kanan. Dan beginilah scriptnya:\u00a0<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">file = open(<\/span><span style=\"font-weight: 400\">&#8220;enc&#8221;<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">&#8220;r&#8221;<\/span><span style=\"font-weight: 400\">).read()<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">shifted = <\/span><span style=\"font-weight: 400\">&#8220;&#8221;<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><b>for<\/b><span style=\"font-weight: 400\"> i <\/span><b>in<\/b><span style=\"font-weight: 400\"> file:<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 shifted += chr(ord(i) &gt;&gt; <\/span><span style=\"font-weight: 400\">8<\/span><span style=\"font-weight: 400\">)<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">print(shifted)<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">\n<p style=\"text-align: justify\"><b>Output:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">pcCF1_isis3do__1107<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Dari pola <\/span><em><span style=\"font-weight: 400\">output<\/span><\/em><span style=\"font-weight: 400\"> yang kita temukan, mulai terbentuk format flag \u201cpicoCTF{\u201d. Jika kita perhatikan, ada huruf-huruf yang hilang dari flag orisinil, yaitu setiap karakter di urutan genap. Jadi apabila digambarkan flag sesungguhnya akan berbentuk seperti di bawah ini:<\/span><\/p>\n<p style=\"text-align: justify\">\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">p*c*C*F*<\/span><span style=\"font-weight: 400\">1<\/span><span style=\"font-weight: 400\">*_*i*s*i*s*<\/span><span style=\"font-weight: 400\">3<\/span><span style=\"font-weight: 400\">*d*o*_*_*<\/span><span style=\"font-weight: 400\">1<\/span><span style=\"font-weight: 400\">*<\/span><span style=\"font-weight: 400\">1<\/span><span style=\"font-weight: 400\">*<\/span><span style=\"font-weight: 400\">0<\/span><span style=\"font-weight: 400\">*<\/span><span style=\"font-weight: 400\">7<\/span><span style=\"font-weight: 400\">*<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Bagaimana cara mendapatkan karakter-karakter yang hilang tersebut? Sebelumnya kita ketahui bahwa karakter hasil enkripsi tersusun dari karakter yang sudah di-<\/span><em><span style=\"font-weight: 400\">shift<\/span><\/em><span style=\"font-weight: 400\"> 8 kali dan dijumlahkan dengan nilai desimal karakter setelahnya. Sekarang coba kita bandingkan nilai desimal karakter-karakter hasil enkripsi dengan nilai desimal karakter <em>output<\/em> yang kita temukan, namun di-<em>shift<\/em> 8 ke kanan.\u00a0<\/span><\/p>\n<p style=\"text-align: justify\">\n<table>\n<tbody>\n<tr>\n<td><b><i>Decimal <\/i><\/b><b>Karakter Hasil Enkripsi<\/b><\/td>\n<td><b><i>Decimal 8 bit Shifted Output<\/i><\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">28777<\/span><\/td>\n<td><span style=\"font-weight: 400\">28672<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">25455<\/span><\/td>\n<td><span style=\"font-weight: 400\">25344<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">17236<\/span><\/td>\n<td><span style=\"font-weight: 400\">17152<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">18043<\/span><\/td>\n<td><span style=\"font-weight: 400\">17920<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">12598<\/span><\/td>\n<td><span style=\"font-weight: 400\">12544<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">24418<\/span><\/td>\n<td><span style=\"font-weight: 400\">24320<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">26996<\/span><\/td>\n<td><span style=\"font-weight: 400\">26880<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">29535<\/span><\/td>\n<td><span style=\"font-weight: 400\">29440<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">26990<\/span><\/td>\n<td><span style=\"font-weight: 400\">26880<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">29556<\/span><\/td>\n<td><span style=\"font-weight: 400\">29440<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">13108<\/span><\/td>\n<td><span style=\"font-weight: 400\">13056<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">25695<\/span><\/td>\n<td><span style=\"font-weight: 400\">25600<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">28518<\/span><\/td>\n<td><span style=\"font-weight: 400\">28416<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">24376<\/span><\/td>\n<td><span style=\"font-weight: 400\">24320<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">24421<\/span><\/td>\n<td><span style=\"font-weight: 400\">24320<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">12596<\/span><\/td>\n<td><span style=\"font-weight: 400\">12544<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">12641<\/span><\/td>\n<td><span style=\"font-weight: 400\">12544<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">12390<\/span><\/td>\n<td><span style=\"font-weight: 400\">12288<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">14205<\/span><\/td>\n<td><span style=\"font-weight: 400\">14080<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\"><b><br \/>\n<\/b><span style=\"font-weight: 400\">Jika dibandingkan, ada selisih antara hasil enkripsi dengan <\/span><em><span style=\"font-weight: 400\">shifted<\/span> <span style=\"font-weight: 400\">output<\/span><\/em><span style=\"font-weight: 400\">. Nilai selisih itu adalah nilai desimal dari karakter-karakter yang hilang. Mengapa? Karena pada proses enkripsi nilai yang ter-<\/span><em><span style=\"font-weight: 400\">shift<\/span><\/em><span style=\"font-weight: 400\"> dijumlahkan dengan angka-angka ini. Jadi, yang perlu kita lakukan adalah mengubah nilai selisih tersebut menjadi bentuk karakter.\u00a0 Contohnya, selisih nilai pada karakter pertama adalah 105 atau \u201ci\u201d dalam bentuk desimal. Artinya, karakter flag yang kedua adalah \u201ci\u201d.<\/span><\/p>\n<p style=\"text-align: justify\">\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Untuk mempermudah, bisa kita gunakan kode seperti ini:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">shifted2 = <\/span><span style=\"font-weight: 400\">&#8220;&#8221;<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><b>for<\/b><span style=\"font-weight: 400\"> j <\/span><b>in<\/b><span style=\"font-weight: 400\"> range(len(file)):<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 shifted2 += chr(ord(file[j])-(ord(shifted[j]) &lt;&lt; <\/span><span style=\"font-weight: 400\">8<\/span><span style=\"font-weight: 400\">))<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">print(shifted2)<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">\n<p style=\"text-align: justify\"><b>Output:<\/b><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">ioT{<\/span><span style=\"font-weight: 400\">6<\/span><span style=\"font-weight: 400\">bt_nt4_f8e4af}<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\"><span style=\"font-weight: 400\">Dikarenakan kita sudah mendapatkan setiap karakter urutan genap. Kita dapat menggabungkan output hasil ganjil dengan <em>output<\/em> hasil genap. Berikut script lengkap yang digunakan:\u00a0<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">file = open(<\/span><span style=\"font-weight: 400\">&#8220;enc&#8221;<\/span><span style=\"font-weight: 400\">, <\/span><span style=\"font-weight: 400\">&#8220;r&#8221;<\/span><span style=\"font-weight: 400\">).read()<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">shifted = <\/span><span style=\"font-weight: 400\">&#8220;&#8221; #<\/span><span style=\"font-weight: 400\">pcCF1_isis3do__1107<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><b>for<\/b><span style=\"font-weight: 400\"> i <\/span><b>in<\/b><span style=\"font-weight: 400\"> file:<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 shifted += chr(ord(i) &gt;&gt; <\/span><span style=\"font-weight: 400\">8<\/span><span style=\"font-weight: 400\">)<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">shifted2 = <\/span><span style=\"font-weight: 400\">&#8220;&#8221; #<\/span><span style=\"font-weight: 400\">ioT{<\/span><span style=\"font-weight: 400\">6<\/span><span style=\"font-weight: 400\">bt_nt4_f8e4af}<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><b>for<\/b><span style=\"font-weight: 400\"> j <\/span><b>in<\/b><span style=\"font-weight: 400\"> range(len(file)):<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 shifted2 += chr(ord(file[j])-(ord(shifted[j]) &lt;&lt; <\/span><span style=\"font-weight: 400\">8<\/span><span style=\"font-weight: 400\">))<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><b>for<\/b><span style=\"font-weight: 400\"> i <\/span><b>in<\/b><span style=\"font-weight: 400\"> range(len(shifted)):<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 print(shifted[i], end=<\/span><span style=\"font-weight: 400\">&#8220;&#8221;<\/span><span style=\"font-weight: 400\">)<\/span><span style=\"font-weight: 400\"><br \/>\n<\/span><span style=\"font-weight: 400\">\u00a0 \u00a0 print(shifted2[i], end=<\/span><span style=\"font-weight: 400\">&#8220;&#8221;<\/span><span style=\"font-weight: 400\">)<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">\n<p style=\"text-align: justify\"><b>Output<\/b><span style=\"font-weight: 400\">:<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><span style=\"font-weight: 400\">picoCTF{<\/span><span style=\"font-weight: 400\">16<\/span><span style=\"font-weight: 400\">_bits_inst34d_of_8_e141a0f7}<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">\n","protected":false},"excerpt":{"rendered":"<p>Pada artikel CTF kali ini, kami akan membahas mengenai PICOCTF 2021 yang bisa kalian akses soalnya di https:\/\/picoctf.org\/. Soal yang akan kami jelaskan adalah soal Reverse Engineering yang bernama Transformation dengan nilai 20 poin. Attached file content: enc : \u7069\u636f\u4354\u467b\u3136\u5f62\u6974\u735f\u696e\u7374\u3334\u645f\u6f66\u5f38\u5f65\u3134\u3161\u3066\u377d Analisa Soal Diberikan sebuah text yang nampaknya sudah terenkripsi menggunakan code python yang telah diberikan. [&hellip;]<\/p>\n","protected":false},"author":42,"featured_media":891,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[20,22,21],"class_list":["post-884","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-articles","tag-ctf","tag-ctf-writeup","tag-writeup"],"_links":{"self":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/comments?post=884"}],"version-history":[{"count":10,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/884\/revisions"}],"predecessor-version":[{"id":898,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/posts\/884\/revisions\/898"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/media\/891"}],"wp:attachment":[{"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/media?parent=884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/categories?post=884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/student-activity.binus.ac.id\/csc\/wp-json\/wp\/v2\/tags?post=884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}