第一部分 程式碼逆向技術基礎
第1章 關於逆向工程:
“嗯,先學這些概念吧,其他慢慢學。”這才是學習逆向技術的正確態度。
逆向工程需要的基礎還是挺多的,彙編,C/C++語言,Windows程式設計,以及各種工具的使用。這些都不是一蹴而就的。看到高手也是這麼過來的,多少給了我一點繼續讀下去的信心。
第2章 逆向分析Hello World!程式:
我的開發環境是Visual Studio Express 2013,書上的第一個例子就遇到了連結問題。原因是書上的工程用的是控制檯應用程式專案,而我自以為是地建了一個Windows應用程式的專案。解決的方法是重新建立一個Console應用程式專案,或者把_tmain()方法替換為WinMain()。
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
隨後下載了一個OllyDbg1.10版本,開始了真正的逆向除錯。摸索了半天后,瞭解到預設會有4個視窗:“程式碼視窗”,“資料視窗”,“暫存器視窗”和“棧視窗”。當需要執行Ctrl + G的時候,要選對視窗才行。
第一種“打補丁”的結果如下:
第二種“打補丁”的結果如下:
書上提示說程式無法執行是正常的,學過第13章後就可以理解了-_-!
第3章 小端序標記法
有點簡單,暫時略過。
第4章 IA-32暫存器基本講解
書上說剛開始先了解8個通用暫存器的用途即可。不過這8個暫存器也好難啊。。。
第5章 棧
“棧是逆向擴充套件的”,一般畫那個4G虛擬記憶體的時候,左上是0地址,右下是4G,棧向低地址擴充套件,而堆的地址向高地址擴充套件。在OllyDbg裡面一直按住F7或者F8,右下角的棧視窗可以較直觀顯示棧的增長和壓縮。
第6章 分析abex' crackme#1
這一節的示例程式會被識別為木馬,於是輾轉到沒有防毒程式的Windows虛擬機器裡進行試驗。
第7章 棧幀
這一章詳細介紹了棧,並提到了緩衝區溢位的隱患,另外還講了幾個簡單的彙編指令。
每個函式開始都是儲存EBP,大學微機原理考試時,老師說寫出這兩行的就給一半分。
PUSH EBP
MOV EBP,ESP
移動ESP就相當於開闢了棧空間:
SUB ESP,8
函式返回的時候,再恢復原來的棧:
MOV ESP,EBP
POP EBP
這裡的POP操作其實是將EBP當前地址中儲存的值,作為EBP的新地址(值)。同樣,之前的PUSH操作,其實是在EBP的新地址中儲存了原來EBP的地址。總之EBP的值的地址上儲存的是前一個EBP指向的地址。
另外學到了幾個新設定:
- 在棧視窗中右鍵->Address->Relative to EBP
- 不勾選Disasm中的“Show Default segments”和“Always show size of memory operands”
- 勾選Analysis1中的“Show ARGs and LOCALs in procedures”
- 另外,作者好像還在程式碼視窗配置了Appearance->Highlighting->Christmas Tree
第8章 abex' crackme #2
這一章破解的是VB程式。工具比較熟悉了以後,直接打斷點,然後在棧視窗中找到EBP,往上面找找就看到了比較的字串。成功破解,但序號產生器的演算法有點麻煩了,先略過。
第9章 Process Explorer
下載了Process Explorer,用它發現我的電腦上Google Update一直在後臺執行著,或許是以前玩GAE的時候留下的。暫時沒有發現其他可疑的程式。
第10章 函式呼叫約定
今天搞清楚了cdecl,stdcall和fastcall的區別了,以前只在程式碼和連結資訊裡面見過這些欄位。其中cdecl是呼叫者負責處理棧,stdcall是被呼叫者清理棧。fastcall與stdcall類似,但通常會使用暫存器傳遞引數,而非棧記憶體。使用棧傳遞引數,往往會用[EBP+8],[EBP+C]這樣的棧地址訪問引數,而是用暫存器是直接用ECX和EDX暫存器傳遞引數。
第11章 視訊講座
http://www.tuts4you.com
還沒有去下載,先存個書籤。
破解結果:
第12章 究竟應當如何學習程式碼逆向分析
不知不覺竟然看完了第一部分,而且自己動手實踐了裡面的例子,感覺還是挺有意思的。希望能堅持看完這本書吧!
相關文章
- 二刷java核心技術_重溫基礎部分的練習程式碼儲存Java
- 逆向基礎——軟體手動脫殼技術入門
- java基礎部分程式碼相關題Java
- 羽夏逆向——逆向基礎
- Java核心技術 卷1 基礎知識 部分筆記Java筆記
- 逆向基礎(一)
- 逆向基礎(二)
- 逆向基礎(九)
- 逆向基礎(八)
- 逆向基礎(七)
- 逆向基礎(六)
- 逆向基礎(五)
- 逆向基礎(四)
- 逆向基礎(三)
- 逆向基礎(十一)
- 逆向基礎(十)
- 逆向基礎(十二)
- 逆向進階,利用 AST 技術還原 JavaScript 混淆程式碼ASTJavaScript
- 【AOP】技術基礎
- 逆向工程核心原理(1)逆向基礎
- PKI技術基礎I
- PKI技術基礎II
- Oracle技術基礎(一)Oracle
- 《The Rust Programming language》程式碼練習(part 1 基礎部分)Rust
- WebGL基礎教程:第一部分Web
- Android基礎第一天易忘部分Android
- 逆向基礎(十三) JAVA (一)Java
- java基礎部分Java
- 音視訊技術基礎
- JavaGUI——繪圖技術基礎JavaGUI繪圖
- Linux技術——gcc基礎LinuxGC
- Linux技術——makefile基礎Linux
- 病毒防護技術基礎
- 入侵檢測技術基礎
- 第一部分:Twisted理論基礎
- 現代通訊技術基礎中的基礎
- 前端技術演進(一):Web前端技術基礎前端Web
- 某團mtgsig(逆向)第一部分