Jump to content
Ancient One

Reverse Code Engineering

Recommended Posts

aise sipook ...tergantung la plak tutorial nie ...sambong la wahai ancient one ...

Hish ko ni..Ko belum tahu lagi ke citer? ancient one dah takder dah..Klik

Share this post


Link to post
Share on other sites

xramai yang terer ASM, dan lagi xramai yang terer RCE nie.. ko tahulah kebanyakan orang sekarang, hanya menumpu pada high level language jer.. jadi aku rasa memang susah nak carik orang nak sambung tutorial nie.. :(

Share this post


Link to post
Share on other sites

intro

. 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.

Ayat motivasi

Share this post


Link to post
Share on other sites

Ermm RCE ......dah lama tggal ...ader yg dahl lupa..tgk thread nih ingatkan aku time tgh ligat belajar RCE dulu ..heheh..anyway smbung arr sapa2 yg larat..aku dah tue ..tak larat ..hauhauahauah

Share this post


Link to post
Share on other sites

bak kate orang lagi tue lagi hebat ilmu dier.. aku act dah lame bace tajuk neh b4 daftar lagi.. tapi tuan guru dah tak de.. hemm

Share this post


Link to post
Share on other sites

bak kate orang lagi tue lagi hebat ilmu dier.. aku act dah lame bace tajuk neh b4 daftar lagi.. tapi tuan guru dah tak de.. hemm

nak teruskan tutorial tu aku tak mampu la, tapi, jika ada apa2 soalan boleh tanya kat sini. kalau boleh jawab, aku jawab la nanti.

Share this post


Link to post
Share on other sites

Bahagian I : Asas pengaturcaraan

intro

Sebelum ni aku citer mukadimah jer (bahagian 0). Sekarang meh kita start dengan basic. RCE, secara umumnya bleh laa dikatakan songsangan untuk proses pembinaan program. Kalau dalam proses pembinaan program kita bermula daripada kod sumber dan berakhir menjadi program binari, songsangannya plak adalah untuk mendapatkan semula kod sumber daripada program binari ni. So, tak dapat dinafikan lagi memahami proses pembinaan program adalah sangat penting untuk memahami RCE. Tu sebab dalam bahagian ni kita akan belajar mengenai asas pengaturcaraan, khususnya untuk PC kita. Tapi sebelum aku citer pasal pengaturcaraan, meh kita kembali semula ke sekolah untuk belajar matematik. Ni kira matematik tahap tadika laa ni, sebab sebenarnya kita nak belajar mengira semula.

sistem pernomboran

Aku tak tau laa brape banyak bangsa manusia yang wujud kat dunia nih, tapi aku rasa laa kebanyakannya (kalau tak semer) sekarang mengira menggunakan sistem pernomboran asas 10 (decimal). Dalam sistem decimal, 10 simbol digunakan untuk mewakili kuantiti, iaitu angka 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 (ni kita nyer simbol laa.. lain bangsa lain plak simbolnya). Walaupun kecik2 dulu kita selalu start kira dengan nombor 1, rasanya sekarang ni kita tau laa yang simbol pertama dalam sistem ni adalah 0. Untuk mewakili nombor yang lebih besar dari 9 plak, kita cuma recycle simbol2 0 hingga 9 ni, iaitu turutan simbol ni kita ulang semula tapi dengan bilangan digit yang semakin bertambah. Contohnya penambahan sebanyak 1 kepada 9 kita tulis sebagai 10. "1" dalam "10" tu maksudnya turutan simbol asas dah disempurnakan sekali, dan "0" dalam "10" tu plak menandakan kita sedang berada pada simbol pertama untuk turutan yang baru nih.

Konsep yang perlu difahami di sini adalah dengan simbol2 asas ni, kita gunakannya untuk mewakili kuantiti yang semakin bertambah mengikut urutan, sehinggalah semernya telah digunakan, dan kemudian tambah satu digit lagi dan ikut semula turutan tersebut. Ni laa prinsip utama yang digunakan dalam semer sistem nombor, yang berbeza hanyalah bilangan simbol asas yang digunakan. Bila dah paham konsep ni, meh aku perkenalkan plak 2 lagi sistem pernomboran yang sangat penting dalam subjek RCE kita nih, iaitu sistem pernomboran asas 2 (binary) dan sistem pernomboran asas 16 (hexadecimal).

sistem binary
. Dalam sistem binary, kita hanya gunakan dua simbol asas, iaitu 0 dan 1. Dengan mengikut konsep yang aku sebut kat atas tadi, jadual di bawah menunjukkan 10 nombor pertama dalam sistem decimal dan perwakilannya dalam sistem binary :

  decimal        binary   -------        ------      0             0      1             1      2             10      3             11      4             100      5             101      6             110      7             111      8             1000      9             1001
sistem hexadecimal
. Oleh kerana hanya ader 2 simbol dalam sistem binary, dah tentu banyak sangat laa digit yang perlu digunakan untuk mewakili nombor yang besar, dan dah tentu jugak payah kita nak manipulasi. So, wujud laa plak sistem hexadecimal, atau ringkasnya hex, menggunakan 16 simbol asas untuk mewakili kuantiti. Oleh kerana kita cuma ader 10 simbol jer untuk mewakili angka, iaitu 0-9, maka sistem hex, selain dari menggunakan 0-9, jugak menggunakan abjad A, B, C, D, E dan F untuk mewakili 6 simbol lagi, so kita ader turutan 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, dan F sebagai simbol asas. Aku letakkan plak kat bawah 20 nombor pertama dalam sistem decimal, binary dan jugak hexadecimal sebagai perbandingan :
  decimal        binary        hexadecimal   -------        ------        -----------      0             0                0      1             1                1      2             10               2      3             11               3      4             100              4      5             101              5      6             110              6      7             111              7      8             1000             8      9             1001             9      10            1010             A      11            1011             B      12            1100             C      13            1101             D      14            1110             E      15            1111             F      16            10000            10      17            10001            11      18            10010            12      19            10011            13
*Note that 1 digit nombor hex (0 hingga F) bleh mewakili maner2 4 digit nombor binary (0 hingga 1111)*. Tu jer laa yang aku nak citer pasal sistem pernomboran ni. Tak details lagi tu, just untuk memperkenalkan jer. Yang penting di sini kita patut paham yang sistem pernomboran yang berbeza-beza ni hanyalah kaedah yang berbeza untuk mewakili kuantiti. Kuantitinya tak berubah, cuma simbol yang kita gunakan untuk mewakilinya saja yang berbeza. Perhatikan jugak nombor yang dinyatakan dalam asas sistem tersebut, e.g asas
2
,
10
,
16
dan sebagainya adalah bilangan simbol asas yang digunakan dalam sistem tersebut. So kalau aku guna asas 36 misalnya, ader 36 simbol asas laa, maknanya 1 digit dalam simbol asas 36 ni bleh mewakili 36 nombor pertama dalam sistem decimal. Aku bleh guna simbol2 0-9 dan A-Z sebagai simbol untuk mewakili nombor2 dalam asas 36 ni. Tu contoh laa. In case korang tertanya-tanya aper kepentingan aku kenalkan 2 sistem nombor - binary dan hex ni, meh laa pakat2 bacer topik seterusnya kat bawah.
kenali PC kita
Errr.. tak masuk lagi sebenarnya topik pengaturcaraan. Kita berkenalan dulu dengan lebih rapat dengan PC kita. Ye laa.. orang cakap... tak kenal maka tak cinta
:)
. PC, secara dasarnya mempunyai 3 komponen utama iaitu
CPU
,
memori
dan
alat input/output
(I/O) dan CPU bleh berkomunikasi dengan memori dan I/O secara terus.
CPU
. CPU (Central Processing Unit) adalah komponen yang bertanggungjawab melaksanakan arahan komputer dan memproses data2 yang terlibat semasa perlaksanaan arahan2 ni. Aku guna istilah CPU untuk merujuk kepada pemproses utama dalam PC. CPU ni la menatang paling penting dalam PC kita dan ia bleh laa dianggap "otak" untuk PC. Errr.. komponen lain pun penting gak, tapi keadaan kat dalam CPU jer laa yang paling meriah. CPU amik arahan yang perlu dilaksanakan daripada memori dan data plak bleh disimpan/dibaca ke/dari memori atau I/O. CPU ni sebenarnya blehlaa kita anggap sebagai koleksi suis2 elektronik. Aku yakin korang penah nampak suis lampu kat maner2 yang bleh mempunyai 2 keadaan, samada On atau Off. Kalau kiter On, lampu menyala dan kekal camtu selagi kita tak ubah suis ke Off, dan sebaliknya. Camtu laa jugak suis2 elektronik dalam CPU ni. Bezanya suis ni takde laa beso cam suis lampu, tapi dalam saiz mikroskopik, kena guna mikroskop baru bleh nampak. Dalam CPU, suis2 elektronik ni dibentuk daripada transistor. Kita bleh perhatikan yang sifat suis elektronik ni yang hanya bleh bezakan 2 keadaan fizikal memang "ngam" sangat laa dengan sistem binary yang aku citer kat atas tadi. Kita bleh anggap yang keadaan On mewakili 1 dan keadaan Off mewakili 0. So, secara matematiknya, CPU (dan komputer umumnya) hanya memanipulasi nombor dalam sistem binary. Satu digit nombor binary kita panggil sebagai
bit
(
BI
nary digi
T
) dan ni laa unit data paling asas dalam CPU. Transistor kat dalam CPU bukan hanya ader sikit, tapi juta2. Transistor2 ni disusun mengikut konfigurasi tertentu (dipanggil get logik) sehingga ia bleh digunakan untuk melakukan operasi2 tertentu ke atas nombor2 binari ni. Tak perlu laa aku citer details pasal struktur fizikal ni.. nanti lain plak jadinya... Setiap CPU telah dibina di dalamnya set arahan yang ia fahami dan tugas2 yang perlu dilakukan untuk melengkapkan arahan ni. Setiap arahan diwakili oleh siri nombor binari yang unik, iaitu
opcode
(
OP
eration
CODE
). Contohnya kalau CPU tengah amik nombor binary 10010010 dari memori sebagai arahan, unit yang bertanggungjawab dalam CPU akan mencari arahan yang mempunyai opcode 10010010 dan memprosesnya jika arahan ni wujud. Ringkasnya cam tu laa.... Semer CPU yang kita guna kat PC tergolong dalam satu keluarga CPU yang kita panggil sebagai
80x86
, atau
x86
. Bila aku sebut satu keluarga kat sini basically maknanya semer CPU dalam keluarga ni menyokong set arahan asas yang sama. Latest CPU dalam satu keluarga, walaupun ditambah dengan arahan2 baru, masih menyokong arahan2 asas CPU sebelumnya. Aku yakin korang tentu lebih tau nama2 CPU yang dikeluarkan oleh
Intel
dan
AMD
. Contohnya 80386, K6, Pentium, Celeron, Duron, Athlon, Sempron dan lain2 laa. PC dulu2 guna CPU 16-bit, cam 8088, 8086. Then PC kita guna plak CPU 32-bit cam 80386, Pentium dan lain2. Sekarang ni plak kita dah bleh guna CPU 64-bit, cam Athlon 64. Orang selalu sebut CPU 64-bit dari AMD sebagai AMD64, dan Intel plak panggil EM64T, aper2 pun kat sini aku rujuk dua2 dengan nama x86-64. 16/32/64 bit kat sini biasanya merujuk kepada saiz satu general purpose register so kalau kita ader CPU 16-bit maknanya dia bleh manipulasi data bersaiz 16 bit sekaligus.
memori
. Memori ni merujuk kepada memori utama dalam PC, yang selalu kita sebut sebagai RAM, atau nama penuhnya Random Access Memory. Program dan data disimpan dalam RAM sebagai storan sementara sehinggalah ia diperlukan oleh CPU. "Random Access" maknanya kat sini bukanlah ia diakses secara rawak oleh CPU, tapi ia diakses mengikut alamat. Kita bleh anggap RAM sebagai terbahagi kepada "bilik"2, yang kita panggil sebagai sel memori di mana data disimpan dan diambil. Setiap sel ni mempunyai saiz yang sama dan bleh menyimpan beberapa bit data. Setiap sel mempunyai alamat yang unik dan dinomborkan mengikut urutan bermula dari 0, so sel pertama mempunyai alamat 0. Oleh kerana setiap setiap sel mempunyai alamat yang unik, maka CPU bleh laa gunakan alamat ni untuk akses mana2 sel yang ia kehendaki secara direct. Actually dalam PC, setiap sel memori ni bersaiz tepat 8 bit. Satu kumpulan 8 bit data kita panggil sebagai
byte
, maknanya 1 byte bleh mewakili 8 digit nombor binari. RAM disebut sebagai "byte-addressable memory" kerana setiap alamat adalah dalam turutan 1 byte. So bila kita cakap byte ke 100 dalam memori, kita merujuk kepada sel memori ke 100. Byte adalah unit asas data dalam memori dan bila2 masa kita read/write data dari/ke memori, kita hanya berurusan dengan data dengan saiz minimum 1 byte, takleh laa suka2 nak akses 1 atau 2 bit jer secara direct. Nanti kita akan belajar plak aper beza physical memory dengan virtual memory, physical address, logical address, virtual address dan lain2 laa..
I/O
. I/O ni, bagi kita adalah menatang cam monitor, keyboard, mouse, printer dan sebagainya yang kita gunakan untuk berinteraksi dengan komputer. I/O ni perantara kita dengan CPU laa kiranya. Bagi CPU plak, I/O ni lebih kurang sama laa cam memori, di mana ia bleh read/write data dari/ke I/O dan setiap alatan input/output ni mempunyai alamat yang unik gak. Aku nak tambah lagi 2 menatang yang penting jugak cam 3 komponen kat atas. First sekali aku nak citer pasal storan tetap (e.g disk) sebagai tempat simpanan untuk data yang tak digunakan oleh CPU pada satu2 masa. Meh kita bayangkan disk ni sebagai kabinet fail kat opis korang dan RAM tu plak meja kerja korang, dan korang plak adalah CPU. Fail yang korang nak guna (proses) maser tu dah tentu lebih mudah diakses kalau letak atas meja dan fail yang tak berkaitan dengan keje korang maser tu bleh laa simpan kat kabinet, untuk tidak menyesakkan meja. For sure memang payah laa nak proses data dalam fail kalau biar jer kat kabinet, mesti kena letak kat meja gak. Camtu laa kiranya kegunaan storan tetap ni. Satu lagi adalah benda bukan fizikal, kita tak nampak tapi memang sangat menakjubkan, iaitu program. Tanpa program, PC kita basically tak best laa.. Program ni laa yang menjadik "penterjemah" kita bila berinteraksi dengan komputer. Terdapat pelbagai jenis program yang ader untuk melakukan pelbagai tugas dan menyelesaikan pelbagai masalah manusia dan yang paling penting sekali antaranya adalah OS (sistem operasi) yang menjadi antaramuka antara kita dan komponen komputer dan juga menyediakan servis2 kepada program2 lain seperti penyunting teks, kalkulator dan sebagainya.
konsep pengaturcaraan
Pengaturcaraan komputer, bagi aku maknanya ringkas jer, iaitu
mengarahkan komputer untuk melakukan sesuatu
. Secara tradisionalnya, kita mengaturcara dengan membina program yang mengandungi arahan2 untuk dilaksanakan oleh CPU. Proses pembinaan program bleh diringkaskan seperti yang ditunjukkan dalam rajah di bawah :
rce0200qv9.png
Kod sumber
biasanya disediakan dalam bentuk fail dalam storan komputer yang ditulis mengikut spesifikasi bahasa pengaturcaraan yang tertentu. Ia bleh dianggap sebagai arahan yang kita hendak CPU laksanakan daripada perspektif bahasa pengaturcaraan tersebut. Kemudian kod sumber ni diberikan sebagai input kepada compiler (penyusun ke aper tah). Compiler adalah program yang menterjemahkan kod sumber ni kepada program yang terdiri daripada bahasa mesin (siri nombor binary), iaitu satu-satunya bahasa yang difahami oleh komputer. Aku gunakan istilah compiler untuk merujuk kepada semer program yang menterjemahkan kod sumber kepada bentuk kod yang akan dilaksanakan. Juga bleh jadik terdapat lebih dari satu program yang digunakan untuk menterjemahkan kod sumber (compiler system). Kod sumber yang ditulis dengan bahasa pengaturcaraan biasanya ader laa iras2 English gabung ngan formula matematik. Contohnya, untuk membina program yang menambah 3 nombor, kita tulis kod sumbernya seperti berikut, dalam satu bahasa pengaturcaraan yang dipanggil C :
  #include <stdio.h>   void main() {     int x, y, z;     printf("Berikan 3 nombor integer : ");     scanf("%i %i %i", &x, &y, &z);     printf("Jumlah %i+%i+%i = %i", x, y, z, x+y+z);   }
