jump to navigation

Teknik Cracking Sederhana pada Aplikasi Berbasis .NET 2 Maret 2008

Posted by firstyuyu in MSIL.
trackback

Artikel Prasyarat: Melihat MSIL

Sebagaimana telah dijelaskan pada artikel Melihat MSIL, keberadaan MSIL sebagai bahasa perantara juga mempunyai konsekwensi yaitu orang lain bisa men-disassembly program yang kita buat. Hal ini tentu membuka jalan bagi orang-orang iseng yang ingin mengutak-atik program yang kita buat. Disini akan coba kita pelajari teknik cracking yang paling sederhana yang bisa kita lakukan dengan merubah MSIL dari program yang ada.

Untuk keperluan ini kita akan membuat program console sederhana yang akan meminta user memasukkan username. Jika username yang dimasukkannya benar, maka ada ditampilkan tulisan SUKSES dan jika salah akan ditampilkan tulisan GAGAL. Buatlah program seperti berikut

Listing 01.

using System;
class Program
{
    static void Main(string[] args)
    {
        Console.Write(“Masukkan Username: “);
        string userName = Console.ReadLine();
        if (userName == “user1”)
            Console.WriteLine(“SUKSES”);
        else
            Console.WriteLine(“GAGAL”);
    }
}

Jalankan program ini. Jika kita memasukkan “user1” saat diminta, maka program akan menampilkan tulisan “SUKSES” dan jika kita memasukkan string selain itu maka program akan menampilkan tulisan “GAGAL”.

Buka file Program.exe dengan ildasm lalu dump menjadi Program.il sebagaimana dijelaskan pada artikel Melihat MSIL. Buka file Program.il menggunakan notepad. Perhatikan pada isi dari method Main seperti tampak pada listing 02. Pada listing 02 juga telah diberi komentar seperlunya untuk membantu memahami jalannya eksekusi. Sebuat komentar menjelaskan baris yang ada di bawahnya.

Listing 02.

    .entrypoint
    // Code size       61 (0x3d)
    .maxstack  2
    .locals init (string V_0,
             bool V_1)
 
// Load string
    IL_0001:  ldstr      “Masukkan Username: “
// Panggil method Console.Write dg parameter string
// yang telah di load di baris sebelumnya
    IL_0006:  call       void [mscorlib]System.Console::Write(string)
    IL_000b:  nop
// Panggil method Console.ReadLine
    IL_000c:  call       string [mscorlib]System.Console::ReadLine()
// Simpan nilai kembaliannya ke variabel ke-0
    IL_0011:  stloc.0
// Load isi variabel ke-0
    IL_0012:  ldloc.0
// Load string
    IL_0013:  ldstr      “user1”
// Bandingkan apakah isi variabel ke-0 sama dengan “user1”
    IL_0018:  call       bool [mscorlib]System.String::op_Equality(string,
                                                                   string)
// load integer 0
    IL_001d:  ldc.i4.0
// bandingkan apakah sama dengan nilai sebelumnya
// dari pemanggilan method String::op_Equality
// ingat, true = 1 dan false = 0
// Jika benar (nilai sebelumnya 0), maka user telah
// salah memasukkan username
    IL_001e:  ceq
// simpan hasil perbandingan pada variabel ke-1
// Ingat, kita membandingkannya dengan nilai 0.
// Artinya, jika variabel ke-1 bernilai true maka
// user telah salah memasukkan username
// dan jika variabel ke-1 bernilai false maka
// user telah memasukkan username dg benar.
    IL_0020:  stloc.1
// Load variabel ke-1
    IL_0021:  ldloc.1
// Jika variabel ke-1 bernilai true (user salah
// memasukkan username) maka lompat ke IL_0031
    IL_0022:  brtrue.s   IL_0031
// Jika variabel ke-1 bernilai false (user memasukkan
// username dg benar) maka load string “SUKSES”
    IL_0024:  ldstr      “SUKSES”
// Panggil method Console.WriteLine
    IL_0029:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_002e:  nop
// Lompat ke IL_003c
    IL_002f:  br.s       IL_003c
// Kode berikut hanya dieksekusi jika
// user salah memasukkan username (variabel
// ke-1 bernilai true
// Load string “GAGAL”
    IL_0031:  ldstr      “GAGAL”
// Panggil method Console.WriteLine
    IL_0036:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_003b:  nop
// Akhir dari method Main
    IL_003c:  ret


Ada banyak cara yang bisa kita lakukan untuk mengakali program di atas. Yang pasti adalah kita tidak ingin melompat ke IL_0031. Cara yang paling mudah ada kita ubah saja baris

    IL_0022:  brtrue.s   IL_0031

Agar dia tidak melompat ke IL_0031 tapi melompat ke baris di bawahnya yaitu IL_0024. Dengan demikian, apapun yang kita ketikkan, kita tidak akan pernah melompat ke IL_0031.

Ubahlah baris di atas menjadi seperti berikut (perhatikan, alamat molompatnya kita ubah dari IL_0031 menjadi IL_0024)

    IL_0022:  brtrue.s   IL_0024

lalu compile kembali Program.il dengan menggunakan ilasm. Lalu coba jalankan Program.exe yang telah kita modifikasi. Sekarang, apapun yang kita ketik, program selalu akan menampilkan tulisan “SUKSES”.

Iklan

Komentar»

1. petrus - 23 April 2008

gw gak ngerti

2. firstyuyu - 25 April 2008

gk ngerti gmn? bisa lebih jelas? Mungkin bisa kita diskusikan di sini

3. valason - 25 Februari 2012

Mau belajar dan menemukan potongan listing program visual basic dibawah. Bolehkan dijelaskan, apa artinya baris per baris. Terima kasih

Private Const _EXPDATE_PREFIX As String = “EXT”
Private Const _EXTENDCHARS As String = “GHIWXYZ”
Private Const _KEY1 As String = “Sx+6ed&U*!21~j4”
Private Const _KEY2 As String = “s1l8”
Private Const _KEY3 As String = “C:\aomd0.=.!;s?S_#SK#”
Private Const _KEY4 As String = ChrW(8) & ChrW(7) & ChrW(7) & “.” & ChrW(8) & ChrW(6) & “S.” & ChrW(4) & ChrW(6) & “P.” & ChrW(9) & ChrW(1) & ChrW(1)
Private Const _SN_GROUPSTR As String = “-”
Private Const _SN_LENGTH As Integer = 15
Private Const _X_LENGTH As Integer = 1
Private Const _Y_LENGTH As Integer = 1
Private Const _Z_LENGTH As Integer = 13

4. Alex Irfani - 16 Juli 2012

wahh…. keren.. hehe mantaph negh gan


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: