Belajar .NET Reverse Engineering (2)

Bismillah,

Assalamualaikum Warohmatullahiwabarakatuh.

OK genks, kali ini kita akan melanjutkan pembelajaran kita tentang reverse engineering menggunakan platform .NET. Sebelum lanjut membaca tutorial ini pastikan anda sudah membaca terlebih dahulu artikel sebelumnya Belajar .NET Reverse Engineering (1) karna ini adalah lanjutan dari artikel sebelumnya.

Pada artikel sebelumnya saya sudah share cara merubah suatu string dalam suatu aplikasi yang dibuat menggunakan platform .NET, nah sekarang kita akan lanjutkan ke teknik yang lebih pro lagi, kita akan coba merubah algoritma (flowchart) suatu program (aplikasi .NET).

Seperti biasa, supaya lebih komprehensif pertama saya akan membuat suatu aplikasi simple menggunakan visual studio 2019 community edition (ini free lho yah)

Nah disini saya buat aplikasi sederhana menggunakan winform (VB.NET) dengan satu button, satu buah textbox, dan satu label. Saat button diklik jika kita memasukan string 012345 pada textbox maka aKan tampil popup “SERIAL NUMBER BENAR” selain itu “SERIAL NUMBER SALAH”

Public Class Form1

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        If TextBox1.Text = "012345" Then
            MsgBox("SERIAL NUMBER BENAR")
        Else
            MsgBox("SERIAL NUMBER SALAH")
        End If
    End Sub
End Class

Jadi ceritanya kita akan rubah algoritma program diatas sehingga apapun yang dimasukan nilainya menjadi benar.

Kita akan masih menggunakan tool Justdecompile, buka aplikasinya lalu cari event click button

Lalu buka plugginnya (Disini kita masih menggukana plugin reflexil), pada pluggin tersebut kita akan menemukan banyak sekali instruction set yang digunakan

Nah sekarang kita coba analisa code reverse nya seperti apa, pada source code bisa kita lihat kode program berikut

        Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)
            If (Operators.CompareString(Me.TextBox1.Text, "012345", False) <> 0) Then
                Interaction.MsgBox("SERIAL NUMBER SALAH", MsgBoxStyle.OkOnly, Nothing)
            Else
                Interaction.MsgBox("SERIAL NUMBER BENAR", MsgBoxStyle.OkOnly, Nothing)
            End If
        End Sub

Ternyata compiler .NET menterjemahkan dibalik, dari sebelumnya :

If TextBox1.Text = "012345" Then

Menjadi

 If (Operators.CompareString(Me.TextBox1.Text, "012345", False) <> 0) Then

OK balik lagi ke konsep awal, tujuan awal kita tadi adalah merubah algoritma program sehingga apapun yang dimasukan bernilai benar, dengan kondisi seperti ini agar mudah kita ubah saja kondisi <> 0 (false) menjadi <>1 (true)

Sekarang buka lagi pluggin, kita coba lagi analisa satu persatu instruction set yang digunakan, Disini saya melihat ada satu opcode brfalse.s dengan value operand -> (19) nop ini artinya jika kondisi salah maka akan loncat ke no 19 yang berisi opcode nop (No Operation)

Sekarang kita coba cek ada apa di baris 19

Ternyata disinilah letaknya, setelah kita telusuri ternyata opcode brfalse.s pada line 11 adalah kondisi false yang merujuk ke bari 19 yang berisi instruction set yang dijalankan saat kondisi false (0).

Sekarang balik lagi ke baris ke 11, sekarang yang harus kita ubah adalah operand pada opcode tersebut. Sebelumnya adalah -> (19) nop kita ubah menjadi kebaris di bawahnya (baris 12)

Setelah itu klik update, dan save as file dengan nama yang berbeda disini saya beri nama WindowsApp1.Patched.exe

OK Sekarang coba jalankan aplikasinya

Ternyata sekarang apapun yang kita masukan bernilai benar walaupun kosong. Selamat anda berhasil melakukan Cracking pertama anda !!

Oh iya untuk mempelajari .NET reverse engineering baiknya anda mempelajari juga list opcode yang digunakan https://docs.microsoft.com/en-us/dotnet/api/system.reflection.emit.opcodes?view=netframework-4.8

karena proses reverse engineering pastinya melibatkan banyak instruction set yang pada tiap platform-nya mempunya opcode yang berbeda-beda

OK Demikian tutorial simple tentang .NET Reverse engineering, semoga bermanfaat. Wasalam

Leave a Reply

Your email address will not be published. Required fields are marked *