RNDC [RNDC] Reverse Engineering Web Cruiser Enterprise Edition

Discussion in 'N3 Source Codes dan Tutorials' started by dono, Dec 29, 2012.

Discuss [RNDC] Reverse Engineering Web Cruiser Enterprise Edition in the N3 Source Codes dan Tutorials area at Nyit-Nyit.Net

  1. dono 3 SMP STAFF N3 Tukang Sapu

    Messages:
    2,403
    Likes Received:
    2,573
    Trophy Points:
    141
    Game:
    Dota 2
    Region:
    Australia
    -----[ Pendahuluan

    Beberapa waktu lalu, saya sempat berdiskusi dengan seorang rekan membahas log
    yang dipenuhi dengan string yang cukup mencurigakan. Stringnya kurang lebih
    seperti ini: "!S!WCRTESTINPUT000001!E!" (tanpa tanda kutip). Karena penasaran,
    akhirnya saya melakukan googling untuk mencari kira-kira aplikasi apa yang di-
    gunakan oleh attacker tersebut dan ternyata banyak yang mengalami hal yang sama
    hingga akhirnya muncul titik terang dari sebuah forum di Russia[1]. Pada forum
    tersebut terdapat petunjuk output dari aplikasi yang digunakan oleh attacker:

    Code:
      <!--Created By WebCruiser - Web Vulnerability Scanner [url="http://sec4app.com"]http://sec4app.com[/url] -->
    Nah, setelah membuka situs pembuat aplikasi yang dimaksud yaitu aplikasi Web
    Cruiser[2], ternyata tersedia link untuk mengunduh aplikasinya dan saya pun me-
    milih untuk mengunduh aplikasi versi enterprise.



    -----[ Langkah-langkah

    * Setelah aplikasinya selesai diunduh, selanjutnya tinggal diekstrak dan tidak
    perlu di-install.

    * Untuk mengecek apakah executablenya diproteksi dengan packer/cryptor atau se-
    jenisnya, saya menggunakan protectionID[3]. Hasilnya adalah sebagai berikut:


    Code:
    -=[ ProtectionID v0.6.4.0 JULY]=-
    (c) 2003-2010 CDKiLLER & TippeX
    Build 07/08/10-17:57:05
    Ready...
    Scanning -> C:\Users\ids\WebCruiser\WebCruiserWVS.exe
    File Type : 32-Bit Exe (Subsystem : Win GUI / 2), Size : 415744 (065800h) Byte(s)
    [File Heuristics] -> Flag : 00000000000001001101000000110000 (0x0004D030)
    [CompilerDetect] -> .NET
    [!] File appears to have no protection or is using an unknown protection
    - Scan Took : 0.875 Second(s)

    * Dari informasi di atas bisa diketahui bahwa aplikasinya dibuat dengan meng-
    gunakan .Net dan tidak terdeteksi adanya packer yang berarti kita tidak perlu
    melakukan unpacking.

    * Selanjutnya, karena aplikasi tersebut dibuat menggunakan .Net, maka kita
    dapat menggunakan .Net Reflector[4] untuk melakukan disassembling dan kali
    ini tujuan kita adalah untuk mempelajari mekanisme registrasi aplikasi Web
    Cruiser tersebut.


    Author: https://www.facebook.com/id.slacker @ RNDC
    Group FB: https://www.facebook...ups/rndc.or.id/

    * Berikut ini adalah penjelasan dari fungsi-fungsi yang berkaitan dengan proses
    registrasi. Pertama adalah fungsi yang dipanggil ketika tombol "Register" di-
    tekan. Berikut ini adalah listing fungsinya:

    Code:
    1 private void btnReg_Click(object sender, EventArgs e)
    2 {
    3 string str = this.txtRegUsername.Text.Trim();
    4 if (string.IsNullOrEmpty(str) || (str.Length < 2))
    5 {
    6 MessageBox.Show("Username should has at least 2 letters!");
    7 }
    8 else
    9 {
    10 string text = this.txtRegCode.Text;
    11 if (string.IsNullOrEmpty(text))
    12 {
    13 MessageBox.Show("RegCode can not be null!");
    14 }
    15 else if (Reg.ValidateRegCode(str, text) || Reg.ValidateRegCode2(str, text))
    16 {
    17 RegistryKey key = Registry.CurrentUser.CreateSubKey(@"Software\Sec4App\WebCruiser");
    18 key.SetValue("Username", str);
    19 key.SetValue("RegCode", text);
    20 string str3 = Reg.Encrypt(DateTime.Now.ToString("yyyy-MM-dd"));
    21 key.SetValue("InitDate", str3);
    22 this.lblRegInfo.Text = "This copy of WebCruiser is licensed to: " + str;
    23 MessageBox.Show("Thank You For Registration!", "Registration OK!");
    24 this.lblRegUsername.Visible = false;
    25 this.lblRegCode.Visible = false;
    26 this.txtRegUsername.Visible = false;
    27 this.txtRegCode.Visible = false;
    28 this.btnReg.Visible = false;
    29 this.linkLblBuy.Visible = false;
    30 this.linkPaypal.Visible = false;
    31 Reg.A1K3 = true;
    32 Reg.RegUser = str;
    33 }
    34 else
    35 {
    36 MessageBox.Show("Invalid RegCode !");
    37 }
    38 }
    39 }
    * Penjelasan singkat untuk baris-baris yang penting pada snippet kode di atas
    adalah sebagai berikut:

    ** Pada baris ke-4 dilakukan pengecekan terhadap nama,dimana nama tidak boleh
    kosong dan ukurannya minimal 2 huruf.

    ** Selanjutnya pada baris ke-11 dilakukan pengecekan apakah user memasukkan
    serial atau masih kosong. Jika masih kosong, maka akan muncul pesan error.

    ** Pengecekan serial dilakukan pada baris ke-15, dimana ada 2 fungsi yang
    bertugas untuk melakukan pengecekan, dan cukup salah satunya saja yang
    valid. Fungsi tersebut adalah "ValidateRegCode" dan "ValidateRegCode2"
    dimana parameternya sama yaitu username dan serial.

    * Berikut ini potongan dari fungsi "ValidateRegCode" yaitu salah satu fungsi
    yang mengecek apakah serial yang dimasukkan user valid.

    Code:
    1 public static bool ValidateRegCode(string Username, string RegCode)
    2 {
    3 try
    4 {
    5 if (RegCode.Length == 0x13)
    6 {
    7 char[] chArray = RegCode.ToCharArray();
    8 if (chArray[4] != '-')
    9 {
    10 return false;
    11 }
    12 if (chArray[9] != '-')
    13 {
    14 return false;
    15 }
    16 if (chArray[14] != '-')
    17 {
    18 return false;
    19 }
    20 RegCode = RegCode.Replace("-", "");
    21 ulong num = Hash2UInt64(RegCode);
    22 ulong num2 = Hash2UInt64(GetHash(Username));
    23 ulong num3 = num - num2;
    24 if (GetHash(num3.ToString()).Equals("1FEDF23C6CB786AA"))
    25 {
    26 _RegOK = true;
    27 RegUser = Username;
    28 return true;
    29 }
    30 }
    31 return false;
    32 }
    33 catch (Exception exception)
    34 {
    35 MessageBox.Show(exception.Message);
    36 return false;
    37 }
    38 }
    * Penjelasan untuk beberapa baris penting dari snippet kode di atas adalah sbb:

    ** Baris ke-5 mengecek apakah panjang serial berjumlah 19 karakter (0x13 hex)
    Jika tidak maka proses registrasi gagal.

    ** Baris ke-7 akan mengubah serial menjadi array dengan tipe karakter.

    ** Baris ke-8 akan mengecek apakah karakter ke-5 dari serial adalah karakter
    "-" (tanpa tanda kutip). Demikian pula dengan baris ke-12 dan 16 mengecek
    karakter ke 10 dan 15 dari serial. Jadi kesimpulan sementara, format se-
    rial adalah "AAAA-BBBB-CCCC-DDDD".

    ** Baris ke-20 akan menghilangkan semua karakter "-" sehingga format serial
    menjadi "AAAABBBBCCCCDDDD".

    ** Baris ke-21 akan mengubah serial dari format hexadesimal menjadi unsigned
    long dan disimpan pada variabel "num". Untuk lebih jelasnya, akan dibahas
    mengenai fungsi "Hash2UInt64" pada bagian lain tutorial ini.

    ** Baris ke-22 akan menghitung hash dari username menggunakan SHA512, dan
    akan mengambil 1 karakter dari tiap kelipatan 8 dari string hasil hash
    lalu diubah menjadi unsigned long dan hasilnya disimpan pada variabel
    "num2". Untuk fungsi "GetHash", akan dibahas pada bagian selanjutnya.

    ** Baris ke-23 akan menghitung pengurangan dari hasil konversi serial di
    kurangi hasil konversi nama, lalu hasilnya disimpan pada variabel "num3"

    ** Baris ke-24 akan menghitung hash dari hasil pengurangan tersebut lalu
    menguji apakah hashnya sama dengan "1FEDF23C6CB786AA". Jadi secara se-
    derhana, fungsinya seperti ini dimana setiap simbol adalah angka dan
    nilai x selalu tetap.

    x = n_serial - n_username

    jadi untuk mengetahui serial, formulanya akan menjadi seperti ini:

    n_serial = x + n_username

    ** Formula di atas terlihat sederhana, namun pada prakteknya cukup memakan
    waktu, karena untuk menemukan nilai "x", kita perlu melakukan bruteforce
    untuk mengecek nilai hash SHA512 dari "x" tersebut dan menggunakan fungsi
    "GetHash" untuk mencocokkan nilanya dengan "1FEDF23C6CB786AA".

    ** Untuk itu, kita bisa membuat script python sederhana untuk melakukan brute
    force. Listing scriptnya seperti ini:

    Code:
    1 #!/bin/env python
    2 import hashlib
    3
    4 n = 0
    5
    6 while True:
    7 print "[*] Trying: %i \r" % n,
    8 h = hashlib.sha512(str(n)).hexdigest()
    9 x = "".join([h[i] for i in range(0x80) if ((i % 8) == 0)])
    10 if x == "1fedf23c6cb786aa":
    11 print "\n[+] Found : %i" % n
    12 break
    13 n += 1
    ** Jika dijalankan dalam waktu yang cukup lama, maka hasilnya adalah sebagai
    berikut:

    Code:
    $ ./chk-sha512.py
    [*] Trying: 9196707196805196908
    [+] Found : 9196707196805196908
    ** Jadi nilai "x" yang kita cari adalah "9196707196805196908".

    ** Karena sudah mengetahui nilai "x", maka kita dapat membuat key generator
    yang akan dibahas pada bagian key generator pada tutorial ini. Selanjutnya
    kita akan melihat skema registrasi ke-2.

    * Berikut ini adalah skema registrasi lain yang dapat digunakan untuk melakukan
    registrasi Web Cruiser Enterprise yaitu fungsi "ValidateRegCode2"

    Code:
    1 public static bool ValidateRegCode2(string Username, string RegCode)
    2 {
    3 try
    4 {
    5 if (RegCode.IndexOf('-') > 0)
    6 {
    7 string[] strArray = RegCode.Split(new char[] { '-' });
    8 if (strArray.Length != 2)
    9 {
    10 return false;
    11 }
    12 string str = strArray[0];
    13 string s = strArray[1];
    14 uint num = String2UInt32(str);
    15 uint num3 = uint.Parse(s) - num;
    16 if (GetMD5Hash(num3.ToString()).Equals("B1B77A53F0264B1D"))
    17 {
    18 _RegOK = true;
    19 RegUser = Username;
    20 return true;
    21 }
    22 }
    23 return false;
    24 }
    25 catch (Exception exception)
    26 {
    27 MessageBox.Show(exception.Message);
    28 return false;
    29 }
    30 }
    * Penjelasan untuk baris-baris penting dari kode di atas adalah sebagai berikut

    ** Baris ke-5 mengecek apakah serial yang dimasukkan memiliki tanda "-". Jika
    tidak, maka serial yang dimasukkan invalid.

    ** Baris ke-7 akan memisahkan serial dengan tanda pemisah "-" dan menyimpan
    hasilnya ke dalam array variabel "strArray".

    ** Baris ke-8 mengecek apakah jumlah arraynya adalah 2. Jika tidak, berarti
    serial yang dimasukkan invalid. Jadi format serialnya kurang lebih seperti
    ini: AAAA-BBBB

    ** Baris ke-12 fungsinya menyimpan komponen pertama dari array serial ke
    dalam variabel "str" dengan tipe string.

    ** Baris ke-13 fungsinya menyimpan komponen kedua dari array serial ke dalam
    variabel "s" yang tipenya adalah string.

    ** Baris ke-14 mengubah komponen pertama serial dari string menjadi hash md5
    dan hanya mengambil 16 karakter terakhir, lalu dilakukan operasi modulus
    0xf4240 (1000000) dan hasilnya disimpan ke dalam variabel "num".

    ** Baris ke-15 menghitung pengurangan komponen ke-2 serial dikurangi komponen
    pertama dan hasilnya di simpan pada variabel "num3".

    ** Baris ke-16 menghitung hash md5 dari hasil pengurangan di langkah sebelum-
    nya dan membandingkan 16 karakter terakhir dengan "B1B77A53F0264B1D", jika
    benar, maka proses registrasi berhasil. Jadi secara sederhana, formulanya
    kurang lebih seperti ini kalau dalam bahasa php:

    Code:
     b1b77a53f0264b1d = substr(md5($s[1] - (hexdec(substr(md5($s[0]), -16)) % 0xf4240)), -16)
    atau jika menggunakan python:

    Code:
     hashlib.md5(str(10 - (int(hashlib.md5(str(1)).hexdigest()[-16:], 16) % 0xf4240))).hexdigest()[-16:]
    ** Selebihnya tinggal mencari variabel $s[0] dan $s[1] dan itu akan sangat
    memakan waktu. Jadi silakan jika Anda ingin mencobanya. Berikut ini contoh
    script yang bisa digunakan untuk melakukan bruteforce, dimana bilangan pe-
    ngurang diset statis dengan nilai 1 dan yang dicari adalah bilangan ke-2:

    Code:
    #!/bin/env python
    import hashlib
    
    n = 1
    
    while True:
    r = hashlib.md5(str(n - (int(hashlib.md5("1").hexdigest()[-16:], 16) % 0xf4240))).hexdigest()[-16:]
    print "[*] Trying: %i - %s\r" % (n, r),
    if r == "b1b77a53f0264b1d":
    print "\n[+] Found : %i\n" % n
    break
    n += 1
    * Selanjutnya akan kita lihat fungsi-fungsi pendukung dari verifikasi serial
    di atas.

    ** Fungsi "GetHash" untuk menghitung hash sha512 dari string yang menjadi
    parameternya. Setelah itu, hanya akan mengambil satu karakter tiap ke-
    lipatan 8 dari panjang hash.

    Code:
    1 private static string GetHash(string Source)
    2 {
    3 byte[] bytes = Encoding.UTF8.GetBytes(Source);
    4 SHA512 sha = new SHA512Managed();
    5 char[] chArray = BitConverter.ToString(sha.ComputeHash(bytes)).Replace("-", "").ToCharArray();
    6 StringBuilder builder = new StringBuilder();
    7 for (int i = 0; i < 0x80; i++)
    8 {
    9 if ((i % 8) == 0)
    10 {
    11 builder.Append(chArray[i].ToString());
    12 }
    13 }
    14 return builder.ToString();
    15 }
    ** Fungsi "GetMD5Hash" menggunakan 1 parameter berupa string yang akan di-
    hitung hashnya, dan hanya mengambil 16 karakter terakhir dari hash yang
    dihasilkan.

    Code:
    1 private static string GetMD5Hash(string Source)
    2 {
    3 byte[] bytes = Encoding.UTF8.GetBytes(Source);
    4 MD5 md = new MD5CryptoServiceProvider();
    5 return BitConverter.ToString(md.ComputeHash(bytes)).Replace("-", "").Substring(8, 0x10);
    6 }
    ** Fungsi "Hash2UInt64" akan menggunakan 1 parameter bertipe string dan meng-
    ubahnya dari format hexadesimal menjadi unsigned long dengan ukuran 64 bit

    Code:
    1 private static ulong Hash2UInt64(string Str)
    2 {
    3 try
    4 {
    5 return ulong.Parse(Str, NumberStyles.HexNumber);
    6 }
    7 catch
    8 {
    9 return 0L;
    10 }
    11 }
    ** Fungsi "String2UInt32" menggunakan 1 parameter bertipe string. Menghitung
    hash md5nya dan hanya mengambil 16 karakter dari hash tersebut, lalu di-
    ubah menjadi bilangan bertipe unsigned long lalu dioperasikan menggunakan
    operator modulus terhadap bilangan 0xf4240 (1000000).

    Code:
    1 private static uint String2UInt32(string Str)
    2 {
    3 try
    4 {
    5 return (uint) (ulong.Parse(GetMD5Hash(Str), NumberStyles.HexNumber) % ((ulong) 0xf4240L));
    6 }
    7 catch
    8 {
    9 return 0;
    10 }
    11 }


    -----[ Key Generator

    Berikut ini adalah key generator yang dapat digunakan untuk melakukan registra-
    si aplikasi Web Cruiser Enterprise. Key generator ini berupa script python, dan
    untuk tipe executable bisa menggunakan buatan team mesmerize[5].

    Code:
    1 #!/bin/env python
    2 import hashlib
    3
    4 u = raw_input("User: ")
    5 h = hashlib.sha512(u).hexdigest()
    6 x = "".join([h[i] for i in range(0x80) if ((i % 8) == 0)])
    7 s = str(hex(9196707196805196908 + int(x, 16))).upper().lstrip('0X').rstrip('L')[-16:]
    8 print "Code: %s-%s-%s-%s" % (s[0:4], s[4:8], s[8:12], s[12:16])
    
    Dan cara menggunakannya seperti ini:

    Code:
    $ ./wckg.py
    User: id.slacker
    Code: 70A5-56EF-69A0-FA16


    -----[ Penutup

    Selain membuat key generator, juga bisa ditempuh cara lain yaitu dengan melaku-
    kan hard patching karena konstanta "B1B77A53F0264B1D" dan "1FEDF23C6CB786AA"
    sifatnya statis pada executablenya, namun perlu diingat bahwa string tersebut
    menggunakan unicode. Kedua string tersebut bisa ditemukan pada offset 0x5e1fa
    dan 0x5e21c. Sekian tutorial kali ini, semoga bermanfaat. Terima kasih kepada
    Tuhan Yang Maha Esa, maxindo, RNDC, nyit-nyit, 1st (you guys rocks), dan Anda.



    -----[ Referensi

    Code:
    [1] форума Xakep.ru
    http://forum.xakep.ru/m_2668577/printable.htm
    
    [2] WebCruiser - Web Vulnerability Scanner for Windows V2.6.1
    http://sec4app.com/WebCruiser-Web-Vulnerability-Scanner.htm
    
    [3] PROTECTiON iD v6.4.0
    http://pid.gamecopyworld.com/
    
    [4] .Net Reflector
    http://www.reflector.net/
    
    [5] Team Mesmerize
    http://bit.ly/VJlT0z
    Author: https://www.facebook.com/id.slacker @ RNDC
    Group FB: https://www.facebook...ups/rndc.or.id/
     

    Attached Files:

    1 person likes this.

    Gunakan jasa Rekber N3 untuk menjamin jual beli anda atau menghindari penipuan dengan meng klik disini
  2. spades666 Pra TK Level 1

    Messages:
    13
    Likes Received:
    0
    Trophy Points:
    26
    download softice dmn gan ?
     
  3. andhykrnz Pra TK Level 1

    Messages:
    14
    Likes Received:
    0
    Trophy Points:
    1
    pake ollydbg aja gan.. softice mah dah jarang yng make
     

Share This Page