Tuesday, October 29, 2013

Tutorial Auto Assembly [A.S.M]

------------------------------
Daftar Isi
------------------------------

I. Pendahuluan
II . register
II.a 32 Bit Register
II.B 16 Bit Register
III . perintah
III.a JMP
IIIB MOV
IIIC Dorong / Pop + Stack The
III.D alokasi / label / registersymbol
IIIE Panggilan dan Ret
III.f Lainnya
IV . Array Bytes
V. Kesimpulan
VI . Kredit / Ucapan Terima Kasih

BONUS : Menulis Script a

------------------------------
I. Pendahuluan
------------------------------
' Ello ada , saya menganggap salah satu dari dua hal karena Anda membaca ini .

1 ) Anda mencoba untuk belajar Auto Assembler ( saya tidak akan menghubungi Anda noob , karena semua orang harus memulai suatu tempat , kan? = ) )

atau

2 ) Anda ingin menguji pengetahuan Assembler Auto Anda ( ke mana) .

Sekarang , jika yang pertama dari dua yang benar , kemudian mengambil setiap bagian perlahan-lahan , dan pastikan Anda memahami bagian sebelum terjadi ke depan .

Gelap Byte menulis :

Kebanyakan orang berpikir bahwa AA sulit , namun pada kenyataannya , itu benar-benar sangat mudah .


Kata-kata dari pencipta Cheat sendiri .

Jika kedua dari dua benar , maka saya tidak benar-benar memiliki saran untuk Anda , namun saya memiliki nikmat untuk bertanya. Jika Anda menemukan sesuatu yang salah , atau samar , atau sesuatu yang Anda pikir saya bisa mengulang lebih baik, PLEASE TELL ME . Saya sitll dalam proses pembelajaran sendiri! Tapi tunggu , bahkan tidak bertanya, aku bisa membaca pikiran Anda ...

Anda menulis :

Mengapa saya harus mendengarkan ( atau dalam hal ini , baca ) ke / dari seseorang yang masih belajar ?


Yah , aku akan memberitahu Anda , teman baikku . Meskipun saya masih belajar , saya tahu tentang Auto Assembler , dan saya hanya berpikir itu akan menyenangkan untuk berbagi pengetahuan yang saya miliki dengan Anda . = )

Edit: ini ditulis lama , tapi aku sudah belajar banyak , dan saya sudah diperiksa ulang itu .

Sekarang , kita berangkat ... ke dunia menakjubkan dari komputer .....

------------------------------
II . register
------------------------------

Sekarang Anda mungkin telah melihat ini sebelumnya dalam script , karena mereka sangat umum digunakan . Ada dua jenis Register digunakan , dan saya akan menjelaskan kedua dalam panduan ini .

---------------
II.a 32 Bit
---------------

Pertama-tama , saya akan menjelaskan bagaimana masing-masing register mendapat namanya , untuk mungkin membantu Anda mengingat yang mana. Pertama-tama , E di depan ( jika Anda perhatikan di bawah ini , semua register 32 Bit memiliki E di depan ) memberitahu Anda bahwa register adalah Bit Register 32 . A , B , C , dan D , harus menjadi jelas setelah membaca deskripsi. Sebagai should SI , DI , BP , SP , dan IP . X setelah EAX , EBX , ECX , dan EDX , hanya ada untuk menunjukkan bahwa ada surat lagi untuk menempatkan , agak seperti perintah NOP (yang Anda akan membaca tentang nanti ) . Jika Anda perhatikan, ada tiga huruf di setiap Register 32 Bit .

EAX : The Acculmulator mendaftar . Hal ini juga dapat digunakan sebagai penyimpanan.
EBX : Sekali waktu , itu base register , tapi sekarang itu hanya penyimpanan gratis .
ECX : Register Menghitung . Sekali lagi , juga dapat digunakan sebagai penyimpanan .
EDX : Register Data. Seperti tiga terakhir , dapat digunakan sebagai storage .
ESI : Sumber mendaftar Index . Hal ini digunakan sebagai variabel pointer dalam string , tetapi Anda tidak perlu khawatir tentang bagian itu sekarang . Bisa digunakan untuk penyimpanan .
EDI : The Destiny mendaftar Index . Sekali lagi , dapat digunakan sebagai penyimpanan, dan merupakan variabel pointer dalam string , tapi jangan khawatir tentang hal itu .
EBP : The Base Pointer mendaftar . Ini sementara menyimpan ESP , tetapi juga dapat digunakan sebagai penyimpanan umum .
ESP : Sumber Pointer mendaftar. Menunjuk ke register dan alamat pada stack ( lebih pada nanti ) .
EIP : The Pointer Instruksi mendaftar . Menggunakan salah dapat menyebabkan kecelakaan dalam program apapun Anda mencoba main-main dengan .

---------------
II.B 16 Bit
---------------

16 Register Bit sangat mirip dengan register 32 Bit , menyimpan beberapa hal. Salah satu hal adalah bahwa , bukannya tiga huruf, register 32 Bit miliki, mereka memiliki dua huruf . Ada juga beberapa register Bit lebih 16 dari 32 register Bit , tapi jangan khawatir tentang mereka . 16 register Bit mungkin tidak akan digunakan dalam tujuan umum kami tetap.

AX : See EAX
BX : See EBX
CX : See ECX
DX : See EDX
SI : Lihat ESI
DI : Lihat EDI
BP : Lihat EBP
SP : See ESP
IP : Lihat EIP

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

Dan itu cukup banyak di register . Jika Anda ingin mempelajari lebih lanjut tentang register , maka hanya pergi Google itu. Bagi kebanyakan peserta didik , namun, ini harus cukup.

------------------------------
III . perintah
------------------------------

Sekarang, apa bahasa tanpa fungsi atau perintah ? Membandingkan ini ke Bahasa Inggris , perintah seperti kata, dan opcode seperti kalimat . Bagi mereka yang tidak tahu , opcode adalah sesuatu yang sederhana , seperti:


Code:
jMP 00123EAA


Ada beberapa hal yang harus Anda tahu tentang Opcodes .

Pertama , selalu ada alamat dan / atau register terlibat dalam opcode , serta perintah yang jelas . Sebuah alamat dalam Hex , yang merupakan kependekan Heksadesimal . Heksadesimal adalah sistem penomoran dengan basis 16 . Ini seperti sistem penomoran Desimal , yang memiliki basis sepuluh .

Pikirkan tentang cara ini . Sistem penomoran normal kami adalah desimal , yang , seperti yang saya katakan di atas , adalah basis 10 . Ini berarti bahwa kita tidak dapat memiliki " 10 " dalam satu kolom , melainkan ditempatkan dalam dua . Dalam Heksadesimal , Anda BISA memiliki 10 dalam satu kolom - Anda dapat memiliki semua jalan sampai dengan 15 dalam satu kolom . Tapi Anda mungkin bertanya-tanya tentang fakta bahwa 1 dan 0 tidak muat dalam satu kolom masih .

Tenang , meskipun. Dalam heksadesimal , desimal 10 digantikan oleh A, desimal 11 digantikan oleh B , dan sebagainya hingga F , yang merupakan singkatan dari 16 . Setelah itu , menjadi 10 , kemudian 11 , sampai 1F , dan kemudian itu mulai berakhir pada 20 , dan sebagainya. Sebuah cara untuk menerjemahkan antara kedua , adalah dengan mengklik " Start" di pojok kiri bawah layar Anda , kemudian klik " Run " tombol , dan ketik " calc " . Selanjutnya, klik pada tampilan , dan klik pada " Ilmiah " , sehingga kalkulator Anda hampir dua kali lipat dalam ukuran , dengan banyak fungsi baru ( kecuali tentu saja , itu sudah di " Ilmiah " mode ) . Selanjutnya, klik pada sistem penomoran yang nomor asli Anda masuk misalnya Klik pada " Hex " jika Anda ingin menempatkan 6AF0 ke Decimal . Selanjutnya , ketik nomor Anda , dan kemudian klik pada sistem yang Anda ingin menerjemahkan ke. Voila , Anda memiliki nomor Anda diterjemahkan !

Selain itu, setiap alamat memiliki opcode dan jumlah byte . Jumlah byte sesuai dengan apa opcode adalah, karena setiap perintah mengambil sejumlah byte. Saya tahu berapa banyak byte beberapa fungsi yang sangat umum mengambil , tetapi jika Anda ingin tahu jumlah byte yang setiap perintah mengambil , Anda akan harus bergantung pada orang lain ... disukai Google ! = )

Terakhir, sesuatu yang sangat berguna adalah " komentar " sesuatu. Untuk komentar , semua yang Anda lakukan adalah meletakkan " / / " setelah perintah , atau ruang , dan kemudian ketik apa yang Anda inginkan. Jika Anda tidak mengetik " / / " setelah perintah atau ruang , maka komputer akan berpikir bahwa Anda sedang mengetik perintah .

Sekarang, pada apa yang setiap perintah ...

---------------
III.a JMP
---------------

Perintah JMP adalah salah satu perintah yang paling sering digunakan ( sekitar yang biasa seperti perintah MOV , yang akan kita sampai ke berikutnya) . Namun , Anda tidak melihat " JMP " hampir sebanyak yang Anda lihat " MOV " di opcodes dan skrip , karena ada banyak variasi perintah JMP . Ada terlalu banyak untuk daftar , namun ada juga yang tercantum di bawah ini .

JMP : Selalu melompat ke
JE / JZ : Langsung ke jika sama
JNE / JNZ : Langsung ke jika tidak sama
JA : Langsung ke atas jika
JG : Langsung ke jika Besar
JNA : Langsung ke atas jika tidak
JNG : Langsung ke jika tidak lebih besar
JB : Langsung ke bawah jika
JL : Langsung ke jika Bawah
JNB : Langsung ke bawah jika tidak
JNL : Navigasi jika tidak lebih rendah
JAE : Langsung ke atas atau jika Equal
JGE : Langsung ke jika lebih besar atau sama
JNAE : Langsung ke jika tidak atas atau sama (yakni JB )
JNGE : Langsung ke jika tidak lebih besar dari atau sama ( yaitu JL )

