逆向工程核心原理 第十五章

2022-08-23 23:42:16 字數 2437 閱讀 7601

第十五章的15.3介紹了upx殼的四個迴圈及其作用,接下來我們乙個乙個的看一下:

迴圈1

通過**我們能知道,ecx為迴圈次數,迴圈的內容是從edx中讀取乙個位元組放入edi中,這個位元組就是節區(upx0)

0042d6fd   > /8a02          mov al,byte ptr ds:[edx]                 ;  將edx放入al

0042d6ff . |42 inc edx ; edx自加

0042d700 . |8807 mov byte ptr ds:[edi],al ; al放入edi

0042d702 . |47 inc edi ; edi自加

0042d703 . |49 dec ecx ; ecx自減

0042d704 .^\75 f7 jnz short add_upx.0042d6fd

迴圈2

迴圈二就是乙個解碼迴圈。當我們執行到0x0042d71d時,可以看在資料視窗處看到壓縮後的資料。(前面一部分的亂碼)

迴圈4

0042d746   > /8a07          mov al,byte ptr ds:[edi]                 ;  迴圈4

0042d748 . |47 inc edi ; add_upx.0042c008

0042d749 . |08c0 or al,al

0042d74b .^|74 dc je short add_upx.0042d729

0042d74d . |89f9 mov ecx,edi ; add_upx.0042c008

0042d74f . |57 push edi ; add_upx.0042c008

0042d750 . |48 dec eax

0042d751 . |f2:ae repne scas byte ptr es:[edi]

0042d753 . |55 push ebp ; kernel32.7dd60000

0042d754 . |ff96 2cd00200 call dword ptr ds:[esi+0x2d02c] ; kernel32.getprocaddress

0042d75a . |09c0 or eax,eax

0042d75c . |74 07 je short add_upx.0042d765

0042d75e . |8903 mov dword ptr ds:[ebx],eax

0042d760 . |83c3 04 add ebx,0x4

0042d763 .^\eb e1 jmp short add_upx.0042d746

當upx壓縮檔案時,它會分析檔案的iat表,然後提出api,形成api列表。

而當upx解壓的時候,會呼叫getprocaddress()函式,重新獲得api的起始位址,再重新復原iat表。

所以我們可以看到,upx存放的檔案函式:

至於第三個迴圈,在《逆向工程核心原理》中,作者寫道第三個迴圈是還原檔案原本的call/jmp指令,但在我的upx壓縮檔案中,我並沒有找到第三個迴圈,我猜測可能是因為upx版本不同的原因,我的這個upx的版本是3.04

當以後系統接觸到殼的時候,我會再去尋找其中的原因,在這裡就先跳過

第十五章預習

public class yuxi15 else 字串的比較 字串1.equals 字串2 比較兩個字串的值是否相同,返回boolean型別的值.如果相同,則返回真值,否則返回假值.字串1.equalsignorecase 字串2 忽略大小寫比較字串1和字串2.如果都相同則返回真值 否則返回假值 改...

逆向工程核心原理 第四十五章

若在程式設計中啟用了tls功能,pe標頭檔案中就會設定乙個tls表 tls table 我們可以看到tls 函式的定義 啟動引數dllhandle為控制代碼,引數reason為呼叫函式的原因。我們通過乙個實驗,來準確理解這四種狀態。include include 告知聯結器使用tls pragma ...

learn with python 第十五章 繼承

第十六章 繼承 16.1繼承 物件導向語言所擁有的特性是繼承,繼承指定義乙個新的類擁有原來類的方法。繼承最大的好處就是可以在不改變現存 的情況下新增新的方法,稱之為繼承是因為新定義的類擁有父類的所有方法。新建立的類知之為子類。繼承是乙個功能強大的特性,某些情況下如果沒有繼承,一些層序幾乎無法實現。同...