Kod sumber ni kemudiannya diproses oleh compiler yang memahami bahasa C (C compiler laa). Sebagai penerangan ringkas, pernyataan matematik x+y+z dalam kod C di atas mewakili arahan untuk menambah 3 nombor yang disimpan dalam pembolehubah x, y, dan z dalam memori. #include adalah arahan untuk komponen dalam compiler (prapemproses), scanf dan printf membolehkan kita menerima input dan memaparkan output ke paparan komputer. Kalau kod sumber ditulis dengan betul, hasilnya merupakan program binari yang kalau kita lihat isinya di dalam memori adalah siri2 nombor binari, e.g (dalam hex) :
55 8B EC 83 EC 0C 68 40 A0 40 00 E8 5C 00 00 00 83 C4 04 8D 45 F4 50 8D 4D FC 51 8D 55 F8 52 68 5C A0 40 00 E8 2C 00 00 00 83 C4 10 8B 45 F8 03 45 FC 03 45 F4 50 8B 4D F4 51 8B 55 FC 52 8B 45 F8 50 68 68 A0 40 00 E8 20 00 00 00 83 C4 14 33 C0 8B E5 5D C3 8D 44 24 08 50 FF 74 24 08 68 88 A0 40 00 E8 69 02 00 00 83 C4 0C C3 53 56 57 BE A8 A0 40 00 56 E8 78 11 00 00 8B F8 8D 44 24 18 50 FF 74 24 18 56 E8 B9 12 00 00 56 57 8B D8 E8 ...... dan seterusnya