Dan Anda mendapatkan gambar . Sekarang ini harus tampak membingungkan . " Langsung ke jika lebih besar " , atau JG adalah salah satu Jumps Bersyarat . Sebuah lompatan bersyarat adalah seperti namanya , ia melompat ketika kondisi tertentu terpenuhi . Biasanya , ada " CMP " atau membandingkan fungsi di atas itu - lebih pada nanti . Itu cukup banyak itu untuk JMP . Aktif untuk ...

---------------
IIIB MOV
---------------

Sekarang , seperti yang Anda baca di atas , perintah MOV adalah salah satu perintah yang paling banyak digunakan , karena merupakan salah satu yang paling serbaguna . Contoh dari MOV bawah .


Code:
mov eax , ebx


Apa ini berarti adalah " memindahkan alamat yang disimpan di ebx ke eax " . Perhatikan bahwa ada koma yang memisahkan dua register , tapi tidak ada ruang . Ini mungkin tampak agak membingungkan pada awalnya , tapi itu benar-benar sederhana . Berikut adalah penjelasan yang lebih baik .

" MOV " singkatan dari " bergerak" . Sebuah register dengan sendirinya berarti " alamat yang tersimpan dalam register yang " . Jadi pada dasarnya, " Pindahkan , alamat disimpan dalam ebx , ke alamat eax " , yang akan menimpa apa pun yang ada di eax sebelumnya, dan benar-benar menghapus keberadaannya . = D Apa yang Anda bisa menghubungkan ini dengan adalah menyalin apa yang ada di ebx , dan paste ke eax .

Bentuk lain dari mov bawah .


Code:
mov eax , [ ebx ]


Ini berarti " memindahkan NILAI dari ebx ke alamat yang disimpan dalam eax " . Sederhananya , memiliki [ kurung ] sekitar register atau alamat berarti nilai apa yang ada dalam register atau alamat .

Namun, sesuatu yang tidak akan bekerja di bawah .


Code:
mov [ eax ] , [ ebx ]


TIDAK AKAN BEKERJA . REPEAT : KODE DIATAS TIDAK AKAN BEKERJA . Anda tidak bisa, ulangi TIDAK BISA memindahkan nilai dari satu hal ke hal lain nilai . Tapi jangan mengambil jalan yang salah - Anda dapat memindahkan nilai satu hal langsung ke hal lain . Wink Lihat kode di bawah ini .

Code:
mendorong eax / / Tekan eax ke stack - kami mencakup hal ini kemudian
mov eax , [ 0100200A ] / / Pindahkan nilai 0100200A ke eax
mov [ ebx ] , eax / / Pindah eax ( yang merupakan nilai 0100200A ) ke dalam nilai ebx
pop eax / / Pop eax dari stack - sekali lagi , kita akan membahas ini nanti


Saya percaya bahwa untuk mencakup fungsi MOV . Ke ...

---------------
Dorong IIIC dan Pop + Stack The
---------------

Anda melihat di atas bagaimana saya menggunakan Push Pop dan perintah . Tapi tunggu, aku psikis ... Aku bisa membaca pikiran Anda!

Anda menulis :

Apa push dan pop lakukan? Dan apa stack ?


Ok, well seperti yang Anda lihat di atas , setelah " push " , saya berkomentar :


Code:
 / / Push eax ke stack


Hal ini pada dasarnya hanya menempatkan eax ke stack . The Pop eax dasarnya mengambil eax dari stack . Sebuah penjelasan yang sangat , sangat baik tumpukan ditulis oleh Skyone , dari CEF , dan aku tidak bisa hidup dengan diriku sendiri jika saya tidak memungkinkan Anda senang belajar tentang hal itu seperti yang saya lakukan . Wink

Skyone menulis:

Stack yang digunakan untuk memberikan variabel nilai kosong , dan menggunakannya untuk penyimpanan . Ini tentang hal seperti ini : Anda memiliki selembar kertas yang Anda melakukan pekerjaan rumah Anda , tapi kemudian teman Anda memanggil Anda untuk memberitahu Anda bahwa Anda perlu menelepon Phil , di mana nomornya adalah 555-6405 . Anda panik , dengan apa-apa lagi untuk menulis , Anda menulis pada lembar pekerjaan rumah Anda . Setelah Anda menutup telepon dari berbicara dengan teman Anda , kini Anda punya waktu untuk mencari buku telepon Anda sehingga Anda dapat menuliskan nomor Phil . Setelah menulis nomor Phil dalam buku telepon , Anda menghapusnya dari pekerjaan rumah Anda , panggilan Phil , dan melanjutkan dengan pekerjaan rumah .

Untuk mendorong nilai ke stack adalah untuk " menuliskan nomor Phil pada pekerjaan rumah . " Untuk pop itu adalah untuk " mentransfer nomor tersebut ke buku telepon , kemudian menghapusnya dari pekerjaan rumah . "


Selanjutnya ...

---------------
III.D Alloc / Label / RegisterSymbol
---------------

Saya ingin mengklasifikasikan script Assembler Auto dua cara .

