一階段
| C、C++ | 編譯、連結、裝載執行的過程;基本資料型別、使用者自定義資料型別在記憶體中的表現形式;泛型程式設計、異常處理。 C中的分支語句、迴圈語句等語句的彙編層次的實現原理 C++中各類語法(糖)的實現原理 |
資料結構 | 常用的資料結構及其相關演算法;標準模板庫的使用與STL原始碼學習。 |
專案: 高效資料引擎模擬 | 物件導向的思想設計,內外存中合理的資料表示,大規模資料的高效操作。在專案中不允許使用STL和其他任何三方程式碼 |
“勿在浮沙築高臺”,此階段即是之後階段的鋪墊,也是學員真正理解計算機語言的開端。掌握此階段的內容後,學員會發現自己不會再挑剔程式語言,不再挑剔程式設計框架;畢竟拋去表面的“語法糖”後,他們從原理上,都是同一回事。 |
二階段 | SDK程式設計 | Windows SDK視窗程式設計;Windows訊息驅動機制;對話方塊程式設計;控制元件程式設計。 |
MFC/QT程式設計 | MFC中資料繫結、子類化、控制元件、序列化或者QT中訊號槽機制,物件樹,物件屬性系統,字串翻譯機制,事件和事件過濾器,動態物件轉換機制等核心技術的原理及實現。 |
Windows程式設計 | 靜態庫、動態庫的使用;配置檔案、登錄檔程式設計;多執行緒程式設計;程式間通訊;DLL注入。 |
網路程式設計 | TCP套接字程式設計、UDP套接字程式設計、Socket模型、原始套接字、各種網路包格式、http、池技術。 |
資料庫 | 資料庫基礎理論、SQL語言、ADO程式設計、SQL隱碼攻擊。 |
COM原理 | COM的基本介面、COM內部原理、自動化介面、手寫COM實踐。 |
專案: 自制CAD軟體 | DC的概念及使用、雙緩衝機制、設計模式:類工廠、命令模式、外掛模式。 |
專案: 自制工作管理員 | 利用軟體開發框架及Windows API,自制一個具有檢視程式/執行緒狀態,修改指定程式記憶體,檢視各視窗資訊等功能的工作管理員。 |
專案: 聊天室 | 編寫C/S結構的聊天室軟體,要求實現私聊、公聊、賬號/暱稱管理等功能。 |
專案: 遠端監控軟體 | 編寫軟體,實現遠端監控功能。 |
專案: 遠端資訊管理系統 | 編寫一個客戶端/服務端架構的資訊管理系統,要求有快取機制、執行緒池機制,並採用三層網路通訊架構。 |
第二階段的核心目的是提高學員的開發能力。一個優秀的逆向人員,一定深諳軟體開發的技巧。這個階段所學習的知識與技巧(如常見除錯手段,資料關係分析方法),均可直接幫助真實工作。學習完這個階段,進可一鼓作氣學習逆向,退可拿開發offer先工作。 |
三階段
| 彙編 | 16位彙編;32位彙編;64位彙編;OllyDbg偵錯程式的使用;C與彙編的相互呼叫。 |
偵錯程式 | Windows異常處理框架;Windows系統的除錯框架。 |
PE檔案格式 | PE檔案格式及其在技術對抗中的利用;殼。 |
逆向 | IDA的使用;算數運算及編譯器最佳化;邏輯運算;流程控制語句;字串操作;物件特徵;虛表等彙編語句的識別與還原。 |
PWN | 主要講解Pwn的分析和利用。 |
MFC/QT原理 | 深入瞭解MFC/QT框架的設計原理。 |
核心及驅動 | 異常處理;核心程式設計入門;記憶體管理;驅動開發框架;x86處理器中的任務執行與切換;x86處理器中的特權級別切換;核心結構體;Win64核心。 |
專案: API內聯HOOK
| 內聯HOOK的原理及實踐,透過內聯HOOK,實現對某個API的監控;並將監控資訊寫檔案。 |
專案: 記憶體Dump | 從記憶體中Dump出指定的程式,並對匯入表等進行修復,得到能夠正常執行的exe檔案。
|
專案: PE解析軟體 | 編寫軟體,解析PE格式,功能包括但不限於:轉換RVA / VA /偏移;解析節資訊;解析匯入表、匯出表、資源表等。 |
專案: 手寫PE檔案 | 依據所學的PE格式及Windows載入PE檔案的知識,利用十六進位制編輯器,純手工寫一個exe檔案。要求能正常執行並顯示歡迎介面。 |
專案: 分析WinDbg某功能 | WinDbg的命令視窗,即使短時間重新整理了大量文字顯示,也不會閃爍。透過除錯分析 WinDbg,找出其技術核心。 |
專案: 自己編寫偵錯程式 | 編寫三環偵錯程式,要求支援單步、步過、記憶體斷點、反彙編指令、檢視/修改記憶體、記錄執行指令等功能。 |
專案: 驅動級的工作管理員 | 編寫驅動級的工作管理員,要求具有檢視程式、執行緒、視窗資訊,對指定程式的記憶體進行檢視與修改等功能。 |
第三階段重在方法,授人以漁,不重劍招,但重劍意。學習完這個階段,可以瞭解C/C++特性的底層機制,可以從有限的時間中推匯出各類作業系統、流行框架解決問題的基石。精修此階段,有望達到“草木竹石,皆可為劍”的高層境界。 |
四階段 | Android開發 | Java語言 Kotlin語言 Android應用程式開發 Android網路程式設計 |
NDK開發 | Android C/C++開發 Linux SDK開發 Android JNI程式設計 |
ARM彙編 | 32位ARM彙編開發 64位ARM彙編開發 程式碼注入 Inline Hook |
Android逆向 | 反編譯工具介紹 Smali彙編指令 Java/kotlin程式碼還原 APK重打包、除錯 |
NDK逆向 | Android C程式碼還原 Android C++程式碼還原 Android NDK除錯 Android網路協議分析 |
DEX檔案格式 | DEX檔案格式講解 ODEX檔案格式講解 OAT檔案格式講解 VDEX檔案格式講解 |
ELF檔案格式 | ELF檔案格式講解 ELF檔案格式對抗 ELF檔案程式碼注入 ELF檔案Hook |
Android加殼 | Android一代殼原理及實現 Android二代殼原理及實現 Android三代殼原理及實現 Android VMP殼原理及實現(指令轉換) Android VMP殼原理及實現(指令模擬) OLLVM原理及使用 |
Android HOOK | Android ROOT原理 Xposed原理及使用 Frida原理及使用 Unicorn原理及使用 Unidbg原理及使用 |
Android核心 | Android原始碼編譯 Android系統定製 |
科銳於2012年開設了Android系列的開發和逆向相關專題課程,經過多年的教學摸索以及和用人單位的積極溝通,Android系列教學體系已經成熟,很多畢業學員已經入職阿里、騰訊、360、金山、安天等公司從事Android安全和開發相關的工作崗位。 |