*Note that 2 digit nombor hex bleh mewakili mana2 8 digit nombor binari (8 bit, atau 1 byte). Oleh kerana 1 byte data adalah unit asas dalam memori, kita selalu tulis data menggunakan sistem nombor hex. Setiap dua digit nombor hex bleh mempunyai nilai di antara 0 hingga 255 decimal.*

Sepertimana kita berkomunikasi sesama manusia dengan menggunakan bahasa manusia (e.g Melayu, English, Jepun, Esperanto dan sebagainya), kita "berkomunikasi" dengan komputer menggunakan bahasa pengaturcaraan. Macam bahasa manusia jugak, bahasa pengaturcaraan ada banyak jenis dan dialek. Rasanya ader beribu-ribu gak bahasa pengaturcaraan yang wujud sejak komputer digital mula wujud sampai laa sekarang ni. Kita bleh kategorikan bahasa pengaturcaraan dalam beberapa cara, tapi kat sini, ikut cara aku, aku cuma bahagikan kepada 3 - bahasa mesin, bahasa aras rendah (Low Level Language - LLL) atau lebih dikenali sebagai bahasa himpunan dan bahasa aras tinggi (High Level Language - HLL).

Bahasa C adalah salah satu dari ribuan HLL yang wujud dan HLLs dinamakan sedemikian sebab kita lebih cenderung memahaminya daripada LLL dan bahasa mesin. Ader banyak laa nama2 HLL, contohnya C, Fortran, Cobol, Pascal, Ada, Lisp, Algol, C++, Basic, Perl, C#, Forth, Javascript, Java dan macam2 lagi laa.. Model yang digunakan oleh HLLs ni untuk menyelesaikan masalah kita panggil sebagai paradigma pengaturcaraan. Kita ader procedural paradigm cam C, Pascal dan Fortran; kita ader object-oriented paradigm cam SmallTalk; kita ader functional paradigm cam Lisp ngan Haskell dan lain2 model lagi laa.. Selalunya setiap bahasa pengaturcaraan menyokong satu model tapi ader gak yang support lebih dari 1, contohnya C++ support procedural model ngan object-oriented model.