1) perubahan sederhana dari sebuah alamat

Ini hanya sesuatu seperti kode di bawah .


Code:
[ memungkinkan ]
00ABC123 :
mov eax , ebx
[ menonaktifkan ]
00ABC123 :
mov ebx , eax


Semua itu benar-benar lakukan adalah mengubah opcode dari 00ABC123 alamat .

Tapi kemudian ada script yang sangat rumit , sangat mirip dengan script untuk dadu atau pID00 . ( Saya tidak akan menempatkan satu di sini , karena tidak benar-benar diperlukan untuk belajar Anda .

Dalam script yang sangat rumit , di bagian atas Anda akan melihat hal-hal ( perhatikan bagaimana saya tidak menggunakan biasanya - dalam naskah yang rumit akan ada fungsi " alokasi " , " label " , dan kadang-kadang " registersymbol " .

`` `` `` `` `` ``
label
`` `` `` `` `` ``

Saya percaya " label " fungsi adalah yang paling penting dari tiga . Apa yang dilakukannya adalah memungkinkan variabel yang Anda " label " untuk digunakan dalam naskah Anda , seperti di bawah ini .


Code:
label ( Lanjutkan )

AutoAssembler :
mov eax , 02
cmp eax , 03
JNE Lanjutkan
je SayWhat

Lanjutkan :
/ / ...
/ / ...

SayWhat :
JMP 0 / / insta -crash ! = D


Ada beberapa hal yang perlu diperhatikan dalam script ini . Pertama , script ini hilang " alokasi " fungsi , yang saya akan masuk ke setelah yang satu ini .

Selanjutnya, jika Anda mengerti mengapa saya memilih label yang sesuai dengan " jne " , maka Anda lakukan dengan baik .

Perhatikan bahwa saya menggunakan semua label yang didefinisikan dalam naskah saya , jika tidak maka tidak akan mengkompilasi .

`` `` `` `` `` ``
alokasi
`` `` `` `` `` ``

Sekarang, " alokasi " fungsi . Apa yang dilakukan adalah mengalokasikan (maka , alokasi , mengalokasikan ) X jumlah memori ke tujuan Anda . Sekarang , memori ini tidak sembarang memori lama , ini adalah memori yang tidak terpakai yang dapat menimpa tanpa berlari ke dalam masalah . Sekarang , seperti yang saya katakan , itu mengalokasikan X jumlah memori . X adalah variabel yang merupakan sejumlah byte. 1024 byte , atau satu kb ( kilobyte ) biasanya cukup untuk apa yang Anda coba capai . Sekarang kita tahu tentang fungsi alokasi , biarkan saya menunjukkan kepada Anda bagaimana untuk menggunakannya - dan untuk saat ini , mari kita hanya membangun di atas apa yang kita miliki sejauh ini.


Code:
alokasi ( AutoAssembler , 1024 )
alokasi ( SayWhat , 1024 )
label ( Lanjutkan )

AutoAssembler :
mov eax , 02
cmp eax , 03
JNE Lanjutkan
je SayWhat

Lanjutkan :
/ / ...

SayWhat :
jMP 0


Perhatikan bagaimana saya tidak melakukan


Code:
label ( AutoAssembler )


atau

Code:
label ( SayWhat )


karena mereka sudah didefinisikan dalam cheat Engine " kamus , " seperti yang kita akan menyebutnya .

`` `` `` `` `` ``
RegisterSymbol
`` `` `` `` `` ``

Terakhir, fungsi " registersymbol " . Apa yang dilakukan , adalah memungkinkan Anda untuk menambahkan simbol yang Anda mendaftar untuk Tabel Cheat . Catatan , Anda masih harus mengalokasikan memori untuk itu . Mari kita coba ini dalam script kita .


Code:
alokasi ( AutoAssembler , 1024 )
alokasi ( SayWhat , 1024 )
alokasi ( WooHoo , 1024 )
label ( Lanjutkan )
registersymbol ( WooHoo )

AutoAssembler :
mov eax , 02
cmp eax , 03
JNE Lanjutkan
je SayWhat

Lanjutkan :
cmp eax , [ WooHoo ]

SayWhat :
jMP 0



`` `` `` `` `` ``
mitra

`` `` `` `` `` ``

Sekarang , bagian terakhir dari mini - bagian : rekan-rekan .

Ada dua hal yang dapat Anda lakukan dengan script Assembler Auto . Pertama , Anda dapat menyuntikkan sesuatu . Kedua, Anda dapat menambahkannya ke Tabel Cheat . Jika Anda memutuskan bahwa Anda ingin menambahkannya ke meja Anda cheat ( yang adalah bagaimana kebanyakan skrip saat ini ) , maka Anda perlu mengaktifkan dan menonaktifkan bagian kode Anda , seperti di bawah ini .


Code:
[ AKTIF ]
alokasi ( AutoAssembler , 1024 )
alokasi ( SayWhat , 1024 )
alokasi ( WooHoo , 1024 )
label ( Lanjutkan )
registersymbol ( WooHoo )

AutoAssembler :
mov eax , 02
cmp eax , 03
JNE Lanjutkan
je SayWhat

Lanjutkan :
cmp eax , [ WooHoo ]
[ DISABLE ]


Sekarang , seperti yang Anda perhatikan , tidak ada dalam Nonaktifkan bagian - tapi tidak lama ! Wink

Apa yang ingin Anda capai dalam DISABLE bagian kode Anda , adalah untuk membatalkan apa pun yang Anda lakukan di bagian ENABLE .

Bagaimana Anda melakukan ini adalah untuk membatalkan mengalokasikan , dan mendaftarkan simbol. Sekarang , saya merasa pertanyaan datang ...

Anda menulis :

Bagaimana Anda melakukannya ?


Sederhana, teman saya . Melalui dealloc , dan fungsi simbol unregister ! Oh, tunggu, pertanyaan lain ,

" Bagaimana dengan label ? " Anda bertanya ?

Nah , tidak ada yang membatalkan label . = ) Itu berarti bahwa n bagian DISABLE , Anda drop hampir setengah dari kode dari bagian awal ! = )

