2017.W24 - 逆向工程 (Reverse Engineering) - 資安
By John
at 2017-06-14T07:54
at 2017-06-14T07:54
Table of Contents
2017.W24 - 逆向工程 (Reverse Engineering)
> 微下-擊爆-流 聽起來就很像中二的招數名稱
## 前言 ##
之前曾經為了公司上的事情 特別研究了逆向工程
最後發現... 只要有心都是可以逆向了
然後這個天氣真的很好睡 不知不覺... 就睡著了呢
## 內容 ##
逆向工程[0] 是一種技術:透過將原本的產品透過逆向分析,而找出原本產品的製造與處理過程
在軟體的世界中 逆向工程就是透過各種神奇的手法
分析並理解程式的邏輯 最終找出其中的關鍵處並加以修改
可以從遊戲破解[1] 私服[2] 找到其中的地下商機
在我之前的研究中 逆向工程會大致分為兩類:靜態分析、動態分析
靜態分析也就是不需要將程式執行 只需要直接分析檔案的內容 (機械碼)
現在絕大多數的軟體都運行在 x86-64[3] 的環境 相關的攜械碼-組合語言對應也容易找到
因此將一個軟體反組譯[4] 成組合語言是相對容易的
防治反組譯的手法有若干種 其中最有效的方式則是利用加殼
加殼技術的概念 則是利用在原本的程式中再疊加一個程式來混淆[6]原本的程式邏輯
用一個簡單的概念:
1. 原本的程式可以先用 Huffman Coding[7] 先行壓縮
2. 主程式開始的邏輯則是一個 Huffman Decoder
3. 運行的時候則需先跑完整的 Decode 流程才能夠執行程式
這種加殼技術 目的在於將靜態逆向的難度 再疊加一層需要破解加殼的運作邏輯
想當然 這種防止逆向工程的技術並沒有從根本解決
同樣的 動態分析則是在程式運作的時候 透過除錯器[8] 分析程式的運作流程
這種分析的優點在於可以即時的修改程式的所有內容 包含資料、執行流程等
常見的除錯器包含 GDB[9]、WinDBG[10]
運作的方式都是利用系統本身提供的系統指令來做動態除錯
針對動態分析的防止方法則是利用 Anti-Debugging[11]
透過若干手法 讓程式本身判斷是否處於 Debugger 的狀態下
[0]: https://zh.wikipedia.org/wiki/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B
[1]: https://zh.wikipedia.org/wiki/%E6%B3%A8%E5%86%8C%E6%9C%BA
[2]: https://zh.wikipedia.org/wiki/%E7%A7%81%E4%BA%BA%E4%BC%BA%E6%9C%8D%E5%99%A8
[3]: https://zh.wikipedia.org/zh-tw/X86-64
[4]: https://zh.wikipedia.org/wiki/%E5%8F%8D%E7%B7%A8%E8%AD%AF%E5%99%A8
[5]: https://zh.wikipedia.org/wiki/%E5%8A%A0%E6%AE%BC%E5%A3%93%E7%B8%AE
[6]: https://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86
[7]: https://en.wikipedia.org/wiki/Huffman_coding
[8]: https://zh.wikipedia.org/wiki/%E8%B0%83%E8%AF%95%E5%B7%A5%E5%85%B7
[9]: https://www.gnu.org/software/gdb/
[10]: http://www.windbg.org/
[11]: https://en.wikipedia.org/wiki/Debugging#Anti-debugging
--
> 微下-擊爆-流 聽起來就很像中二的招數名稱
## 前言 ##
之前曾經為了公司上的事情 特別研究了逆向工程
最後發現... 只要有心都是可以逆向了
然後這個天氣真的很好睡 不知不覺... 就睡著了呢
## 內容 ##
逆向工程[0] 是一種技術:透過將原本的產品透過逆向分析,而找出原本產品的製造與處理過程
在軟體的世界中 逆向工程就是透過各種神奇的手法
分析並理解程式的邏輯 最終找出其中的關鍵處並加以修改
可以從遊戲破解[1] 私服[2] 找到其中的地下商機
在我之前的研究中 逆向工程會大致分為兩類:靜態分析、動態分析
靜態分析也就是不需要將程式執行 只需要直接分析檔案的內容 (機械碼)
現在絕大多數的軟體都運行在 x86-64[3] 的環境 相關的攜械碼-組合語言對應也容易找到
因此將一個軟體反組譯[4] 成組合語言是相對容易的
防治反組譯的手法有若干種 其中最有效的方式則是利用加殼
加殼技術的概念 則是利用在原本的程式中再疊加一個程式來混淆[6]原本的程式邏輯
用一個簡單的概念:
1. 原本的程式可以先用 Huffman Coding[7] 先行壓縮
2. 主程式開始的邏輯則是一個 Huffman Decoder
3. 運行的時候則需先跑完整的 Decode 流程才能夠執行程式
這種加殼技術 目的在於將靜態逆向的難度 再疊加一層需要破解加殼的運作邏輯
想當然 這種防止逆向工程的技術並沒有從根本解決
同樣的 動態分析則是在程式運作的時候 透過除錯器[8] 分析程式的運作流程
這種分析的優點在於可以即時的修改程式的所有內容 包含資料、執行流程等
常見的除錯器包含 GDB[9]、WinDBG[10]
運作的方式都是利用系統本身提供的系統指令來做動態除錯
針對動態分析的防止方法則是利用 Anti-Debugging[11]
透過若干手法 讓程式本身判斷是否處於 Debugger 的狀態下
[0]: https://zh.wikipedia.org/wiki/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B
[1]: https://zh.wikipedia.org/wiki/%E6%B3%A8%E5%86%8C%E6%9C%BA
[2]: https://zh.wikipedia.org/wiki/%E7%A7%81%E4%BA%BA%E4%BC%BA%E6%9C%8D%E5%99%A8
[3]: https://zh.wikipedia.org/zh-tw/X86-64
[4]: https://zh.wikipedia.org/wiki/%E5%8F%8D%E7%B7%A8%E8%AD%AF%E5%99%A8
[5]: https://zh.wikipedia.org/wiki/%E5%8A%A0%E6%AE%BC%E5%A3%93%E7%B8%AE
[6]: https://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86
[7]: https://en.wikipedia.org/wiki/Huffman_coding
[8]: https://zh.wikipedia.org/wiki/%E8%B0%83%E8%AF%95%E5%B7%A5%E5%85%B7
[9]: https://www.gnu.org/software/gdb/
[10]: http://www.windbg.org/
[11]: https://en.wikipedia.org/wiki/Debugging#Anti-debugging
--
Tags:
資安
All Comments
By Susan
at 2017-06-17T11:16
at 2017-06-17T11:16
By Connor
at 2017-06-21T11:40
at 2017-06-21T11:40
By Caroline
at 2017-06-22T08:45
at 2017-06-22T08:45
By Sierra Rose
at 2017-06-25T06:43
at 2017-06-25T06:43
By Damian
at 2017-06-27T19:37
at 2017-06-27T19:37
Related Posts
看電影學資安-CSI Cyber S02E01
By Christine
at 2017-06-03T10:16
at 2017-06-03T10:16
2017.W22 - SQL Injection
By Heather
at 2017-05-30T21:41
at 2017-05-30T21:41
CVE-2017-7494 (Samba)
By George
at 2017-05-24T17:27
at 2017-05-24T17:27
2017.W21 - Google Hacking
By Jack
at 2017-05-23T22:04
at 2017-05-23T22:04
2017.W20 - Remote Code Execution
By Suhail Hany
at 2017-05-16T22:49
at 2017-05-16T22:49