Jump to content

Ancient One

Members
  • Content Count

    389
  • Joined

  • Last visited

Community Reputation

3 Normal

About Ancient One

  • Rank
    Ahli
  • Birthday 06/07/1980

Contact Methods

  • Website URL
    http://www26.brinkster.com/paipx
  • ICQ
    0

Profile Information

  • Location
    Kota Kinabalu
  • Interests
    ader 10 jenis manusia, yang tau nombor perduaan dan yang tak tau...
  1. intro Assalamualaikum... Tutorial ni adalah mengenai Reverse Code Engineering (RCE). Ringkasnya, dalam tutorial ni aku akan cuba mendedahkan kepada korang bagaimana untuk menganalisis program binari, dalam kes di mana kita tidak mempunyai akses kepada kod sumber asal program tersebut. Aku hanya fokuskan tutorial ni kepada platform Windows. So kalau aku citer pasal kernel misalnya, aku maksudkan kernel Windows, bukannya Linux, BSD ataupun maner2 OS yang lain. Lebih spesifik lagi, aku personally hanya guna Windows XP Pro (dengan SP2), sebab OS lain.. secara ikhlasnya... takde umphhh! Dalam bahagian pertama ni aku akan citerkan mengenai beberapa jenis dan kategori tools yang akan kita gunakan dalam sesi menganalisis dan tugas asas setiapnya. Bahagian ni lebih kepada memberi gambaran kepada korang apa yang korang akan buat atau tengok kelak, iaitu apabila korang dah ader pengetahuan asas mengenai RCE. So korang bleh laa anggap bahagian ni sebagai pemanas otak untuk membuka minda korang supaya dapat menerima maklumat2 asas dalam bahagian2 seterusnya. Dalam bahagian2 seterusnya aku akan citer plak basic knowledge dalam RCE dan maklumat2 yang lebih spesifik. Pengetahuan ni amat penting untuk korang yang makan PC, tido PC, mandi PC dan kawin ngan PC korang. Tools yang aku citer kat sini digunakan untuk pelbagai tujuan, di mana asasnya sama sahaja, iaitu untuk membantu menganalisis carakerja program binari. Tools sebegini digunakan oleh security expert untuk mengkaji kod sistem operasi, server, dan komponen2 kritikal suatu program. Tools ni jugak digunakan oleh crackers untuk mengalahkan skim perlindungan suatu perisian. Tools yang sama juga digunakan untuk cheat dalam game. Tools yang sama jugak korang bleh gunakan untuk analisis virus atau aper2 "makhluk asing" yang selalu sangat singgah kat PC korang tuh. Ye laa.. kita sepatutnya jadik tuan kepada PC kita, PC tu cuma hamba abdi dan menatang ni sepatutnya ikut perintah kita, bukan sebaliknya. Tak perlu takut dengan program2 "hantu" yang berlambak2 tu selagi kita penuhkan kepala otak kita dengan ilmu2 ghaib pasal PC ni. Aper2 pun aku harap korang bleh mempelajari sesuatu daripada tutorial yang tak sebrape ni. disassembler First sekali aku nak citer pasal disassembler. Tugas asas sebijik disassembler adalah menerima program binari sebagai input dan menghasilkan perwakilan program tersebut dalam bahasa himpunan sebagai output. Output yang kita dapat dari disassembler blehla dikatakan "kod sumber" program tersebut, cuma ia bukannya dalam bentuk yang asal, tapi dalam bahasa himpunan. Contoh2 disassembler adalah IDA (Interactive DisAssembler), PEBrowse Professional, BDASM, W32DASM dan lain2. Untuk mendapat sedikit idea mengenai menatang bahasa himpunan ni, kat bawah aku tunjukkan screenshot dari PC aku, di mana IDA dan Minesweeper tengan berjalan, dan aku tengah analisis kod Minesweeper menggunakan IDA (errr.. kotak2 dan garis2 kaler merah, kuning, ping dan hijau tu aku tambah laaa). Baris2 teks "push ...", "mov ...", "call ..." dan lain2 tu laa yang kita panggil sebagai bahasa himpunan. Nanti aku citer details lagi pasal ni. Cebisan kod dalam gambar di atas merupakan kod yang digunakan oleh Minesweeper untuk memaparkan "about box" game ni (iaitu menu help->About Minesweeper). Simbol2 teks "LoadIconW", dan "ShellAboutW" dalam prosedur tersebut adalah 2 daripada ribuan Windows API (Application Programming Interface). Semer Windows program gunakan Windows API untuk berinteraksi dengan Windows dan kebanyakannya didokumenkan dalam Platform SDK (Software Development Kit). Memahami Windows API merupakan salah satu kunci untuk memahami fungsi suatu prosedur dalam program Windows. Contohnya, dalam prosedur di atas, kod yang ditandakan dalam petak merah digunakan untuk load string dari string table resource program tersebut (bleh dilihat dengan mana2 program resource viewer, seperti Resource penggodam) ke ruang alamat (virtual memory) winmine dan string tersebut adalah "Minesweeper". Kod yang ditandakan dengan warna kuning plak sama dengan kod sebelum ni, tapi string yang dimuatkan ke memori adalah "by Robert Donner and Curt Johnson". Kod bertanda pink plak digunakan untuk load icon Minesweeper (jugak dari resource) dan akhir sekali, fungsi ShellAboutW digunakan untuk memaparkan "about box" Minesweeper. Kod yang aku tak tanda tu merupakan prolog dan epilog untuk prosedur tersebut, untuk setup storage untuk local variables. Seperti yang dapat dilihat, prosedur ni dinamakan secara automatik oleh IDA dengan nama sub_1003D1D. Bila dah dapat kesan tugas suatu prosedur tu, biasanya kita akan namakannya dengan nama yang lebih bermakna, e.g "DisplayAboutBox" atau sebagainya. IDA dipanggil "interactive" disebabkan kebolehannya menerima input dari kita untuk membantu dalam analisis di mana kebanyakan disassembler lain tidak mampu lakukan. Kolum yang ader teks ".text:xxxxxxxx" tu adalah virtual address untuk kod ni, ".text" means ia ader dalam seksyen bernama ".text". Teks yang ditandakan dengan semikolon tu adalah komen (biasa digunakan dalam pengaturcaraan bahasa himpunan). Note that IDA secara automatik membantu memberikan komen untuk setiap cebisan kod yang dia tahu maknanya. Bukan tu ajer, kita bleh masukkan komen kita jugak. Biasanya dalam RCE kita akan convert laa prosedur ni dalam bentuk yang lebih kita fahami (biasanya high-level language yang kita familiar atau pseudocode). Contohnya, aku bleh convert prosedur ni ke bahasa C seperti berikut : void DisplayAboutBox() { TCHAR str1[128], str2[128]; sub_10039E7(12, str1, 128); sub_10039E7(13, str2, 128); ShellAbout(hWnd, str1, str2, LoadIcon(hInstance, 100)); } Akhir sekali, untuk memahami output disassembler ni kita kena laa faham mengenai pengaturcaraan. Untuk contoh ni, kita kena faham pengaturcaraan bahasa himpunan, pengaturcaraan Windows dan juga struktur fail format PE (Portable Executable), iaitu format rasmi program executable dalam Microsoft Windows. Ni laa benda yang kita akan pelajari dalam bahagian2 seterusnya. Korang tak paham penerangan di atas sekarang ni takpe. Lain kali korang akan paham. Kita perlu menggunakan disassembler yang betul untuk sistem yang betul kerana terdapat pelbagai senibina pemproses untuk komputer, begitu juga dengan format fail program yang biasa disertakan dengan pengepala (header) untuk membantu OS melaksanakan fail program tersebut dengan betul. Kebanyakan disassembler adalah spesifik kepada satu fail format dan satu senibina. IDA pula menyokong pelbagai jenis fail format dan senibina pemproses. Ini bermakna jika kita menggunakan IDA versi Windows, kita masih boleh memproses fail program ELF, yang biasa digunakan dalam Linux, ataupun fail program class, iaitu format yang digunakan oleh Java, dan bermacam-macam lagi laaa... Satu perkara yang perlu diingati adalah disassembler hanya memproses isi fail program seperti mana ia terdapat dalam fail tersebut (analisis statik). Disassembler sesuai digunakan untuk analisis kod program yang "normal" dan linear. Kebanyakan virus zaman sekarang biasanya encrypt diaorang nyer code, atau guna poly/metamorphic engine yang surely disassembler takleh nak analisis. Untuk melakukan analisis secara dinamik, di mana kita bleh mengawal aliran kod dan ruang alamat sesuatu program, kita perlukan debugger. debugger Debugger ni memang tak asing laaa untuk para programmers, sebab ia salah satu tools yang digunakan oleh programmer dalam sesi debugging. Istilah "bug" ni digunakan untuk merujuk kepada "kesilapan" dalam program binari. Tapi tak semestinya ia disebabkan oleh kod program tu. Bleh jadik disebabkan oleh program lain yang berinteraksi dengan program tu, atau bleh jadik kod sistem operasi jugak. Kalau kod program tu tak dapat handle pelbagai cara bagaimana pengguna menggunakannya pun dikira mempunyai bug jugak. Bila dah nampak kesan kesilapan ni (e.g keluar error message ke, tiba2 hang ke), programmer biasanya gunakan debugger untuk kesan punca masalah. Debugger ni basically cam disassembler laaa.. bezanya kita laksanakan program tu di bawah kawalan debugger, maknanya kita bleh tengok setiap baris kod dilaksanakan dan setiap variable atau register berubah in real time. Contoh2 debugger yang biasa digunakan untuk analisis program binari adalah seperti SoftIce, WinDbg (Platform SDK), OllyDbg, PEBrowse Professional Interactive dan lain2 laaa.. Kalau korang tanya mana2 cracker kat dunia nih, diaorang tentu kenal ngan SoftIce. Rasanya development SoftIce dah stop dah, maknanya takde laa lagi SoftIce baru dari company yang bikin menatang ni. Tapi ader gak rasanya bakal pengganti SoftIce, yang dipanggil Syser. Ni screenshot dari PC aku - SoftIce, tengah stop kat entrypoint (permulaan kod program) Minesweeper. Seperti yang korang dapat lihat di atas, bahagian yang ditandakan dengan no. 3 tu adalah perwakilan kod program tersebut dalam bahasa himpunan. No. 1 plak tunjukkan registers (storan sementara dalam CPU). No. 2 plak adalah ruang ingatan dan no. 4 tempat kita berikan arahan untuk SoftIce (contohnya arahan "cls" tu laaa). Dari permulaan kod program ni, aku bleh "single step" setiap baris kod assembly ni atau modify kod ni untuk mengubah kelakuan program. Actually ader lagi resources lain yang aku tak tunjuk, contohnya FPU registers, MMX, XMM registers dan lain2 lagi. Dengan debugger, aku bleh execute program arahan demi arahan, modify memory dan variables yang digunakan dalam program malah mengubah arahan dan banyak lagi laa. Biasanya programmer nyer debugging session disertakan dengan kod sumber dan basically dia debug kod dalam high level language, bukannya level assembly. Dan most programming language system ader debugger khas, terutamanya yang tak kompil ke native machine code. Nanti laa aku citer lagi banyak pasal ni. hex editor/viewer hex editor/viewer membolehkan kita melihat isi kandungan sebenar (mentah) sesuatu fail dalam sistem. Kita tau yang setiap fail, tak kira la fail imej ke, audio ke, video ke, exe ke semernya terdiri daripada nombo2 binari 0 dan 1 sahaja. Nombor2 ni mempunyai makna kepada program2 yang memahaminya, memprosesnya dan menterjemahkannya kepada bentuk yang lebih bermakna (e.g Winamp untuk mp3 files). Hex editor/viewer tidak memproses isi kandungan fail ni dan hanya memaparkan nombor2 binari yang membentuk fail tersebut. Contoh2 hex editor adalah seperti WinHex, Hex Workshop, BIEW, AXE, 010Editor dan banyak lagi. Kebanyakan hex editor bukan hanya mampu memaparkan isi kandungan fail, tapi juga disk dan memori. Sebagai contoh, screenshot di bawah adalah dari 010Editor (feveret aku) yang tengah memaparkan isi kandungan sektor pertama hard disk aku, atau yang kita kenali sebagai Master Boot Record (MBR). Tetingkap utama dalam hex editor tu laa yang ader 3 kolum tu. Yang first untuk address/offset, yang kedua adalah isi kandungan fail dalam asas perenambelas (hex) dan yang ketiga adalah perwakilan ASCII (control character ngan ascii code > 127 dia wakili dengan dot jer). Hex editor/viewer memang sesuai laa kalau nak kaji format2 fail tertentu. Daripada gambar di atas, aku bleh nampak yang hard disk 40 GB aku cuma ader 1 partition jer, dengan ID 7 (NTFS filesystem). Ader jugak hex editor yang bleh paparkan isi fail selain daripada asas perenambelas (yang biasa adalah asas 2, 8 dan 10), dan kebanyakan hex editor jugak sediakan data interpreter (cam 010Editor Inspector kat sebelah kiri tu) untuk memudahkan analisis. Lain kali aku citer plak lebih details lagi mengenai hex editor feveret aku, terutama mengenai "template" feature. monitoring programs Program2 yang monitor system resources ni memang sangat berguna laa terutama untuk detect masalah dalam sistem dan melakukan pra-analisis. Terdapat banyak jenis resources yang kita bleh monitor, bergantung kepada keperluan kita. Contoh paling mudah adalah task manager di mana kita bleh tengok pelbagai maklumat mengenai proseses, users dan network connections dalam sistem. Dalam bahagian ni aku citer sikit jer dulu.. First sekali, aku perkenalkan korang dengan tools feveret aku, iaitu Process Explorer. Process Explorer ni bleh dikatakan cam Task Manager laa, cuma dia fokus kepada proses monitoring. Maknanya kita bleh dapatkan pelbagai maklumat mengenai setiap proses yang wujud dalam sistem, termasuklah fail program dan dll yang terlibat dan handles yang dipegang oleh setiap proses. Aku akan sentuh lagi pasal ni nanti. Then kita ader File Monitor, yang monitor aktiviti filesystem, so kalau ader program sentuh fail2 sensitif korang bleh nampak laa dalam log File Monitor ni. Kemudian kita ader Registry Monitor, yang monitor aktiviti registry, so kalau korang nak tau samada suatu program simpan data dalam registry korang, bleh laa tengok dengan Registry Monitor. Contohnya, dalam screenshot di bawah adalah tetingkap Registry Monitor tengah monitor registry access oleh Minesweeper. Kita bleh nampak Minesweeper simpan settings kat subkey "HKCU\Software\Microsoft\winmine\" (HKCU means HKEY_CURRENT_USER). Dan nampak gayanya dia try QueryValue ke atas Tick dan Menu value tapi tidak berjaya (dua2nya takde dalam registry). Kita jugak bleh nampak kegunaan key lain seperti Time*, Name*, Height dan yang pastinya Minesweeper menggunakan registry untuk menyimpan setting dia. Bila kita ubah setting dalam game, ia akan menulis ke registry setting yang baru. Actually ader banyak lagi monitoring programs yang lain yang sangat2 laa berguna dalam menganalisis program binari. Errr.. antivirus pun monitor gak, tapi ni menatang lain sama sekali, sebab virus bukan system resources. Dan sebenarnya ader banyak lagi tools yang tugasnya very specific dan sangat membantu dalam keje2 kotor kita ni. Tapi aku cuma akan perkenalkan korang kepada tools ni bila kita nak gunakannya dalam analisis contoh2 program dalam bahagian2 seterusnya. ----- tamat bahagian 1 ----- bersambung...
  2. Memandangkan tak lama lagi nak raye, meh kiter sama2 jawab kuiz raya ni.. Adakah korang pernah terfikir brape banyak yang korang tau mengenai aplikasi korang sendiri. Kenalkah korang dengan program yang korang tulis dan bina sendiri? Kuiz ini akan membantu korang mendalami program korang. [1] [NT only] Program 1.exe ni telah dienkrip bermula dari entrypoint (disassembly akan menghasilkan kod sampah). Namun demikian, program ni tetap dilaksanakan dengan betul. Nampaknya ia telah didekrip secara automatik (tanpa bantuan kod program yang lain) semasa program loading. Explain how it is done. [2] [NT only] Seperti yang kita semer tau, execution begins at entrypoint. Nyatakan apakah feature yang membenarkan cebisan kod di dalam aplikasi korang dilaksanakan sebelum entrypoint program korang. Berikan contoh program dan kod. [3] Program 3.exe run tanpa masalah under NT tapi takleh run under Win9x. Explain why and how to fix it. [4] The program 4.exe cannot be bind by bind.exe. That is, the imported function entrypoint cannot be patch into the executable file at link time. Explain why and how to fix them. (Use M$ PSDK bind.exe with -v and -u switch and it will show you the error.) [Hint : Program for Question 3 can be bind]. [5] Without using any Win32 API related to Windows version (e.g GetVersion), juga tanpa bantuan daripada aper2 HLL libraries/wrappers/framework libraries, write a code to differentiate between 9x and NT. [6] Next Week.. Jawapan akan menyusul dengan soalan yang seterusnya.. Selamat Menjawab!!!
×
×
  • Create New...