Anda di halaman 1dari 22

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER


UNIVERSITAS BRAWIJAYA

BAB : REVERSE ENGINEERING


NAMA : EURICO KRISNA WIJAYA
NIM : 195150207111053
TANGGAL : 21/09/2021
ASISTEN : MUHAMMAD FIKRI ASHARI

Python RE
1. Pastikan python telah terinstall di perangkat yang digunakan

python3 --version

2. Buka file dengan nama crackme_00.py (file akan langsung terbuat), lalu
copy-paste kode berikut:

#!/bin/usr/python3
user = "admin"
password = "In1_pa55w0rD"
verify_user= input("Masukkan user : ")
verify_pass= input("Masukkan password : ")
if(user == verify_user and password == verify_pass):
print("Congratulations")
else:
print("Try Harder")

3. Buka file dengan nama crackme_01.py (file akan langsung terbuat), lalu
copy-paste kode berikut:

#!/usr/bin/python3

user_arr = [97, 100, 109, 111, 111, 110]


pass_arr = [73, 110, 49, 95, 112, 97, 53, 53, 119, 48,
114, 68, 95, 107, 101, 95, 50]

verify_user = input("Masukkan user : ")


verify_pass = input("Masukkan password : ")

if (len(verify_user) != len(user_arr) and len(pass_arr)


!= len(verify_pass)):
print("try harder")
exit()

for i in range(len(verify_user)):
if (user_arr[i] != ord(verify_user[i])):
print("try harder")
exit()

for i in range(len(verify_pass)):
if (pass_arr[i] != ord(verify_pass[i])):
print("try harder")
exit()

print("congratulations!")

4. Jalankan command berikut pada direktori terkait:

python -m compileall .
Tampilan pada saat dijalankan python -m compileall ..

5. Jalankan command strings di terminal pada kedua file pyc tersebut

strings crackme_00.pyc
strings crackme_01.pyc

6. Apa yang kamu lihat pada output command tersebut? Apa saja yang
hadir di file .py dan menghilang pada file .pyc?
Tampilan output pada strings crackme_00.pyc.

Tampilan output pada strings crackme_01.pyc.


Dapat dilihat pada tampilan output jika dilihat terdapat Masukkan user,
Masukkan password, try harders, congratulation dan sebagai macam
lainnya, hal tersebut merupakan step dalam membuka crackme_00.pyc
ataupun crackme_01.pyc dan tampilan jika gagal untuk masuk maka
akan keluar tampilan try harders, jika berhasil maka akan keluar
congratulation dan jika ingin mengubah data maka terdapat step lagi
untuk mengubahnya.

7. Perhatikan perbedaan teknik license/password pada crackme_00.py dan


crackme_01.py serta hasil compile yang kita analisis dengan command
strings . Jelaskan pendapatmu!

Terdapat perbedaan dalam teknik license/password pada


crackme)oo.py dan crackme_01.py, perbedaannya adalah pada
crackme_00.py membutuhkan untuk memasukkan username dan
password yang telah tersedia sebelumnya dan jika gagal maka tidak
dapat mengaksesnya, berbeda dengan crackme_01.py yaitu terdapat
ser_arrt dan pass_arrt yang benar baru dapat mengakses
crackme_01.py.

8. Download file .pyc dengan command terminal berikut:

wget
https://github.com/isfahany/infosec-module-downloadable-f
ile/raw/master/RE/crackme03.pyc

9. Jalankan uncompyle6 (pastikan telah terdownload) dan crack-lah license


key file python tersebut.
Tampilan pada saat menjalankan uncompyle6.

Tampilan pada saat mendapatkan salah satu password serial key.

Android & Java RE


1. Download apk android berikut:

wget
https://github.com/isfahany/infosec-module-downloadable-f
ile/raw/master/RE/crackme_04.apk
2. Pastikan apktool dan dex2jar telah terinstall
3. Jalankan command apktool pada .apk tersebut dengan parameter berikut:

apktool d android_app.apk

4. Screenshot dan jelaskan secara singkat direktori yang ada di hasil


decompile dengan apktool tersebut:

