Greeting Form RESERVER : How I Crack Your Code With .NET by Satria Ady Pradana

Greeting Form RESERVER : How I Crack Your Code With .NET by Satria Ady Pradana - Pada kali ini BeHangat.Net akan menulis ulang tentang Greeting Form RESERVER : How I Crack Your Code With .NET yang di bahas di KULWAP oleh Satria Ady Pradana. Mengapa BeHangat menulis ulang? Karena isi materi sangat bagus dan sangat bermanfaat oleh karena itu behangat tulis ulang agar semakin banyak yang membacanya, dan semakin bermanfaat bagi kalian.

Nama , kalo cewek boleh memanggil mas ganteng. Kalo cowok boleh panggil satria aja.

Saat ini Satria Ady Pradana sebagai Cyber Security Consultant di Mitra Integrasi Informatika. dan atria Ady Pradana juga aktif di komunitas Commuunity Lead di Reversing.ID, komunitas yang membahas tentang reverse engineering untuk segala macam, mulai dari :
  1. Software
  2. Hardware
  3. Protocol
  4. dsb (Intinya yang berkaitan dengan sistem).

Sebagai seorang konsultan keamanan sistem, lebih sering melakukan kegiatan
  • penetrasion testing ke suatu sistem
  • mostly Web Application
  • Web Service
tapi kadang beberapa kali ada suatu kebutuhan untuk melakukan reverse engineering terhadap aplikasi client.

kalo disuruh menceritakan tentang apa yang sudah pernah dibuat, gak ada something yang gede (besar) yang bisa di tunjukan. karena saya (Satria Ady Pradana) tukang bongkar.

Kalo di suruh menyebutkan apa saja yang sudah dibongkar, gak bisa sebut spesifik karena NDA, tapi yang pasti beberapa ada
  1. Mobile App
  2. Desktop App
  3. Web App (terutama basis .Net)

So Greeting From Reverser.

Reverser adalah suatu pihak yang cukup di takuti oleh pengembang aplikasi komersial.
Pada sesi ini akan sedikit membahas tentang Reverse Engineering terhadap aplikasi .NET

  1. Apa itu reversing?
  2. Tool's apa yang diperluhkan?
  3. Apa yang dilakukan ketika reversing? dan Case yang pernah dihadapi
as said before, karena aku gak bikin sample code sebelumnya, jadi bikin secara live aja :D
Jadi, Apa itu Reverse Engineering? - secara sederhana Reverse Engineering (RE) adalah proses untuk mengekstrak informasi terutama desain cara kerja dari suatu sistem.
Orang-orang lebih mengenal CRACK dari pada RE, tapi sebenarnya RE tidak terbatas crack saja. RE lebih luas bahasanya.

Dan lagi-lagi, RE lebih banyak di kenal buat tindakan yang gak benar,seperti :

Nyolong dan Crack.
Padahal ada beberapa hal legitimate yang bisa dilakukan dengan RE. Salah dua yang paling utama adalah:
  1. Menjinakkan Malwer dan
  2. Mencari Celah Keamanan.
Di dunia Computer Science ada dua Representasi Program
  1. Native
  2. Interpreted
Aplikasi Native adalah aplikasi yang jalan langsung di atas OS maupun baremetal, menggunakan instruksi prosesor langsungtanpa adanya suatu layar tambahan.

Aplikasi Interpreted adalah aplikasi yang jalan di atas sebuah prosess VM alias membutuhkan suatu layar lagi.

contohnya aplikasi Interpreted bisa scripting seperti Python, Ruby, dsb.Ada lagi yang mengalami Compilation menjadi bytecode seperti Java.
Berbeda dengan keyakinan banyak orang, aplikasi .NEt adalah aplikasi yang Interpreted, seperti JAVA. Format dan ekstensi tidak membuat aplikasi .NET menjadi aplikasi Native.

Aplikasi .NET entah dibuat dari
  • C#
  • VB
  • dsb.
Pada akhirnya juga akan di compile menjadi sebuah bytecode yang disebut MSIL (MicroSoft Intermediate Languare Runtime) bagian dari .NET Framework.

Itulah kenapa jika tidak mengistall .NET Framework aplikasi .NET tidak akan bisa jalan.

Dan ini yang menarika, sebuah mantra yang perlu di ingat : most interpreted system dapat dikembalikan menjadi bentuk Source code-nya, mungkin mirip (beda variable) tapi tidak harus sama persis.