Bahasa himpunan, atau ringkasnya asm (assembly language), jugak kita panggil sebagai LLL direka untuk memberikan kuasa penuh kepada pengaturcara untuk mengakses setiap arahan mesin dalam set arahan yang difahami oleh CPU dan jugak persekitaran pengaturcaraan yang disediakan oleh CPU. So bleh katakan aper2 menatang yang bleh diprogramkan dalam CPU bleh diakses dengan asm. Oleh kerana CPU berlainan bleh mempunyai set arahan yang berbeza, maka asm pun bleh berbeza-beza antara semer CPU ni. Kita selalu panggil pengaturcaraan asm kat PC sebagai x86 assembly programming, untuk merujuk kepada asm yang khusus kepada CPU dalam keluarga x86. Assembler, atau assembly compiler adalah program yang bertanggungjawab menterjemahkan kod sumber asm kepada bahasa mesin. Arahan mesin, apabila dilihat dari perspektif asm; atau kita bleh cakap setiap arahan asm, mempunyai format berikut :

<mnemonik arahan> <pengoperasi>

<mnemonik arahan> adalah arahan mesin dalam asm, contohnya ADD untuk operasi tambah, JMP untuk JuMP, CMP untuk CoMPare, MOV untuk MOVe dan sebagainya. Kita bleh dapatkan senarai arahan dalam set arahan yang disokong oleh satu2 CPU daripada pengeluar CPU tersebut, dan untuk PC, kita bleh laa mintak kat Intel atau AMD (actually bleh download dari website depa ni laa). Aku tak tau laa exact URL (rasanya URL dia bleh berubah-ubah.. pelik), tapi bleh cari kat
dan dokumen tu tajuk utama dia
"IA-32 Intel® Architecture Software Developer’s Manual"
. Rasanya ader 3 bahagian dan bahagian kedua adalah rujukan set arahan. Kalau korang nak tau basic programming environment untuk x86 ni laa dokumen2 yang patut menjadi rujukan (bahagian 1 dan 2). Bahagian 3 adalah untuk pengaturcara sistem (e.g OS developers). Dari website AMD pun bleh gak download. Tajuk utama dokumen2 ni (ader 4-5 bahagian) adalah "
AMD64 Architecture Programmer’s Manual"
. Setiap arahan bleh menerima 0, 1, 2 atau 3 pengoperasi (parameter), bergantung kepada tugas arahan tersebut. Contohnya, arahan NOP (No OPeration) tak perlukan aper2 parameter, so kita tulis sebagai satu baris kod "nop" sahaja. Bagi arahan yang menerima satu pengoperasi, jenis pengoperasi ni biasanya adalah samada alamat memori atau register (register adalah storan sementara kecik kat dalam CPU, so bleh diakses dengan sangat pantas). Contohnya arahan INC (INCrease) bleh digunakan untuk menambah nilai pada satu alamat memori (misalnya 400000) sebanyak 1, so kita tulis sebagai "inc [400000]". Nanti laa aku citer lagi dengan betul pasal asm programming ni.