Tampilan setelah dijalankannya apktool d android_app.apk.


Terdapat direktori yang telah terinstall dan di dalam direktori tersebut
terdapat file yang memiliki hubungan dengan android.

5. Masuklah ke direktori di bawah ini dengan menggunakan command cd di


terminal:

cd smali_classes2/com/akhir/myapplication

6. Screenshot isi dari file MainActivity.smali, Login.smali, dan Register.smali


serta berikan pendapatmu mengenai isi dari file tersebut
Tampilan pada file MainActivity.smali.
Tampilan pada Login.smali.
Tampilan pada Register.smali.
Pada tampilan output, berbeda pada saat menggunakan IDE yang
menampilkan source code secara langsung dan tidak dipisah-pisah,
pada saat menggunakan vim menampilkan class public, instance fields,
dan direct methods, selain itu ditampilkan juga isi dari masing-masing,
seperti contoh field menampilkan semua field yang ada pada hasil
output.

7. Sekarang kita akan membongkar file .apk kembali dengan pendekatan


yang berbeda. Kembalilah ke direktori dimana file .apk berada dan
lakukan command berikut:

file android_app.apk
unzip android_app.apk -d android_app
cd android_app
ls

Tampilan pada command file.

Tampilan pada ls.


Pada saat dijalankan, menampilkan sebuah informasi bahwa file
crackme04 merupakan zip dan diberitahukan bahwa diperlukan v2.0
agar dapat melakukan ekstrak, kemudian pada ls menampilkan file
yang tersedia pada crackme04 dan file tersebut memiliki hubungan
dengan android melihat terdapat AndroidManifest.xml.

8. Jalankan command berikut:

d2j-dex2jar classes2.dex
file classes2-dex2jar.jar

Tampilan pada saat menjalankan file classes2-dex2jar.jar.


Pada saat dijalankan, menampilkan sebuah informasi bahwa file
classes2-dex2jar.jar merupakan zip dan diberitahukan bahwa
diperlukan v1.0 agar dapat melakukan ekstrak.

9. Jalankan command berikut:

unzip classes2-dex2jar.jar
cd ./com/akhir/myapplication

10. Jalankan command jd-gui dan bukalah file Login.class , Register.class ,


dan MainActivity.class

jd-gui

Tampilan pada Login.class.

Tampilan pada Register.class.


Tampilan pada MainActivity.class.

11. Jelaskan perbedaan antara dekompilasi java dengan output .java dan
menjadi .smali

Perbedaan dekompilasi java yang ada antara ouput.java dan menjadi


.smali adalah jika menggunakan output.java dilakukan menggunakan
IDE dan terdapat source code sedangkan pada .smali tidak
memerlukan IDE dan sudah bisa dijalankan pada terminal dan terdapat
tampilan instance fields dan direct methods yang terdapat di sana.

C/C++ RE
1. Pastikan gcc telah terinstall pada perangkat anda.
2. Buka file dengan nama crackme_05.c (file akan langsung terbuat), lalu
copy-paste kode berikut:

#include <stdio.h>
#include <string.h>

int serial[] = {241, 233, 242, 174, 238, 246, 241, 247,
200};
char sereal[10];

void decode_serial(){
for(int i = 0; i < 9; i++){
sereal[i] = serial[i] ^ 0x87;
}
}

void decode2(){
int a = 0;
int b = 1;
int c = 1;
for(int i = 0; i < 9; i++){
serial[i] -= c;
c = a + b;
a = b;
b = c;
}
}

int main(int argc,char *argv[]){


if (argc<2) {
printf("Usage: ./crackme_05 <password>\n");
return 0;
}
decode2();
decode_serial();

printf("%s", sereal);
if (strcmp(argv[1], sereal)==0) {
printf("CORRECT!!!\n");
} else {
printf("TRY HARDER!!!\n");
}
}

3. Jalankan command berikut untuk meng-compile file c yang kita miliki:

gcc -o crackme_05_non_stripped crackme_05.c


gcc -o crackme_05_stripped crackme_05.c

4. Jalankan command berikut untuk strip file crackme_05_stripped:

strip crackme_05_stripped