Jadi kenapa tidak kita tambahkan apa yang telah kita pelajari untuk script ?


Code:
[ AKTIF ]
alokasi ( AutoAssembler , 1024 )
alokasi ( SayWhat , 1024 )
alokasi ( WooHoo , 1024 )
label ( Lanjutkan )
registersymbol ( WooHoo )

AutoAssembler :
mov eax , 02
cmp eax , 03
JNE Lanjutkan
je SayWhat

Lanjutkan :
cmp eax , [ WooHoo ]
[ DISABLE ]
dealloc ( AutoAssembler )
dealloc ( SayWhat )
dealloc ( WooHoo )
unregistersymbol ( WooHoo )


Oh hey there ... pertanyaan lain .

Anda menulis :

Kenapa kau tidak menempatkan " 1024 " ?


Nah karena komputer tahu bahwa Anda dialokasikan 1024 byte untuk AutoAssembler ( mari kita hanya menggunakan ini sebagai contoh ) , Anda hanya perlu dealloc AutoAssembler , dan ia tahu untuk deallocate seluruh 1024 byte yang dialokasikan untuk AutoAssembler . ( Maaf jika ini adalah agak samar-samar )

---------------
IIIE Panggilan dan Ret
---------------

Fungsi Panggilan ini sangat mirip dengan fungsi JMP . Satu-satunya perbedaan adalah bahwa ia memiliki mitra untuk kembali ke tempat itu sebelumnya. Sebuah script sederhana memanfaatkan kedua fungsi di bawah .


Code:
mov [ 0100579C ] , 10 / / 10 Pindah ke nilai alamat
CMP [ 0100579C ] , 0 / / Bandingkan dengan 0
sebut NameGoesHere / / Panggil, atau JMP untuk NameGoesHere
jMP 01002FF5
                     
NameGoesHere :
Desember [ 0100579C ] / / Penurunan nilai dari alamat
CMP [ 0100579C ] , 0 / / Bandingkan dengan Nol
JNE NameGoesHere / / Jika tidak sama , melompat kembali ke awal
                         / / NameGoesHere , selain terus
ret / / Kembali ke kode sebelumnya , tepat setelah fungsi panggilan


---------------
III.f Lainnya
---------------

Sekarang, jelas , ada banyak , banyak fungsi lainnya dalam Auto Assembler , atau yang lain itu akan menjadi bahasa sangat terbatas .

Aku akan pergi ke depan dan menentukan sebanyak yang saya bisa. ( Oh boy ... )

`` `` `
nop
`` `` `
Nop : Saya sebutkan ini sebelumnya . Ini berarti "No Operation " , dan pada dasarnya membatalkan apa yang ada sebelumnya.

`` `` `
Inc / Desember
`` `` `

Inc : Tingkatkan per satu . Hal ini meningkatkan nilai dari register atau alamat per satu . Digunakan sebagai berikut .


Code:
inc eax


Desember : Penurunan per satu . Hampir sama dengan Inc

`` `` `
Add / Sub
`` `` `

Tambahkan : Penambahan . Digunakan sebagai script di bawah ini .


Code:
add eax , 02 / / Tambahkan 2 ke eax , dan menyimpan hasilnya dalam eax


Sub : Pengurangan . Digunakan seperti menambahkan .

`` `` `
ladang
`` `` `
Ini sedikit membingungkan , tapi here goes . Lihatlah script di bawah ini .


Code:
mov eax , 00123ABC
lea ebx , [ eax + DEF ]


Jika Anda tidak tahu , [ eax + DEF ] adalah pointer . LEA mengambil alamat yang sedang menunjuk berdasarkan [ eax + DEF ] dan menempatkannya ( alamat yang menunjuk ) ke ebx .

`` `` `
Dan / Atau / XOR
`` `` `
Ok , saya tidak memiliki petunjuk sedikit pun apa " XOR " berarti dalam bahasa Inggris - banyak situs mengatakan sesuatu di sepanjang baris ...

Mereka menulis :

Saya berasumsi bahwa Anda memahami bagaimana logis operator berperilaku .