Ini keren bagi .NET dan JAVA membubuhkan sebagai metadata yang memberi tahu informasi-informasitentang kelas, hubungan antar kelas, serta hal-hal lain. ini memang dari sananya untuk mendukung yang namanya reflection.

Bagi saya (Satria Ady Pradana),reverser, mendapat aplikasi .Net itu menyenangkan, karena 99% developer ngak paham bahwa kode mereka bisa di TELANJANGI (Dilihat Bebas). Dengan kata lain kalo Developer .NET deliver aplikasi dia sebenarnya memberikan source code juga.
Baca Juga 
Nah.....
Aplikasi .NET ini range-nya cukup lebar. Untuk .NET lawas yang sudah mature (sebelum .NET Code), kita bisa membuat aplikasi desktop dalam bentuk .exe atau .dll maupun web application (pendekatan webform dkk).

Alternatif dari .NET Microsoft adalah mono, cross platfrom CLR yang dikembangkan berdasarkan spesifikasi yang sama dengan .NET Microsoft. Jika pernah memprogram dengan , dia menggunakan mono. Mono ada di :
  1. LINUX
  2. Windows
  3. Mac OS X
terakhir mono dibeli oleh Microsoft sehingga ke depannya baik mono dan .NET Microsoft akan dijadikan satu. Bisa dalam bentuk .NET Core dsb .IDK. Untuk Reverse .NET biasanya ada 2 tool's yang kupake (Satria Ady Pradana):
  1. Telerik JustDecompile
  2. dnSpy
Sebagai contoh file berikut

 /*
Simple C# program Skeleton.
Console.

Compile:
 $ csc skeleton.cs
Run:
 $ skeleton
*/

using System;

namespace LearnNetCode
{
 class Skeleton
 {
  static void Main(string[] args)
  {
   Console.WriteLine("Hello World");
   Console.Readkey();
  }
 }
} 
di compile dengan command berikut

(Visual C# 2017);

csc skeleton.cs

Kemudian dijalankan, maka akan menghasilkan seperti ini:

Greeting Form RESERVER : How I Crack Your Code With .NET by Satria Ady Pradana - Behangat.Net


Biasanya, ketika dihadapkan dengan sebuah file executeble maupun dll yang belum pernah kuketahui sebelumnya, langkah pertama dalam reversing adalah information gethering terlebih dahulu. Disebutkan bahwa aplikasi .NET memiliki metadata, dan juga punya signature yang membedakan antara .NET dengan aplikasi Netive. Untuk mengetahui hal ini, kita bisa menggunakan aplikasiKhusus. Yang menjadi favorit saya (Satria Ady Pradana) adalah DIE (Detect It Easy)

Greeting Form RESERVER : How I Crack Your Code With .NET by Satria Ady Pradana - Behangat.Net


Di sana terlihat jelas bahwa aplikasi ini adalah aplikasi kita tinggal menelanjangi kodenya. Kita gunakan Telerik JustDecompile, sebuah drag and drop apliasi .NET ke sana

Greeting Form RESERVER : How I Crack Your Code With .NET by Satria Ady Pradana - Behangat.Net


Itu adalah tampilan hasil decompilation dengan Telerik JustDecomple. Kita bandungkan dengan Source Code asli. Kita bisa dapatkan dengan persis, Lebih verbose sedikit, kode yang ita tulis dan YA, Informasi yang dibawa oleh metadata ini sampai ke level nama kelas beserta nama method.

Nah.......
Sebenarnya RE menitik beratkan kepada analis. Dan kemampuan yang paling Funfamental adalah kemampuan membaca. Syukurnya .NEt lebih mudah di baca :) jadi itu sedikit insight. Nah Sekarang kita ke hal yang lebih menantang.

Abis Itu Ngapain.....?

Pertanyaan ini memiliki banyak sekali variasi jawaban. Karena apa yang kita lakukan selanjutya, akan bergantung kepada apa tujuan kita sebenarnya.