Setiap arahan2 mesin biasanya diwakili oleh satu baris arahan dalam asm, iaitu bleh dikatakan kod mesin dan kod asm mempunyai hubungan 1-1. Maknanya lebih mudah menukarkan kod asm kepada kod mesin (dan sebaliknya) daripada menukarkan kod HLL kepada kod mesin (dan sebaliknya). Tu sebab asm ni tersangat laa penting dalam subjek RCE kita. HLL diterjemahkan oleh compiler ke bahasa mesin dan dengan disassembler plak kita terjemahkan semula bahasa mesin ni kepada asm, pendek kata, kita dapatlaa semula kod program tu, tapi dalam LLL, bukannya HLL. Sebab kod HLL adalah kompleks dan pernyataan kod program dalam HLL biasanya diwakili oleh beberapa arahan asm, malah bleh gak sampai beratus-ratus. Tanpa sebarang maklumat yang membolehkan bahasa mesin ditukarkan semula ke HLL, terjemahan ni memang mustahil laa. Kesimpulannya kat sini kita kena kenali asm dengan lebih rapat lagi laa.. yang aku akan citer kat bahagian seterusnya.

bersambung.....

ASSALAMUALAIKUM...WALAUPUN AKU BARU JOIN SINI TAPI AKU MASIH NAK UCAPKAN TAKZIAH DAH AKU DENGAN IKHLAS HATI MENDERMAKAN AL FATIHAH KEPADA BELIAU, WALAUPUN TAK TAHU NAMA BETUL DIA, TAPI NIAT KAN AL FATIHAH KEPADANYA...ALLAH MAHA MENGETAHUI HAMBANYA.....

