Hacking Software

Setelah membaca-baca artikel buat belajar komputer waktu dulu masih kost, ternyata kepikiran tentang gimana caranya hacking software. Mungkin artikel kaya gini juga dah banyak yang bahas, tapi gw cuma mo share aj buat yang belom tau.
Pada dasarnya sebuah software tipe 32-bit dibagi menjadi beberapa bagian, bagian yang umum adalah resource, bagian dimana icon gambar dan yang lainnya disimpan, lalu data, bagian dimana variabel yang terinisialisasi disimpan, dan yang terakhir kode, dimana program utama dijalankan.

Program "com"mempunyai bagian yang paling sederhana dari semua jenis executable atau file yang bisa dilaksanakan/jalankan. Data yang terinisialisasi oleh com dengan, akan dianggap sama. Umumnya untuk menghemat ukuran, software tidak selalu menyertakan seksi stack pada badan program, tetapi memberikannya setelah program itu dijalankan.
Software yang akan dibuat mempunyai tata letak atau bagian seperti ini. 1024 byte pertama yang biasanya di isi oleh header pada Win32, untuk menjadikan sebuah perintah dalam melakukan penginisialisasian program secara automatis.
Source kode-nya dibawah ini:

; Berkas/file COM di isi di alamat CS:0100h
; (Nilai CS diset oleh Operating system)
ORG 100h

; Fungsi CSPMode di gunakan sebagai header
; Bisa pula dijadikan Kernel 32-Bit

jmp start

CSPmode:
smsw_cx db 0fh,01,0e1h ;SMSW cx byte
mov ax,cx ;At Pmode this will be mov eax,ecx
and al,1
cmp al,1
jz trs
inc cx
lmsw_cx db 0fh,01,0f1h ;lmsw cx byte
trs:
ret

; Program di mulai di sini
start:
call CSPMode
cmp al,0
jz brs
mov ah,9
mov dx,offset tes
int 21h
brs:
; Tambahkan kode anda disini
ret

Tes db 'Prosessor already at Pmode!$'


Bila mempunyai sebuah komputer kosong yang tidak ada OS, dengan menuliskan program tersebut di sektor 1, head 0 dan track 0, dan setting BIOS diganti menjadi boot from A. Maka BIOS akan langsung menjalankan program dan menganggap program tersebut sebagai Operating System. gw ingetin disini hanya hacking dan bukan cracking (seperti menjebol sebuah system dan sejenisnya).
Program ditulis dengan menggunakan Emu8086 v.2.7. Terlihat diatas adanya sebuah variable dengan nama SMSW_AX dan LMSW_AX. Variabel tersebut memang sengaja dibuat, karena emu8086 yang dipakai belum mendukung instruksi priviledge.

Penjelasannya satu-persatu:

Org 100.
Org singkatan dari Origin, perintah ini tidak mempunyai opcode atau hexcode. Perintah ini hanya akan menyuruh assembler atau kompiler untuk menyimpan program kita di alamat tertentu.

Jmp Start.
Perintah ini akan melakukan lompatan ke CS+imm.

SMSW_CX.
Ini adalah variabel yang mengandung opcode priviledge instruction untuk mengambil mode prosesor.

Mov ax,cx.
Memindahkan nilai cx yang mengandung nilai Status mesin ke AX.

and al,1
Membatasi nilai al dengan satu, karena status mode terletak di Bit Nol.

cmp al,1
Membandingkan apakah nilai al adalah satu.

jz trs
Jika ya loncat ke Label Trs.

inc cx
Naikkan nilai CX sebanyak 1 saja.

lmsw_cx db 0fh,01,0f1h
Menyimpan nilai ke Register CR0, atau set Status Mesin.

trs:
ret
Label dengan nama trs. Menyuruh prosesor untuk kembali ke pemanggil.

start:
call CSPMode
Melakukan Pemanggilan ke CSPMode.

cmp al,0
Membandingkan AL apakah Nol.

jz brs
Jika ya beres.

mov ah,9
mov dx,offset tes
int 21h
Interupt Software, Tidak akan berjalan tanpa DOS. Fungsi asli sedang dibuat.




brs:
ret
Tes db ‘Prosesor sudah berada di P-Mode!$'
Untuk kembali dan variabel tulisan yang ditampilkan dengan int 21h fungsi 9h.


Catatan:
Silahkan anda lihat OpCode-nya dibawah ini:

0
100: EB 10  Jmp 0x112
0102: 0F 01 E1  SMSW CX
0105: 8B C1  Mov AX,CX
0107: 24 01  And al,1
0109: 3C 01  Cmp al,1
010b: 74 04  JZ 0x111
010d: 41  Inc CX
010E: 0F 01 F1  LMSW CX
0111: C3  Ret
0112: EB ED FF  Call 0x102
0115: 3C 00  Cmp al,0
0117: 74 07  Jz 0x120
0119: B4 09  Mov al,9
011B: BA 21 01  Mov DX,offs [0x121]
011E: CD 21  Int x21
0120: C3  Ret
............................
............................
............................


Perintah pemanggilan fungsi ke 0x102, tidak ditulis EB 02 01, tetapi EB ED FF yang berarti –20 atau -0x14. Juga JZ. Maka perintah jump ataupun Call sama dengan CS+imm. Jika CS bernilai 101, dengan menuliskan 74 05 misalkan. Kita akan melompat ke alamat 106.
Juga baik Call ataupun Jmp, menggunakan nilai Signed. Misalkan nilai 254 pada unsigned akan menjadi –2. Nah sekarang tinggal mencobanya aj deh ....

# Selamet Mencoba

0 komentar:

Copyright © 2012 komputer-tech
Design by stuff-freeiz