# [109-1] Reverse Engineering 1 ###### tags: `109-1 共筆` :::info - 課堂相關資料:https://security.ntu.st/ - 直播:https://youtu.be/sGEZxiUyxi4 - 共筆:https://hackmd.io/@NTUST-Hack/B1GzUw5qD - Slide:https://security.ntu.st/2018-rev.pdf ::: ## 什麼是逆向工程 - 從產品還原出製造過程 - 從執行檔還原出原始碼 ## 記憶體與數值 - 位址(address): 記憶體中每個byte的編號 - x86使用 little-endian 編碼儲存數值 - 0x0123456789ABCDEF - 存為 EF CD AB 89 67 45 23 01 - 每一個變數都會被分配到一個位址上 - 位址就是第一個byte的位址 ## 暫存器 - `RAX`, `RBX`, `RCX`, `RDX`, `RDI`, `RSI`, `R8`, `R9`…, `R15` - 每一個都可以存 8 bytes 的整數資料 - 只取部分資料 - E\**: 4 byte - \**: 2 byte - \*H、\*L: 1 byte,分別是 2 bytes 的左右兩個 byte ## 組合語言 * 組譯以後變成機械碼,可以給機械執行 > stack > 先進後出,先進去的東西後出來 > 例如:疊盤子 > vs queue > 先進先出,先進去的東西先出來 > 例如:排隊 ### 常用指令 * 如果會做運算,並且改變結果,通常都會把結果存在左邊的參數 | 指令 | 用途 | | --------------- | ----------------------------------------------------------------------------- | | push | 將值放進stack | | pop | 將最後進的值移出,並將儲存的值存進 register | | add, sub | 左值 = 左值 +/- 右值 | | call | call 函式 | | lea | load effect address,將右位址給左值 | | mov | 將右值給左值 | | qword ptr [rax] | 存取rax內的值指到的記憶體位址(qword可以改成dword/word,rax可以改成其他暫存器) | | je/jne | | | jg/jl | | | | |
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up