- 促進正向開發,深刻理解系統原理
- 藉助別人的設計和實現,實現本身的功能
- 分析惡意軟件,應用安全審計
- 從逆向的角度實現安全保護
學完逆向以後你將能夠從不一樣的角度看待和思考問題算法
將想法和設計理念變成具體實現的過程安全
具體的物理實現 => 抽象的邏輯設計 反編譯機器碼 => 彙編代碼(相似的高級語言代碼) => 理解其算法和設計概念bash
從二進制碼中提取設計概念和算法網絡
程序的編譯和反編譯 高級語言(C/C++/Oc/Java/Python/C#) -> 中間語言(如:彙編等) -> 目標代碼(exe/lib/dll/sys/dylib等二進制文件)框架
編譯連接
高級語言 ========> 機器碼
<======== 機器碼
反彙編/反編譯
複製代碼
編譯連接
高級語言 ========> 機器碼
<========
反彙編/反編譯
複製代碼
上述過程看似平淡無奇,但實際作的時候不會很順利,由於咱們可能須要反覆探索才能定位目標函數,探索的過程及枯燥也有趣,你會在探索中成長和強大😄,逆向是一個試錯的過程,須要不停的猜想、查找和進行驗證,既考驗耐心也考驗動手能力函數
定位關鍵代碼的方式佈局
- 經過監控UI事件的響應定位關鍵代碼
- 經過監控底層API的調用定位關鍵代碼(如網絡訪問接口、文件讀寫接口等)
- 經過觀察數據的變化來定位關鍵代碼和地址