AL FATIHAH....

Share this post


Link to post
Share on other sites

aku guna ollydbg.. tapi aku try open virus autoit punya file.. tapi aku tak paham apa yang aku nampak.. macam mana software ni berguna kepada para "reverse eng"-ian ?

Share this post


Link to post
Share on other sites

aku guna ollydbg.. tapi aku try open virus autoit punya file.. tapi aku tak paham apa yang aku nampak.. macam mana software ni berguna kepada para "reverse eng"-ian ?

OllyDbg adalah debugger, satu tool yang biasa digunakan oleh pengaturcara untuk membantu mencari bug dalam program mereka. Bila awak buka satu fail executable dalam OllyDbg, awak akan nampak kod assembly, lower level language yang disebutkan di atas. Awak kena faham mengenai pengaturcaraan dan asm lah kalau nak gunakan tool sebegini. Ia berguna kepada reverser sebab basically kod asm yang kita nampak adalah kod program tu dan hanya dengan menganalisis kod ni, reverser akan dapat memahami aliran kod program tersebut, apa yang dilakukannya dan ini akan banyak membantu mereka untuk recover semula kod program tersebut.

Share this post


Link to post
Share on other sites

eemm.. aku korek msg lama2 dlm inbox aku, jumpa msg arwah AncientOne send ke aku.. msg 3-4 tahun lepas.. harap dapat memberi manfaat..

kalau hang nak start belajar programming dari mula.. aku cuma suggest satu - belajar assembly language (asm) dulu. asm ni language level paling rendah yang manusia bleh faham. Contohnya kalau kiter nak tambah 2 nilai, kiter buat

add eax, ebx

basically kalau hang tulis kod dengan asm, formatnya lebih kurang cam di atas laa.. tapi tu bergantung kepada jenis architecture processor yang kiter guna. Lain processor lain laa asm nyer (lain plak halnya ngan high level language cam C/C++ - die nyer bahasa tak spesifik kepada processor, maknanya satu kod bleh kompil kat maner2 architecture). Hang pun tau, dua jenis komputer peribadi yang orang biasa guner, kalau tak PC, dier guna mac. PC sekarang, dia nyer kepala otak (processor) yang popular 2 jer - dari Intel atau AMD. Sejarah PC ni hang kena carik sendiri laa - citer pasal 2 company IBM ngan Intel. Processor PC kiter nenek moyangnya berasal dari Intel nyer 8086 (nombor tuh nama processor tu laa). Kemudian ader lagi, 8088, 80286 dan sebagainya. Tapi first 32-bit processor yang kiter semer amik kesah adalah 80386. Semer processor lepas 80386 - 80486, pentium, p2, p3 ngan p4 semer pun asal dari 80386. Kalau hang tak tau aper2 pasal ni, hang kena cari tutorial laa. Problem bagi orang baru adalah - benda ni actually banyak nama. 80386 orang biasa sebut 386 jer. Kadang2 hang akan jumpe "80x86" - merujuk kepada family 80386 laa tu, termasuk sekali ngan pentium. Orang biasa tulis pendek x86 jer. Lain tempat plak hang akan jumpa IA-32 (maknanya Intel Architecture 32-bit). Kalau hang jumpe nama2 canggih cam Katmai ke, Merced ke, Tualatin ker tu diaorang refer codename dier laa tuh (contohnya Katmai ngan Tualatin tu refer specific nyer Pentium III). Ader lagi, kalau hang jumpe cam P5 ker P6 ker tu dia refer melalui generasi laa tu. Aku cuma taknak hang confuse kalau tengah cari tutorial2 camni kat internet.