Jika seseorang bisa menentukan XOR dalam bahasa Inggris bagi saya , saya akan sangat berhutang . Namun, saya tidak perlu membantu menjelaskan bagaimana mereka bekerja dalam Majelis . Wink

Pertama , mereka semua memiliki sintaks yang sama seperti add, dan sub perintah - seperti di bawah ini .


Code:
dan eax , ebx


Di mana eax ebx dan bisa apa saja . Tapi tidak, itu tidak bisa menjadi " ibuku " . - - . ;

Kembali ke script . Untuk memproses ini , (ya saya tahu kita tidak komputer ... ) kita harus terlebih dahulu memberikan dua nilai register . Bagaimana kalau kita beri eax nilai 12 , dan ebx nilai 27 . Selanjutnya, kita mengubahnya ke biner - satu dan nol bahasa itu . = O Apakah itu pertanyaan?

Anda menulis :

Tapi aku cara mengubahnya dari desimal ke biner ?


Sederhana teman saya , hanya beban Anda baik ol 'teman kalkulator , pilih desimal dan ketik nomor Anda , kemudian klik biner ! Sesuatu untuk catatan , kalkulator tidak memungkinkan Anda untuk menempatkan desimal , itu hanya putaran kemudian berubah ke biner .

Saya datang dengan :


Code:
EAX = 1100
     &
EBX = 11011


Ok , sekarang Anda ingat kembali di sekolah dasar ketika kita berbaris nomor kita untuk melakukan aritmatika ? Nah mari kita melakukannya di sini .


Code:
dan eax , ebx

EAX = 1100
EBX = 11011
------------


Sekarang, DAN instruksi akan memberikan 1 jika kedua angka adalah 1, jika tidak maka akan memberikan nol . Jadi mari kita check it out di masalah ini .


Code:
dan eax , ebx

EAX = 01100 ( ditambah nol hanya untuk memudahkan )
EBX = 11011
-----------
      01000


Dan sekarang kita mengubah 01000 ke desimal , dan kami mendapatkan 8 , yang disimpan ke dalam EAX .

Selanjutnya, fungsi OR . Mari kita gunakan skenario kami sama , hanya demi kemudahan .

Code:
atau eax , ebx

EAX = 01100
EBX = 11011
-----------


Sekarang , apa fungsi ATAU dilakukan adalah oppositte dari fungsi AND . Jika kedua angka adalah 0 , maka akan menghasilkan 0 , selain itu akan menghasilkan satu pun.

Code:
atau eax , ebx

EAX = 01100
EBX = 11011
------------
      11111


Kami mengubah 11111 ke desimal , dan kita mendapatkan 31 , yang disimpan ke dalam EAX .

Terakhir, fungsi XOR . Sekali lagi , mari kita gunakan skenario yang sama .


Code:
XOR eax , ebx

EAX = 01100
EBX = 11011
-----------


Ok, sekarang fungsi XOR akan kembali 0 jika kedua angka memiliki nilai yang sama , jika tidak maka akan kembali satu satu .


Code:
XOR eax , ebx

EAX = 01100
EBX = 11011
-----------
      10111


Kami menerjemahkan ke 23 , dan 23 disimpan dalam EAX . By the way , ketika menulis sebuah script / kode / whavever , Anda tidak perlu inclue EAX = blahblahblah , saya hanya menggunakannya untuk menunjukkan kepada Anda bagaimana hal itu bekerja .

`` `` `
Nah itu semua yang perlu Anda ketahui untuk perintah ! ( Man yang panjang ... ) Ke bagian berikutnya ...

------------------------------
IV . Array Bytes
------------------------------

Ok , gambar ini . Anda sudah mendapatkan naskah Anda dan alamat Anda dan Anda mulai hacking. Semua baik-baik . sampai ... OH NO ! PATCH A ! Tapi jangan khawatir . Sekarang Anda tidak perlu khawatir menunggu orang lain untuk memposting alamat baru!

Anda menulis :

Saya lakukan ? Saya tidak ingat melakukan hal itu ...


Anda tidak ? !

Oh , Anda tidak tahu bagaimana .

Baiklah , kalau begitu, aku akan memberitahu Anda , teman baik saya.

1 ) Mengisi Engine dan attatch ke permainan Anda hacking.

2 ) Klik "Add Alamat Manual" , yang berada di atas sisi kanan Tabel Cheat .

3 ) Klik pada kotak di samping apa yang dikatakan " Address" , dan ketik Alamat dari whos AOB yang Anda ingin mendapatkan .

4 ) Klik pada drop-down - panah di sebelah apa yang dikatakan " Type" dan pilih Array of Byte .

5 ) Ketik 8 sebagai nomor ( atau Nr . ) Byte .

6 ) Klik ok . = )

Ok , sekarang Anda memiliki Array Bytes untuk alamat Anda . Tapi bagaimana setelah patch ?

1 ) Mengisi Engine dan attatch ke permainan yang ingin Anda hack .

2 ) Sekitar atas area tengah Mesin harus menjadi bagian pemindaian . Klik pada - kotak turun dengan " Type Value" kemudian pilih Array Bytes .

3 ) Sekarang , jenis ( atau sisipkan jika Anda ingin , dari doccument Notepad ) , Array Bytes ke bagian Nilai .

4 ) Klik first scan , dan alamat harus pop up . Jika alamat tidak muncul , diperlukan beberapa byte ( dua huruf / angka segmen ) off akhir , dan kemudian mencari lagi.

Ok , Anda punya alamat ... sekarang apa yang Anda lakukan dengan itu ? Ambil script yang akan dikonversi - mari kita hanya menggunakan v.38 Maplestory Allah skrip Mode.

Code:
[ AKTIF ]
6803ec :
je 0068133e
[ DISABLE ]
6803ec :
JNE 0068133e


Jadi Anda memiliki alamat baru . Hapus " 6803EC " di Aktifkan dan Nonaktifkan bagian , dan kemudian paste alamat Anda . PASTIKAN BAHWA ANDA MENINGGALKAN COLON ( : ) SANA.

Nah , itu saja untuk Array of Bytes ...

------------------------------
V. Kesimpulan
------------------------------

... dan itu cukup banyak itu untuk Auto tutorial Assembler ! Hei tunggu , saya merasakan pertanyaan?

Anda menulis :

Apakah itu benar-benar mudah ? Itu saja ? Tidak ada lagi trik atau sesuatu seperti itu ?


Tidak, yang benar-benar itu ! Sekali lagi, saya akan mengutip pencipta Cheat Engine ...

" Kebanyakan orang berpikir bahwa ASM benar-benar sulit , namun pada kenyataannya , itu benar-benar cukup sederhana . " ~ Dark Byte sendiri

Namun, saya memiliki mini - tut setelah ini pada menulis naskah , jadi tinggal dicari, folks! Anda tidak perlu membaca " Menulis Script " tutorial , karena hanya Bonus , meskipun saya sangat merekomendasikan hal ini .

------------------------------
VI . Kredit / Ucapan Terima Kasih
------------------------------

Ada beberapa ucapan terima kasih saya ingin memberi, sebelum memberikan kredit .

Pertama , dan terpenting , Wizet , untuk membuat Maplestory yang saya dapatkan sehingga untuk hacking. ; )

Kedua , Dark Byte , untuk membuat dasar kami hacker hari ini, dan untuk menciptakan Tutorial untuk Cheat Engine . Hei, kita semua harus mulai di suatu tempat !

Ketiga , Sponge dan Labyrnth untuk membantu saya dengan script saya.

dan Keempat , pencipta semua panduan yang saya mendapat informasi saya dari .

Terima kasih !

`` `` `` `` ``
kredit
`` `` `` `` ``

Perhatikan , bahwa ini bukan dalam urutan apapun .

Tutorial Scrbly di CodeInjection dan AutoAssembler

Posting Idogear di Majelis Dasar

Tutorial TheSorc3r3r di Awal Majelis Bahasa

Tutorial Skyone di Majelis Dasar

Tutorial M3KillU pada Array Bytes

Posting Renkokuken di Register Set

Tutorial Vrunk pada Memory Dialokasikan

Panduan gelap Byte pada Assembler Dasar

Panduan gelap Byte pada fungsi registersymbol / unregistersymbol

Zhoul yang " Selalu ada lebih dari 1 cara untuk kulit kucing "

Gelap Byte ini " script assembler Auto dalam tabel curang "

------------------------------
Bonus . Menulis Script a
------------------------------

Jadi Anda telah membaca tutorial , dan Anda memahami sepenuhnya , tetapi Anda masih ingin lebih . Saya mengerti , karena saya merasa seperti itu sekali - sayangnya saya tidak percaya ada tutorial pada penulisan skrip ketika aku membutuhkan mereka .


Code:
[ AKTIF ]
alokasi ( AutoAssembler , 1024 )
alokasi ( SayWhat , 1024 )
alokasi ( WooHoo , 1024 )
label ( Lanjutkan )
registersymbol ( WooHoo )

AutoAssembler :
mov eax , 02
cmp eax , 03
JNE Lanjutkan
je SayWhat

Lanjutkan :
cmp eax , [ WooHoo ]

SayWhat :
jMP 0
[ DISABLE ]
dealloc ( AutoAssembler )
dealloc ( SayWhat )
dealloc ( WooHoo )
unregistersymbol ( WooHoo )


Ingat script ini dari sebelumnya? Nah mari kita mengubahnya menjadi naskah penuh, menggunakan banyak dari apa yang telah kita pelajari .



Code:
[ AKTIF ]
alokasi ( AutoAssembler , 1024 )
alokasi ( SayWhat , 1024 )
alokasi ( WooHoo , 1024 )
label ( Lanjutkan )
registersymbol ( WooHoo )

AutoAssembler :
mov eax , 02
cmp eax , 03
JNE Lanjutkan
je SayWhat

Lanjutkan :
cmp eax , [ WooHoo ]

SayWhat :
jMP 0

[ DISABLE ]
dealloc ( AutoAssembler )
dealloc ( SayWhat )
dealloc ( WooHoo )
unregistersymbol ( WooHoo )


Sesuatu yang Anda PERLU untuk naskah , adalah alamat di memori yang sebenarnya dari program yang Anda hacking. Namun, ini tidak bisa sembarang alamat acak , atau sesuatu yang bisa terjadi bahwa Anda tidak ingin terjadi ( kecelakaan , mungkin ) . Alamat ini harus terkait dengan penyebab Anda .

Tapi kenapa kita butuh alamat ? Yah seperti yang saya katakan sebelumnya , fungsi alokasi mengalokasikan MEMORY UNUSED , dalam program untuk fungsi Anda . Karena ini adalah UNUSED , program ini tidak apa-apa untuk mengakses ini, dan karena itu , Anda harus MAKE IT mengakses .

Ada beberapa hal yang penting ketika bermain-main dengan alamat . Pertama , Anda harus menggunakan ammount sama byte sebagai opcode asli yang digunakan . Bagaimana kita memberitahu jumlah byte opcode ? Sederhana. Lihatlah antara alamat dan opcode dan harus ada sekelompok segmen 2 huruf / nomor kombinasi . Hal ini disebut Array Bytes .

Sesuatu yang sangat membantu ketika memenuhi kebutuhan ini adalah fungsi " nop " . Seperti yang saya jelaskan sebelumnya , itu berarti " tidak ada operasi " . Semua hal ini adalah mengambil byte . Artinya, jika Anda tidak menggunakan semua byte , maka Anda dapat mengisi sisa byte dengan ' nop itu .

Ada 3 skenario yang dapat dialami saat mengisi byte. Saya sudah dijelaskan satu, di mana kode Anda lebih kecil dari kode asli . Lain dari dua skenario terakhir adalah ketika Anda memiliki persis ammount sama byte sebagai opcode asli, di mana semua baik-baik saja .

Tapi terakhir dari skenario agak sedikit membingungkan . Ini adalah skenario di mana kode Anda memiliki lebih banyak byte dari opcode asli . Sekarang , apa yang harus Anda lakukan memiliki menimpa opcode alamat BERIKUTNYA dengan kode Anda , dan lakukan seterusnya sampai Anda memiliki cukup byte.

Mengapa kita tidak bermain dengan Minesweeper ? Aku menulis kode sedikit sementara kembali ketika saya sedang belajar tentang menulis skrip ( aku masih , tapi itu ketika saya tahu kurang) .


Code:
[ memungkinkan ]
alokasi ( WhatNowMinesweeper , 256 ) / / Mengalokasikan ...
alokasi ( ChiliDog , 4 )
label ( ReturnHere )
registersymbol ( ChiliDog ) / / Pendaftaran ...

ChiliDog :
dd 0 / / Just FYI , ini mengatakan bahwa nilai ChiliDog yang dimulai pada 0

01002FF5 : / / Ini adalah alamat yang menulis ke waktu pada MineSweeper
WhatNowMinesweeper JMP / / Aku menulis ulang opcode untuk menceritakannya untuk jmp ke saya
                                         / / script
nop / / Aku mengisi byte terakhir
ReturnHere : / / Aku akan bercerita tentang ini nanti

WhatNowMinesweeper : / / kode saya yang sebenarnya
mendorong eax / / Simpan eax , kita bisa memiliki masalah jika kita tidak melakukan hal ini
mov eax , [ ChiliDog ] / / Pindahkan nilai ChiliDog ke eax
mov [ 0100579C ] , eax / / Pindah eax , yang merupakan nilai ChiliDog , ke dalam
                              / / waktu
pop eax / / Ambil eax keluar , karena kita sudah selesai mengedit itu
JMP ReturnHere / / Jmp ke ReturnHere , saya akan menjelaskan ini nanti

[ menonaktifkan ]
dealloc ( WhatNowMinesweeper ) / / Deallocate memori
dealloc ( ChiliDog )
unregistersymbol ( ChiliDog ) / / Unregister simbol

01002FF5 : / / Alamat yang kita dimodifikasi untuk jmp untuk kode saya
inc [ 0100579C ] / / asli opcode , untuk mencegah kecelakaan


Sekarang , hal pertama yang pertama . Saya katakan bahwa saya akan memberitahu Anda tentang " ReturnHere " hal, dan jadi aku akan . Asal tahu saja , program proses apa yang diperintahkan untuk dilakukan di satu opcode , kemudian pindah ke opcode berikutnya, dan seterusnya . Ini cukup banyak seperti siklus tidak pernah berakhir . Namun, jika kita membuat buntu , yaitu jika kode tidak memiliki tempat lain untuk pergi setelah kode , maka program kemungkinan besar akan crash. Oleh karena itu, kita mengalihkan itu kembali tepat setelah akhir dari alamat yang kita berubah , dan karena itu kode memiliki tempat untuk pergi - dan kita tidak crash ! = D

Dan itu cukup banyak itu pada menulis naskah . Silakan, jangan ragu untuk mengajukan pertanyaan, dan untuk mengomentari apakah Anda menyukainya atau tidak . = )




Sumber :

0 komentar:

Post a Comment