Dalam melakukan reverse engineering, sangat penting untuk memahami pengalamatan memori, struktur percabangan, loop dan fungsi. Ini merupakan core of the core, intinya inti dari pada reverse engineering dan cracking. Jika anda memahami dengan baik code ini, maka anda sudah bisa mengikuti tutorial reverse engineering.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Nama Program : MemoriLoopDanFungsi
; Nama file : MemoriLoopFungsi.asm
; Dibuat oleh : Gunawan Jinnu
; Tanggal pembuatan : 16 September 2020
; Tanggal update : 16 September 2020
; Deskripsi :
; - Menerima dan Menampilkan input di windows CMD
; Compile dengan cara :
; ml /c /coff /Zd MemoriLoopFungsi.asm
; Link dengan cara :
; link /subsystem:console /entry:start MemoriLoopFungsi.obj
;Link source code : https://re-pinrang.blogspot.com/2020/09/tutorial-5-pengalamatan-memori-loop-dan.html
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.386
.MODEL Flat,STDCALL
option casemap:none
include C:\masm32\include\windows.inc
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\kernel32.lib
STD_INPUT_HANDLE EQU -10
STD_OUTPUT_HANDLE EQU -11
.data
TanyaNama db "==============================================", 0, 0Dh, 0Ah,
"PROGRAM PRINT SELAMAT - REVERSING.ID ", 0, 0Dh, 0Ah,
"==============================================", 0, 0Dh, 0Ah
"Masukkan nama anda : ", 0, 0Dh, 0Ah
LenTanyaNama equ $-TanyaNama
Selamat db "Selamat "
.data?
consoleOutHandle dd ?
consoleInHandle dd ?
buffer db 32 dup(?)
ReadWritten dd ?
UcapanSelamat db 50 dup(?)
.code
start:
push STD_OUTPUT_HANDLE
call GetStdHandle
mov consoleOutHandle, eax
push STD_INPUT_HANDLE
call GetStdHandle
mov consoleInHandle, eax
;Tampilkan pesan menanyakan nama
push 0
push offset ReadWritten
push LenTanyaNama
push offset TanyaNama
push consoleOutHandle
call WriteConsole
;Terima input nama
push 0
push offset ReadWritten
push sizeof buffer
push offset buffer
push consoleInHandle
call ReadConsole
xor ecx, ecx ; persiapkan ecx sebagai counter
SusunUcapan:
mov al, byte ptr[Selamat+ecx] ; Masukkan karakter pertama ke register al
mov byte ptr[UcapanSelamat+ecx], al ; Salin isi register al ke UcapanSelamat
inc ecx ; tambah counter/penghitung dengan 1
cmp ecx, 8 ; jika kedelapan karakter belum selesai disalin ke UcapanSelamat
jb SusunUcapan ; loop SusunUcapan
xor ecx, ecx ; persiapkan ecx sebagai counter
MasukkanNama:
mov al, byte ptr[buffer+ecx] ; masukkan 1byte buffer ke register al
test eax, eax ; periksa apakah semua karakter telah terbaca
je KatakanSelamat ; jika sudah semua, jump ke label/fungsi KatakanSelamat
mov byte ptr[UcapanSelamat+ecx+8], al ;salin input nama dari buffer ke UcapanSelamat
inc ecx ; tambah counter dengan 1
jmp MasukkanNama ; loop
KatakanSelamat:
;Tampilkan pesan halo nama
push 0
push offset ReadWritten
push sizeof UcapanSelamat
push offset UcapanSelamat
push consoleOutHandle
call WriteConsole
Keluar:
push 0
call ExitProcess
Terimakasih.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.386
.MODEL Flat,STDCALL
option casemap:none
include C:\masm32\include\windows.inc
include C:\masm32\include\kernel32.inc
includelib C:\masm32\lib\kernel32.lib
STD_INPUT_HANDLE EQU -10
STD_OUTPUT_HANDLE EQU -11
.data
TanyaNama db "==============================================", 0, 0Dh, 0Ah,
"PROGRAM PRINT SELAMAT - REVERSING.ID ", 0, 0Dh, 0Ah,
"==============================================", 0, 0Dh, 0Ah
"Masukkan nama anda : ", 0, 0Dh, 0Ah
LenTanyaNama equ $-TanyaNama
Selamat db "Selamat "
.data?
consoleOutHandle dd ?
consoleInHandle dd ?
buffer db 32 dup(?)
ReadWritten dd ?
UcapanSelamat db 50 dup(?)
.code
start:
push STD_OUTPUT_HANDLE
call GetStdHandle
mov consoleOutHandle, eax
push STD_INPUT_HANDLE
call GetStdHandle
mov consoleInHandle, eax
;Tampilkan pesan menanyakan nama
push 0
push offset ReadWritten
push LenTanyaNama
push offset TanyaNama
push consoleOutHandle
call WriteConsole
;Terima input nama
push 0
push offset ReadWritten
push sizeof buffer
push offset buffer
push consoleInHandle
call ReadConsole
xor ecx, ecx ; persiapkan ecx sebagai counter
SusunUcapan:
mov al, byte ptr[Selamat+ecx] ; Masukkan karakter pertama ke register al
mov byte ptr[UcapanSelamat+ecx], al ; Salin isi register al ke UcapanSelamat
inc ecx ; tambah counter/penghitung dengan 1
cmp ecx, 8 ; jika kedelapan karakter belum selesai disalin ke UcapanSelamat
jb SusunUcapan ; loop SusunUcapan
xor ecx, ecx ; persiapkan ecx sebagai counter
MasukkanNama:
mov al, byte ptr[buffer+ecx] ; masukkan 1byte buffer ke register al
test eax, eax ; periksa apakah semua karakter telah terbaca
je KatakanSelamat ; jika sudah semua, jump ke label/fungsi KatakanSelamat
mov byte ptr[UcapanSelamat+ecx+8], al ;salin input nama dari buffer ke UcapanSelamat
inc ecx ; tambah counter dengan 1
jmp MasukkanNama ; loop
KatakanSelamat:
;Tampilkan pesan halo nama
push 0
push offset ReadWritten
push sizeof UcapanSelamat
push offset UcapanSelamat
push consoleOutHandle
call WriteConsole
Keluar:
push 0
call ExitProcess
end start
Link Video :
Terimakasih.
Selamat belajar.