orang tak suka atau tak tau pasal asm sebab diaorang nyer keperluan lain. contohnya orang yang nak keje web designer takkan nak blajar pasal asm kot??? diaorang belajar asp/php/html/dhtml/scripting semer tuh. Aku belajar just untuk pengetahuan (actually aku ader sebab lain :)). hang kena belajar benda2 nih ikut keperluan hang laa.. kalau hang nak reason naper aku belajar asm.. sebabnya pasal game :).. dulu aku suker main game, terutamanya rpg cam Lufia (snes), Chrono Trigger, Final Fantasy etc.. Tapi biler aku belajar asm, aku dapati ader benda menarik yang kiter bleh buat ngan pengetahuan ni - advanced cheating dalam game. aku tau ader tools yang kiter bleh guna. tapi tu tak cukup. aku nak tau camne nak buat satu :). so.. dalam proses tu aku bukan setakat belajar asm jer :). sekarang aku dah tak minat main game, sebab biler main jer aku mesti gatal tangan nak buat trainer (dah dekat 4 taun dah). dari sini aku start cracking program. Dalam tempoh ni laa aku "terpaksa" belajar banyak perkara - termasuklah C/C++, Delphi, Java, Visual Basic, dan macam2 lagi laaa (hang takleh bayangkan nyer laa :)), dan yang paling latest - .NET. Tu baru masuk bahasa pengaturcaraan, belum lagi matematik, cryptography, windows nyer drivers, bios, dan aper2 laaaa.. Pendek kata, kalau hang nak citer aper2 pasal ni ngan aku, sehari memang tak cukup laaa.. Tapi pengetahuan aku tak laa details sangat. Aku cuma ader pengetahuan details pasal asm ngan C jer. Tapi "general knowledge" yang aku ader akan buat orang ingat aku expert. Tapi pengetahuan umum ni pun dah cukup untuk mencapai matlamat aku.

Tak semestinya hang kena belajar satu benda dalam satu masa. Zaman sekarang ni kiter kena ikut cam OS - multitasking. Hang bleh belajar asm ngan aper2 high level language yang hang suke (aku rekemen - C/C++, Visual Basic ngan .NET...errr.. .NET ni bukan programming language yer, tu cuma sebahagian kecil dari keseluruhan infrastruktur yang disediakan dalam .NET). Hang kena gak belajar hang nyer OS architecture. Kalau hang guna aper2 gnu-based OS cam linux ker, ok kot.. banyak free+legal e-books. Kalau Windows payah sikit laaa. E-books ader - free tapi illegal .

Edited by ApoNie

Share this post


Link to post
Share on other sites

kalau ader lebih 10 orang nak, InsyaAllah saya boleh sambung.. tapi saya lebih kepada praktikal la.. kalau ader members kat sini yang boleh buat sample app sebagai bahan eksperimen then kita boleh mula dari sana..

Share this post


Link to post
Share on other sites

kalau ader lebih 10 orang nak, InsyaAllah saya boleh sambung.. tapi saya lebih kepada praktikal la.. kalau ader members kat sini yang boleh buat sample app sebagai bahan eksperimen then kita boleh mula dari sana..

Sambung je la.. Tentu semua orang appreciate.. kalau nak 10 orang gak, aku nih dah kire sorang.. carik lagi 9 orang..

Share this post


Link to post
Share on other sites

Sambung je la.. Tentu semua orang appreciate.. kalau nak 10 orang gak, aku nih dah kire sorang.. carik lagi 9 orang..

aku nak join gak

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...