Ada beberapa motivasi untuk melakukan Reverse Engineering (RE) Misalnya :
  • Mendapatkan cara kerja suatu proses.
    Misalnya Software buatan kompetitor bisa melakukan hal yang jauh dibanding dengan hal yang kita capai. Bagai Mana Caranya? Curi saja Kodenya.
  • Memecahkan Proteksi Yang Ada.
    supaya bisa kita pake dengan bebas (License Checking?, Serial Number? Crack Saja
  • Memodifikasi Software
    Budtuh fitur baru tapi pengembangnya sudah gulung tikar? entah bkin baru atau tambahkan model ke aplikasi itu.
    Jika kita melakukan modifikasi software dengan cara menambahkan kode di suatu tempat yang masih kosong kemudian kita bikin sebuah shortcut sedemikian hingga kita bisa memanggil modul kita sendiri.
Modivikasi pertama itu so obvious, yang menarik adalah modivikasi kedua dan ketiga. Banyak sekali aplikasi komersial menggunakan serial number untuk memproteksi penggunaan. Serial Number Invalid = ngak bisa install atau ngak bisa pake.

Apa Sebenarnya Serial Number?

Cuma sekedar deretan huruf yang akan di-feed ke sebuah atau beberapa fungsi pengecekan. hasil Akhirnya adalah Valid atau Invalid. Jadi Bagai mana aku (Satria Ady Pradana) mengakali sebuah pengecekan serial number.
So Far ada dua kategori besar
  1. Patch
  2. Keygenning
Patching artinya adalah mengubah satu bangian dari kode dengan hal yang kita inginkan.
to be short, tujuan kita adalah mengubah fungsi pengecekan untuk menghasilkan keputusan Valid untuk apapun serial yang kita berikan.

Terus, Bagai Mana Caranya?

Caranya adalah bisa dengan mengoverwrite keseluruhan fungsi, atau hanya mengoverwrite bagian Jump saja.

untuk overwrite ini kita harus bermain di level yang lebih rendah dibandingkan kode C# hasil decompilasi tadi. Kita mengubah bytecode alias CIL dari aplikasinya.


Pembahasan ini cukup panjang karena kita harus mengetahui dulu representasi CIL alias bahasa .NET kira-kira seperti inilah representasi dari CIL

Greeting Form RESERVER : How I Crack Your Code With .NET by Satria Ady Pradana - Behangat.Net


Itu adalah representasi CIL untuk fungsi Main yang menampilkan Hello World jika dibandingkan antara CIL dan Assembly, Bahasa CIL lebih mudah dipahami karena CIL sangat mirip dengan representasi tingkat tinggi di C#.

Patching nanti semudah mengubah opcode dari return False menjadi return True.
Contohnya (tapi tidak semua menggunakan satu pengecekan saja yang lebih penting adalah bisakah kita membuat Keygen dari serial itu?
bisa saja, caranya dengan entah mencomot algoritma itu untuk dibalikkan logic-nya, atau kita bikin suatu algoritma baru yang memecahkan algoritma penecekan.
Baca Juga 
Pengecekan sebuah Serial Number dapat kita anggap sebagai sebuah sistem persamaan yang besar, dari persamaan itu kita bisa mencari nilai-nilai yang cocok sehingga nilai itu dapat dianggap valid.
that's, kita bisa membuat sendiri algoritmanya, atau menggunakan sebuah alat baru bernama

Ada salah satu theorem prover yang menarik dan powerfull yang bernama yang di kembangkan oleh microsoft. Z3 digunakan untuk memecahkan sistem. Persamaan yang sangat besar dan kompleks dengan pendekatan constraint. Intinya, dikasih constraint, apakah ada sesuatu yang bisa memenuhi ini? Jika ada apa contohnya.

Contoh yang lebih sederhana ini:

 /*
Simple C# program Skeleton.
Console.

Compile:
    $ csc skeleton.cs
Run:
    $ skeleton
*/

using System;

namespace LearnNetCode
{
    class Skeleton
    {
        static bool check(string order, string serial)
        {
            if (serial.Length != 15)
                return false;

            if (order.Length != 6)
                return false;
            
            if (serial.Substring(0, 3) != "SAP")
                return false;

            if (Int32.Parse(serial.Substring(3, 4)) < Int32.Parse(serial.Substring(5,4)))
                return false;

            if (Int32.Parse(serial.Substring(7, 4)) != 1337)
                return false;

            if (Int32.Parse(order.Substring(2,4)) + 15 != Int32.Parse(serial.Substring(11,4)))
                return false;
            
            return true;
        }

        static void Main(string[] args)
        {
            Console.Write("Masukkan kode order: ");
            string order = Console.ReadLine();
            Console.Write("Masukkan serial: ");
            string serial = Console.ReadLine();

            if (check(order, serial))
            {
                Console.WriteLine("Serial diterima");
            } else {
                Console.WriteLine("Serial ditolak");
            }
        }
    }
} 

Ini adalah contoh pengecekan yang sangat sederhana,kita bisa membalikan logika pengecekan inidengan mudah. Tapi yang penting adalah esensinya, bahwa untuk membuat Keygen sebenarnya kita perlu tahu bagai mana cara key di generate dan dicocokan sehingga kita bisa membuat algoritmanya untuk membuat key-nya sendiri.

nah halangan ketika reverse engineering sebuah aplikasi pasti ada. Tapi biasanya hanya mereka yang sudah aware saja.
Untuk menghadapi aplikasi yang cukup besar, meskipun bisa kits decompile, teap membutuhkan waktu. Oleh karena itu kita perlu ke tujuan kita semula.

Apa Yang Harus Kita Capai?

Biasanya dalam Pentesting, ada beberapa hal yang ingin dilihat:
  1. Apakah ada hardcoded information.
    komponen connection string, misalnya Ato mungkin credentials.
  2. Apakah ada mekanisme rahasia ketika hendak berhubungan? Misal Kode ke port tertentu, kirimkan data, kemudian kirimkan data aslinya ke port lain.
  3. Bagai mana cara dia menghendle sesuatu?
    Oh ternyata dia tidak pake parameterized buat bikin SQl Query, bisa nih di SQL Injection.
  4. dsb.
Sebagai Contoh :

Ada seorang Developer yang menyatakan bahwa data di database telah terlindungi dengan baik, tidak akan ada yang bisa dapatkan data itu. Ternyata dia membuat suatu algoritma enkripsi sendiri dengan kunci yang di-hardcoded. Easy.
lalu bagai mana cara melindungi dari reverse engineering?
Not So Much. Pada akhirnya Reverse Engineering (RE) akan menang, cuma menunggu waktu saja. Yang bisa dilakukan adalah mempersulit dan menghambat kerja reverser. Caranya adalah dengan melakukan

Obfuscation adalah seni menggambarkan kode dengan tetap membiarkan kode akhir secara semantik melakukan hal yang sama seperti sebelum di obfuscated. Karena .NET sangat baik dengan memberitahu metadatanya, yang kita lakukan adalah mengubah penamaan kelas atau method di metadata itu sehingga menjadi sesuatu yang tampak random.
Misal kelas FormAbout menjadi aAbcd
Obfuscation ini dilakukan di fase akhir, bukan di source code. Salah satu tool untuk obfuscation di .NET adalah
Tapi Ya........
Dengan waktu dan motivasi yang cukup pada akhirnya Reverser akan tetap menang :)

Sebenarnya ada banyak sekali hal yang ingin dibahas, tapi kita sudahi pembahasan sampai di sini dulu.

Kita sudah membahas properti utama dari .NET yaitu :
  • Interpreted language
  • Mencantumkan Metadata
  • Bisa di-decompile
RE itu luas. Dalam RE kita bisa :
  • Mengekstrak informasi dari program (curi kode)
  • Memecahkan proteksi
  • Memodifikasi program
Karena bisa di-decompile dengan mudah, maka lakukan obfuscation untuk menghemat kerja reverser.

sekian, dan kalo ada program silahkan kasih ke saya (Satria Ady Pradana) untuk saya bongkar =D

Demikianlah artikel tentang Greeting Form RESERVER : How I Crack Your Code With .NET by Satria Ady Pradana yang dapat BeHangat berikan. Jika kalian masih ada yang kurang dimengerti silahkan bertanya di kolom komentar yang sudah tersedia dibawah artikel ini, kita diskusi bareng agar saling mengerti dan jangan lupa untuk Share artikel ini agar semakin banyak orang-orang yang mengetahui dan membaca karena dengan membaca kita jadi tambah tahu.

Jika ada kesalahan kata Behangat.Net minta maaf, dan semoga artikel ini berguna, bermanfaat. Terimakasih sudah membaca dan sudah mampir di BeHangat.net sampai jumpa di pertemuan berikutnya.

Sumber :
  • PHP ID CHAPTER JAKARTA
  • 08977423935 (Satria Ady Pradana)

Jika Kamu Punya Artikel, Puisi, Sesuatu Yang Ingin Kamu Upload, Maka Kamu Bisa Kirim Ke Alamat Email Di Bawah Ini:
Email : puisibehangat@gmail.com
Sertakan Judul Beserta Foto/Gambar

Reaksi:

You Might Also Like:

Use parse tool to easy get the text style on disqus comments:
Show Parser Hide Parser