--- title: 資研社社課 week-3 type: slide .slide: data-transition-speed="slow" tags: - 社課簡報 --- # 資研社社課 week-3 #### 逆向工程 動態分析 --- ### 廣告時間 ---- ### 國雲網路 我們很多機器都是透過他們的vps架設的 ![image](https://ncse.tw/assets/img/logo.png) --- ### 免責聲明 :::info 社團活動當中所學習的工具、弱點、攻擊手法等僅供資安知識的學習,若在課程後想做相關練習,請在合法的CTF平台上進行測試,如對外有相關攻擊行為,皆與本人與實驗中學資訊研究社無關 ::: 不要去犯法喔>< --- ### 從0到0.1的Assembly ~~抱歉上一堂課沒有講~~ --- ### program structure ---- 全域/執行的東西 - Text:程式碼的部分。可讀,不可寫,可執行(r-x) - Data:已初始化的全域變數(for exam, 字串,數字等等的) - BSS:未初始化的全域變數 ---- 會一直變的東西 - Heap:由低位往高位疊的動態記憶體空間 - Stack:存放暫時資料(return adress、 區域變數、 參數、 回傳值),由高位往低位拉長,最低位(長到底的地方)會有rsp。 --- Registers ---- 必須有寄存器去紀錄執行當下的一些資訊 像是現在的位址/一些變數值等等的 有大有小,在不同的環境下也不同 ---- x64(32 bits) ![image](https://hackmd.io/_uploads/BkWGAV40T.png) ---- x64_86(64 bits) ![image](https://hackmd.io/_uploads/rJWZ0EVRa.png) ---- 總表 ![image](https://hackmd.io/_uploads/BJHi1SER6.png) --- Basic ASM Code ---- #### Address and Variables ```ASM RAX //直接就是RAX上面的值 [RAX] //地址是現在RAX值的東西 ``` ---- #### MOV ```ASM MOV RAX 1004 //把RAX的值變成1004 mov dword [edx] eax; //把地址在edx的dword填上eax上面的VALUE ``` ---- #### 運算元 ``` 這些都可以變成像是 ADD RAX RBX 之類的東西 ``` ```ASSEMBLY ADD RAX 120 //把RAX的值加上120 SUB RAX 1337 //把RAX的值減掉1337 CMP RAX -1217 //RAX是否等於-1217 XOR RAX RBX //把RAX的值拿去XOR RBX一次 剩下位元運算都一樣owo ``` ---- #### RET/JMP ```ASM RET //地址跳去STACK上面下一個值 JMP RDP //跳去RDP地址的值 ``` ---- #### stack |data1| | --- | |data2| |data3| |...| ---- #### POP ```ASM POP DATA1 ``` |data2| | --- | |data3| |...| ---- #### PUSH ```ASM PUSH DATA1 ``` |data1| | --- | |data2| |data3| |...| ---- STACK 結論: :::info FILO:FIRST IN LAST OUT ::: --- radare2 ---- 接上東西 ```bash r2 ./你的執行檔 ``` ---- 分析 ``` aa # Analyze All (建議) aaa # 深度分析 aaaa # 加入實驗功能的分析 afl #列出有哪些函數和他們的地址 ``` ---- 跳到某個函數 ``` s 函數名/地址 s main s 0x0044f3d0 ``` ---- 看詳細資料 ``` vv ``` ---- 退出 ``` q ``` ---- 問東問西 ```bash ? #問所有東西 a? #問a開頭的東西 # blablabla ``` --- GDB動態分析 ---- 接上東東 ```bash gdb ./你的執行檔 gdb attach <當下的pid> ``` ---- 打斷點(從哪裡開始追蹤的意思) ``` b main //在main下斷點 b *0x1234 //在位址0x1234下斷點 ``` ---- 跑 ``` r //執行 c //繼續執行 ``` ---- 好幫手 gdb-peda ![image](https://hackmd.io/_uploads/H1s9eUE0p.png =80%x) 有現在各個寄存器的值和現在跑到哪,是哪些assembly指令的資料 ---- 跳 ``` n //跳到下一個指令(不會call function) s //跳到下一個東西(會call function) ``` ---- 變更值 ``` set $rdi=0x1234 //把寄存器rdi的值變成0x1234 ``` ---- 查 stack 值 ``` stack 20 //前20個資料 ``` ![image](https://hackmd.io/_uploads/SySOWINAp.png) ---- vmmap 看bss段的資料狀態 ![image](https://hackmd.io/_uploads/rJ14x84AT.png) --- cheat engine ---- 來玩皮卡丘打排球owob --- 3Q ![image](https://github.com/William957-web/images/blob/main/323685763_1370892113720620_6763569147271908256_n.jpg?raw=true) IG:dd.54270