5. Jalankan command berikut untuk melihat perbedaan perlindungan dan


hasil analisis reversing:

gdb -q crackme_05_non_stripped
gdb -q crackme_05_stripped

Lakukan langkah sesuai dengan gambar berikut untuk gambar non


stripped (untuk stripped cukup sampai gambar pertama didalam gdb saja:
Tampilan info function pada gdb -q crackme_05_non_stripped.

Tampilan disass main pada gdb -q crackme_05_non_stripped.


Tampilan info function pada gdb -q crackme_05_stripped.

Tampilan disassemble gdb -q crackme_05_stripped.

6. Bukalah ghidra (boleh ida pro) dan analisislah kedua file crackme_05
yang telah kita buat baik dari segi perbedaan maupun persamaan:
Tampilan pada Ghidra.
Persamaan yang ada pada ghidra dan hasil dari file compiled c adalah
sama sama menampilkan non-debugging symbols dan dump of
assembler code for function main akan tetapi perbedaan yang ada
pada ghidra dan hasil dari file compiled c adalah pada ghidra lebih jelas
dalam menampilkan data daripada file compiled c.

Tugas
1. Buatlah script crack otomatis untuk melakukan crack pada crackme03.pyc

# uncompyle6 version 3.7.4


# Python bytecode 2.7 (62211)
# Decompiled from: Python 3.8.10 (default, Jun 2 2021, 10:49:15)
# [GCC 9.4.0]
# Embedded file name: crackme03.py
# Compiled at: 2020-10-27 18:37:25

def check_block(strings, goals):


val = 0
for i in strings:
val += ord(i)

return val == goals

license = input('input your license key')

for i in license:
if 45 > ord(i) or 90 < ord(i):
print 'try harder'
exit(0)

if license.count('-') != 3:
print 'try harder'
exit(0)

arr_license = license.split('-')

if check_block(arr_license[0], 160) and check_block(arr_license[1], 210)


and check_block(arr_license[2], 190) and check_block(arr_license[3],
230): print 'Congratulations!\n You Cracked This!'

# okay decompiling crackme03.pyc

2. Mengapa python lebih mudah didecompile daripada java dan java lebih
mudah didecompile daripada c/c++? Jelaskan

Karena pada python terdapat perintah untuk melakukan compile dan


file yang dicompile sudah dapat dibuka sedangkan pada java terdapat
beberapa langkah di dalamnya, yaitu dengan menggunakan apktool
yang memiliki fungsi untuk melakukan ekstrak terhadap file android
agar dapat dilakukan untuk mengedit file didalamnya, selanjutnya jika
ingin mengetahui file tersebut berbentuk zip atau tidak maka dapat
dilakukan perintah “file” dan jika benar dapat dilakukan unzip, kemudian
terdapat dex2jar yang memiliki fungsi untuk melakukan compile dan
disediakan semacam IDE jika dibuka, jika pada C/C++ terdapat
perintah “gcc” yang berfungsi untuk melakukan compile, tetapi pada
crackme_05_stripped terdapat perintah “strip” dan yang terakhir
terdapat perintah “gdb” yang memiliki fungsi untuk mendebug file
dengan debugging information dan source, jika melihat pada
langkah-langkah dapat dilihat bahwa python lebih fleksibel daripada
java dan java lebih fleksibel daripada C/C++ dan hal tersebut
menjadikan sebuah urutan dalam melakukan compile dari yang
termudah.

3. Carilah informasi mengenai obfuskasi di internet. Apakah obfuskasi


mempersulit proses software reverse engineering? Jika iya, jelaskan

Obfuscation atau obfuskasi memiliki tujuan untuk mentransformasi


sintaks kode komputer namun dengan tetap memelihara isi dari kode
program tersebut sehingga kerahasiaan tetap terjaga, hal tersebut yang
membuat obfuscation atau obfuskasi mempersulit proses software
reverse engineering, cara kerja dari obfuskasi adalah mengubah /
mengacak kode sumber suatu aplikasi namun tetap memelihara
semantiknya, dalam mengacak kode sumber tersebut dapat
menggunakan berbagai algoritma.

Anda mungkin juga menyukai