網絡攻防學習心得一(20159320)工具學習


由於自己對逆向相關信息有比較大的興趣,所以並沒有參照老師所推介的sectools去學習一些工具,反而自己學習了其他的逆向相關的工具的簡單應用。

調試工具ollydbg  查殼工具peid 脫殼工具loadpe   修復工具importrec 還有就是簡單IDA的了解

peid:一個簡單的查殼工具,通過作者對很多殼的了解編寫出來的查殼工具,可以查詢一些常見的帶殼程序所加的殼,方便具體脫殼。但是此工具只能作為參考,有些時候查殼未必正確,或者查不出對應殼,也可以通過區段來看一下殼的簡單特征,從而采取對應方法來解決脫殼問題。

loadpe :一個脫殼工具(當然,脫殼過程中也可以通過od自帶的脫殼工具通過兩種方式來脫殼),此工具運用之前必須找到程序真正的OEP,從而查找對應IAT,從而更新函數表,找到其中無效的函數,可以 嘗試直接刪除少的無效函數,如果比較多的話,可以通過追蹤來修復或者查找對應函數。之后則重新載入。

Importrec:這是一個修復的工具,在上一部LOADpe出來的程序中,可能重新載入之后並不能真正運行,這時候涉及到修復的過程,在簡單修復中,首先是找到對應進程,重新計算鏡像大小,輸入真正OEP然后自動查找IAT,之后則是獲取輸入表完成修復,有的時候不能修復的情況下,涉及到的是查找RVA,在查找RVA的時候方法則是找到一個call,跟進call對應地址,在od數據窗口中找到數據全為零的點,則RVA為下一個地址,然后查找最下面全為零的點,計算兩點之間的偏移則為SIZE,有的時候為了方便,可以不用計算SIZE,直接寫成1000則夠用,如此之后則可以修復一些不能運行的情況。

如果修復之后還是不能運行,則可以嘗試用LOADPE嘗試重建PE,這也是一種處理的方法。

IDA:IDA在時下用的也不少,也有他對應的一些有點。這個工具用的時候還不多,在課余時間,我在看逆向工程核心原理,這里介紹了一些IDA的運用,下周應該可以看到對應的內容,所以此次暫時不多說。

od:作為一種調試工具,他的使用感覺有的地方有點困惑,首先說說總結的一些簡單殼的脫殼方法吧。

常見的殼有兩種:加密殼和壓縮殼

常見的方法:1、單步跟蹤法:注意向下跳轉實現,向上跳轉則不讓實現,通過下斷的方式即f4及f8組合實現,但需要注意一些語句也得跳過,有的時候還得注意長call讓跳轉,短call跟進相結合。

                 2、esp定律:所謂esp定律則是堆棧平衡大法。我覺得需要注意的是一些push引起的esp突變,然后則在數據窗口跟進,找到對應位置下斷然后f4運行之后再進行單步,也和單步方式一樣,大跳轉的情況及可能為程序真正的OEP。

                 3、內存鏡像法:首先找到內存窗口即為M,進入之后找到rec區段(注意有兩個rec,一個為程序的,一個為系統的)在此下斷運行,然后再次進入M找到401000位置下斷及data段然后運行,觀察入口特征。注意有的時候,程序只需要一次鏡像法完成。

                 4、模擬跟蹤法:其中包括sfx方式,但由於在自己電腦實現過程中,模擬法出了點問題,所以並沒有實現,但是在虛擬機中能夠實現,問題還在思考中,所以也不寫出來了。

                 5、最后一次異常法:這個方法通過設置異常中斷,計算shift f9次數,當程序跑飛的時候需要的次數,然后重新載入之后少按一次來找到位置。然后進行單步找oep

                 6、還有一些特殊的斷點,還有一些設置包括tc eip <xxxx等方式來找到(由於筆記忘在實驗室了,所以這邊不寫出來那些斷點方式,但是這些斷點如何實現的  還需要繼續深究)

 

在oep的查找過程中還需要記得的就是一些常見語言的入口點特征,記住或者熟悉這些特征可以方便查找oep,以下給出一些常見特征:

VB:

004012D4 > 68 54474000 push QQ個性網.00404754
004012D9 E8 F0FFFFFF call <jmp.&MSVBVM60.#100>
004012DE 0000 add byte ptr ds:[eax],al
004012E0 0000 add byte ptr ds:[eax],al
004012E2 0000 add byte ptr ds:[eax],al
004012E4 3000 xor byte ptr ds:[eax],al
004012E6 0000 add byte ptr ds:[eax],al
004012E8 48 dec eax

 

delphi:

004A5C54 > 55 push ebp
004A5C55 8BEC mov ebp,esp
004A5C57 83C4 F0 add esp,-10
004A5C5A B8 EC594A00 mov eax,openpro.004A59EC

BC++:

00401678 > /EB 10 jmp short btengine.0040168A
0040167A |66:623A bound di,dword ptr ds:[edx]
0040167D |43 inc ebx
0040167E |2B2B sub ebp,dword ptr ds:[ebx]
00401680 |48 dec eax
00401681 |4F dec edi
00401682 |4F dec edi
00401683 |4B dec ebx
00401684 |90 nop
00401685 -|E9 98005400 jmp 00941722
0040168A \A1 8B005400 mov eax,dword ptr ds:[54008B]
0040168F C1E0 02 shl eax,2
00401692 A3 8F005400 mov dword ptr ds:[54008F],eax
00401697 52 push edx
00401698 6A 00 push 0
0040169A E8 99D01300 call <jmp.&KERNEL32.GetModuleHandleA>
0040169F 8BD0 mov edx,eax

 

VC++:

0040A41E > 55 push ebp
0040A41F 8BEC mov ebp,esp
0040A421 6A FF push -1
0040A423 68 C8CB4000 push 跑跑排行.0040CBC8
0040A428 68 A4A54000 push <jmp.&MSVCRT._except_handler3>
0040A42D 64:A1 00000000 mov eax,dword ptr fs:[0]
0040A433 50 push eax
0040A434 64:8925 0000000>mov dword ptr fs:[0],esp
0040A43B 83EC 68 sub esp,68
0040A43E 53 push ebx
0040A43F 56 push esi
0040A440 57 push edi

 

MASM(匯編):

004035C9 > 6A 00 push 0
004035CB E8 A20A0000 call <jmp.&kernel32.GetModuleHandleA>
004035D0 A3 5B704000 mov dword ptr ds:[40705B],eax
004035D5 68 80000000 push 80
004035DA 68 2C754000 push 11.0040752C
004035DF FF35 5B704000 push dword ptr ds:[40705B]
004035E5 E8 820A0000 call <jmp.&kernel32.GetModuleFileNameA>
004035EA E8 87070000 call 11.00403D76
004035EF 6A 00 push 0
004035F1 68 0B364000 push 11.0040360B
004035F6 6A 00 push 0
004035F8 6A 64 push 64
004035FA FF35 5B704000 push dword ptr ds:[40705B]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM