<!-- .slide: data-background="" --> # 資研社社課 week-2 #### 逆向工程 入門 --- ### 廣告時間 ---- ### 國雲網路 我們很多機器都是透過他們的vps架設的 ![image](https://ncse.tw/assets/img/logo.png) --- ### 免責聲明 :::info 自本社團活動中所學習的工具、弱點、攻擊手法等僅供資安知識的學習,若在課程後想做相關練習,請在合法的CTF平台上進行測試。 如對外有相關攻擊行為,皆與授課講師以及實驗中學資訊研究社無關。 ::: 不要去犯法喔>< --- # What is reverse? ---- ![image](https://hackmd.io/_uploads/SJHIt0caa.png) ---- 去理解程式在幹嘛的過程。 ---- ![image](https://hackmd.io/_uploads/r1W54JipT.png) --- # 常見使用場景 ---- - 電腦病毒分析 - 遊戲外掛 - 越獄(Jail Break) - 漏洞尋找(變成白箱) --- 從0.1開始的C/C++複習 ---- 希望你們都還記得 :D 電腦課都有所以我就複習一下就好(?) ---- - 變數類型: - int : 整數值,4 bytes - char : ASCII字元,1 byte - float : 浮點數,4bytes - long long(LL) : 大整數,8 bytes - bool : 1 bit ---- - 運算元 - \+-*\/ : 加減乘除 - | : OR 運算(0|0 = 0,其他都是 1) - & : AND 運算(1&1 = 1,其他都是 0) - ^ : XOR 運算(1^1 和 0^0 是 0,其他都是 1) - \>\> : x>>n=$x/2^n$ - << : x<<n=$x*2^n$ ---- **位元運算EXAMPLE** 5=$101_{(2)}$ 6=$110_{(2)}$ 5|6=$111_{(2)}$=6 5&6=$100_{(2)}$=4 5^6=$011_{(2)}$=3 ---- - 輸入 - get(meow) - read(wolf) - scanf(womp) - cin >> shark - std:\:istream::operator>>whale ---- - 輸出 - put(meow) - write(wolf) - printf(womp) - cout << shark - std:\:ostream::operator<\<whale ---- - Array(陣列) ```cpp int a[7]={1, 3, 5, 7, 9, 11, 13} // a[0]=1, a[1]=3 ``` ---- ### for迴圈 ```cpp for(int i=0;i<10;i++){ cout << i << '\n'; } ``` 變數i從0跑到9 ---- ### 函數 ```cpp int eat(int shark){ int whale=shark^1; return whale; } ``` 會有個input跟一個return的值 ---- 複習完成owo 如果逆向的時候遇到奇怪的東西 :bulb: 跑跑看就對了 --- ### 電腦怎麼跑執行檔的? ---- 執行檔裡面本身是一個一個byte的資料: ![image](https://hackmd.io/_uploads/r1MeMxi6T.png) ---- 每個(或多個)byte可以組成一個指令/寄存器 也可以是一個值 ---- **EXAMPLE** 一個被打開的執行檔 (ghidra視角) ![image](https://hackmd.io/_uploads/Hkzs7xi6a.png =105%x) ---- **電腦視角** :::info 執行檔被跑-> 讀取資料,轉為處理器看得懂的machine code-> 照著他們執行 ::: ---- 所以... 簡單啊~讀那些byte就好(X) ![image](https://hackmd.io/_uploads/HJT5Hej6a.png =50%x) --- ### 處理工具?! --- strace 介紹 ---- ~~我不打算講~~,在你們的kali linux上面應該有,他會去追執行檔跟電腦互動過程的一些記憶體/變數內容 ---- 解題平台上面的 Invisible 作法: ```bash strace -s 1000 ./invisible ``` --- ### IDA-使用教學 ---- 點這個 ![image](https://hackmd.io/_uploads/B1eN_I-iaa.png) ---- 旁邊這列可以選函數 ![image](https://hackmd.io/_uploads/H1dcLZipT.png) ---- 在這個區域按下 f5 可以看到逆回去c的結果 ![image](https://hackmd.io/_uploads/HkexD-jTa.png) ---- 縮小畫面看函數之間執行過程 ![image](https://hackmd.io/_uploads/rJgHwZs6p.png) ---- 按右鍵可以變更模式 ![image](https://hackmd.io/_uploads/H1zivWiTa.png) ---- text模式可以知道函數地址 ![image](https://hackmd.io/_uploads/Skn0v-j6a.png) --- 實戰 ---- https://ctf.nicewhite.xyz/ ---- REVERSE ![image](https://hackmd.io/_uploads/ryrQuZja6.png) ---- 今天會帶Passme,Adder和Passme Revenge也是可做的 --- 如果有空的話會講ghidra --- 3Q ![image](https://github.com/William957-web/images/blob/main/323685763_1370892113720620_6763569147271908256_n.jpg?raw=true)
{"description":"我們很多機器都是透過他們的vps架設的image","title":"資研社社課 week-2 逆向工程","contributors":"[{\"id\":\"4aa04276-c8ec-490d-a620-ec3b4e8e3d7c\",\"add\":3135,\"del\":141}]"}
    360 views