青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

聚星亭

吾笨笨且懶散兮 急須改之而奮進
posts - 74, comments - 166, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

在begin09論壇上nick放出了一個UnpackMe,我閑來無聊就搗鼓了下。感覺這個殼還可以啦。

花指令比較少。
IAT處理上,很像是PE-Armor。
需要修復TLS表。

下面是我分析的詳細過程:

在00401000下內存寫入斷點:

003D025F    8B95 7D040000   mov    edx, dword ptr [ebp+0x47D]
003D0265    03D5            add    edx
, ebp
003D0267    8B3A            mov    edi
, dword ptr [edx]
003D0269    0BFF            or      edi
, edi
003D026B    
75 02           jnz    short 003D026F
003D026D    EB 
65           jmp    short 003D02D4
003D026F    03BD 
48040000   add    edi, dword ptr [ebp+0x448]
003D0275    83C2 
05         add    edx, 0x5
003D0278    8BF2            mov    esi
, edx
003D027A    
56              push    esi
003D027B    FF95 3C040000   call    dword ptr 
[ebp+0x43C]                        ; kernel32.GetModuleHandleA
003D0281    0BC0            or      eax, eax
003D0283    
75 07           jnz    short 003D028C
003D0285    
56              push    esi
003D0286    FF95 
40040000   call    dword ptr [ebp+0x440]
003D028C    0FB64E FF       movzx  ecx
, byte ptr [esi-0x1]
003D0290    03F1            add    esi
, ecx
003D0292    8BD6            mov    edx
, esi
003D0294    8BF0            mov    esi
, eax
003D0296    
42              inc    edx
003D0297    8B0A            mov    ecx
, dword ptr [edx]
003D0299    83C2 
04         add    edx, 0x4
003D029C    
51              push    ecx
003D029D    0FB602          movzx  eax
, byte ptr [edx]
003D02A0    0BC0            or      eax
, eax
003D02A2    
75 14           jnz    short 003D02B8
003D02A4    
42              inc    edx
003D02A5    
52              push    edx
003D02A6    8B02            mov    eax
, dword ptr [edx]
003D02A8    
50              push    eax
003D02A9    
56              push    esi
003D02AA    FF95 
38040000   call    dword ptr [ebp+0x438]
003D02B0    
8907            mov    dword ptr [edi], eax
003D02B2    5A              pop    edx
003D02B3    83C2 
04         add    edx, 0x4
003D02B6    EB 
13           jmp    short 003D02CB
003D02B8    
42              inc    edx
003D02B9    
52              push    edx
003D02BA    
52              push    edx
003D02BB    
56              push    esi
003D02BC    FF95 
38040000   call    dword ptr [ebp+0x438]                        ; kernel32.GetProcAddress
003D02C2    8907            mov    dword ptr [edi], eax                          ; 保存API地址
003D02C4    5A              pop    edx
003D02C5    0FB642 FF       movzx  eax
, byte ptr [edx-0x1]
003D02C9    03D0            add    edx
, eax
003D02CB    
42              inc    edx
003D02CC    83C7 
04         add    edi, 0x4
003D02CF    
59              pop    ecx
003D02D0  ^ E2 CA           loopd  short 003D029C
003D02D2  ^ EB 
93           jmp    short 003D0267

 

很明顯,這些是解密IAT的。

        0045E6CC  770F4880  oleaut32.SysFreeString
        0045E6D0  770FA3EC  oleaut32.SysReAllocStringLen
        0045E6D4  770F4B39  oleaut32.SysAllocStringLen
        0045E6D8  
00000000
        0045E6DC  77DA7ABB  advapi32.RegQueryValueExA
        0045E6E0  77DA7852  advapi32.RegOpenKeyExA
        0045E6E4  77DA6C27  advapi32.RegCloseKey
        0045E6E8  
00000000
        0045E6EC  77D311DB  user32.GetKeyboardType
        0045E6F0  77D2B19C  user32.DestroyWindow
        0045E6F4  77D2C908  user32.LoadStringA
        0045E6F8  77D507EA  user32.MessageBoxA
        0045E6FC  77D2C8B0  user32.CharNextA
        
0045E700  00000000
        
0045E704  7C8099B5  kernel32.GetACP
        
0045E708  7C802446  kernel32.Sleep
        .

 

繼續向下,發現一個anti dump的代碼:

003D0381    64:FF35 3000000>push    dword ptr fs:[0x30]
003D0388    
58              pop     eax
003D0389    85C0            test    eax
, eax
003D038B    
78 0F           js      short 003D039C   ; 這里修改SF標志位,讓它跳。
003D038D    8B40 0C         mov     eax, dword ptr [eax+0xC]
003D0390    8B40 0C         mov     eax
, dword ptr [eax+0xC]
003D0393    C740 
20 0010000>mov     dword ptr [eax+0x20], 0x1000
003D039A    EB 1C           jmp     short 003D03B8
003D039C    6A 
00           push    0x0
003D039E    FF95 3C040000   call    dword ptr 
[ebp+0x43C]
003D03A4    85D2            test    edx
, edx
003D03A6    
79 10           jns     short 003D03B8
003D03A8    837A 
08 FF      cmp     dword ptr [edx+0x8], -0x1
003D03AC    
75 0A           jnz     short 003D03B8
003D03AE    8B52 
04         mov     edx, dword ptr [edx+0x4]
003D03B1    C742 
50 0010000>mov     dword ptr [edx+0x50], 0x1000
003D03B8    89AD D3020000   mov     dword ptr 
[ebp+0x2D3], ebp
003D03BE    EB 
59           jmp     short 003D0419
003D03C0    
60              pushad

 

然后在內存映射視圖,的代碼段下內存訪問斷點,很容易,我們就來到了如下的地方:

003D049E    8DB5 14040000  lea    esi, dword ptr [ebp+0x414]                ; 得到原始程序代碼在殼中的地址。
003D04A4    8BBD 0C040000  mov    edi, dword ptr [ebp+0x40C]                ; 得到要填充的地址(也就是我們OEP的地址)
003D04AA    8B8D 10040000  mov    ecx, dword ptr [ebp+0x410]                ; 取出大小
003D04B0    66:8B1E        mov    bx, word ptr [esi]
003D04B3    33D8           xor    ebx
, eax
003D04B5    
66:891F        mov    word ptr [edi], bx                        ; 停在這里了
003D04B8    83C7 02        add    edi, 0x2
003D04BB    83C6 
02        add    esi, 0x2
003D04BE  ^ E2 F0          loopd  short 003D04B0
003D04C0    8B85 0C040000  mov    eax
, dword ptr [ebp+0x40C]
003D04C6    
894424 FC      mov    dword ptr [esp-0x4], eax
003D04CA    
61             popad
003D04CB    FF6424 DC      jmp    dword ptr 
[esp-0x24]                      ; 跳轉到OEP


這樣就來到OEP了,如下,根據這個入口點我們可以知道,這是一個Delphi6.0到7.0的程序。

0045671C    55              push    ebp
0045671D    8BEC            mov    ebp
, esp
0045671F    83C4 F0         add    esp
, -0x10
00456722    B8 C4524500     mov    eax, 004552C4
00456727    E8 A0FEFAFF     call    004065CC
0045672C    A1 
88894500     mov    eax, dword ptr [0x458988]
00456731    8B00            mov    eax, dword ptr [eax]
00456733    E8 80CAFFFF     call    004531B8
00456738    A1 88894500     mov    eax, dword ptr [0x458988]
0045673D    8B00            mov    eax
, dword ptr [eax]
0045673F    B2 
01           mov    dl, 0x1
00456741    E8 5AE8FFFF     call    00454FA0
00456746    8B0D 748A4500   mov    ecx, dword ptr [0x458A74]        ; UpkMe.0045DCC8
0045674C    A1 88894500     mov    eax, dword ptr [0x458988]
00456751    8B00            mov    eax, dword ptr [eax]
00456753    8B15 24514500   mov    edx, dword ptr [0x455124]        ; UpkMe.00455170
00456759    E8 72CAFFFF     call    004531D0
0045675E    A1 
88894500     mov    eax, dword ptr [0x458988]
00456763    8B00            mov    eax, dword ptr [eax]
00456765    E8 9ECBFFFF     call    00453308
0045676A    E8 B1DFFAFF     call    
00404720


接下來我們修復IAT。
我們知道,Delphi程序,一般第一個函數的第一個API是GetModuleHandle。我們從這里入手,來看一下。

004065CC    53                       push    ebx
004065CD    8BD8                 mov    ebx
, eax
004065CF    33C0                   xor    eax
, eax
004065D1    A3 
88774500     mov    dword ptr [0x457788], eax
004065D6    6A 
00                 push    0x0
004065D8    E8 2BFFFFFF   call    
00406508  ; 這里應該是GetModuleHandleAPI的間接地址。進去應該是一個JMP跳,可是被修改成了自身的地址。
{
        
00406508    90                               nop
        
00406509    E8 B29EFCFF           call 003D03C0
        {
                003D03C0    
60              pushad
                003D03C1    
90              nop                                      ; 去掉花
                003D03C2    90              nop
                003D03C3    
90              nop
                003D03C4    
90              nop
                003D03C5    
90              nop
                003D03C6    
90              nop
                003D03C7    
90              nop
                003D03C8    
90              nop
                003D03C9    
90              nop
                003D03CA    5D              pop    ebp
                003D03CB    8B6D 
00         mov    ebp, dword ptr [ebp]            ; 003D00F3
                003D03CE    8B7C24 20       mov    edi, dword ptr [esp+0x20]        ; 取出CALL調用API的下面一行地址
                003D03D2    8BB5 81040000   mov    esi, dword ptr [ebp+0x481]      ; 1B09
                003D03D8    03F5            add    esi, ebp
                003D03DA    8B06            mov    eax
, dword ptr [esi]
                003D03DC    33D2            xor    edx
, edx
                003D03DE    B9 
02000000     mov    ecx, 0x2
                003D03E3    F7E1            mul    ecx
                003D03E5    D1E8            shr    eax
, 1
                003D03E7    3BF8            cmp    edi
, eax                        ; EDI中存放的是目標IAT,EAX不停的遍歷
                003D03E9    75 0A           jnz    short 003D03F5
                003D03EB    0AD2            or      dl
, dl
                003D03ED    
75 04             jnz    short 003D03F3          ; CALL/ JMP的分流器。
                003D03EF    EB 09            jmp    short 003D03FA
                003D03F1    EB 
02             jmp    short 003D03F5
                003D03F3    EB 
13             jmp    short 003D0408
                003D03F5    83C6 
08          add    esi, 0x8
                003D03F8  ^ EB E0             jmp    short 003D03DA
                003D03FA    8B46 
04          mov    eax, dword ptr [esi+0x4]
                003D03FD    
3306                xor    eax, dword ptr [esi]
                003D03FF    
894424 FC       mov    dword ptr [esp-0x4], eax
                003D0403    
61                     popad
                003D0404    FF6424 DC       jmp    dword ptr 
[esp-0x24]
                003D0408    8B46 
04            mov    eax, dword ptr [esi+0x4]        ; 如果想定了,那就把[ESI+0x4]的內容跟[ESI]的內容異或,得到的就是正確的API地址了
                003D040B    3306                 xor    eax, dword ptr [esi]
                003D040D    
894424 FC       mov    dword ptr [esp-0x4], eax
                003D0411    
61                     popad
                003D0412    83C4 
04           add    esp, 0x4
                003D0415    FF6424 D8       jmp    dword ptr 
[esp-0x28]            ; JMP到正確的API地址中
        }
}


理論上講,按照上面的分析,改寫類似于如下的代碼:

        00406508    90                               nop
        
00406509    E8 B29EFCFF           call 003D03C0


這樣的代碼,寫個腳本修復所有的代碼這個殼應該就算是脫OK了。
可是,情況卻不是這樣的,我們在運行到:

004065CC    53                       push    ebx
004065CD    8BD8                 mov    ebx
, eax
004065CF    33C0                   xor    eax
, eax
004065D1    A3 
88774500     mov    dword ptr [0x457788], eax
004065D6    6A 
00                 push    0x0
004065D8    E8 2BFFFFFF   call    
00406508


這里的代碼的時候,程序莫名奇妙的異常了,查了一下異常信息是:0x80000004 (SINGLE STEP)異常。
具體原因,我水平有限,沒有辦法,我們就在到達OEP以前來修復這個IAT。

具體過程如下:

        00406508    90                               nop
        
00406509    E8 B29EFCFF           call 003D03C0

 

根據這個代碼,我們重新加載程序,在地址00406508上下內存寫入斷點。運行程序,來到如下代碼:

003D01B3    8BF8            mov    edi, eax
003D01B5    8BCA            mov    ecx
, edx
003D01B7    
56              push    esi
003D01B8    F3:A4           rep    movs byte ptr es:
[edi], byte ptr>; 在這里了
003D01BA    5E              pop    esi
003D01BB    
53              push    ebx
003D01BC    
68 00800000     push    0x8000
003D01C1    6A 
00           push    0x0
003D01C3    
56              push    esi
003D01C4    FF95 
69040000   call    dword ptr [ebp+0x469]
003D01CA    5B              pop    ebx
003D01CB    83C3 
04         add    ebx, 0x4
003D01CE  ^ EB A6           jmp    short 003D0176


這時我們去看一下我們要關注的地址已經被改成了什么樣子:

00406508    90                       nop
00406509    E8 00000000      call    0040650E
0040650E    8BC0                  mov    eax
, eax


看到了吧,我們的00406508地址處的代碼已經被改寫了,只不過還沒有完全寫完。
我們繼續看代碼:

003D026F    03BD 48040000   add    edi, dword ptr [ebp+0x448]
003D0275    83C2 
05         add    edx, 0x5
003D0278    8BF2            mov    esi
, edx
003D027A    
56              push    esi
003D027B    FF95 3C040000   call    dword ptr 
[ebp+0x43C]                          ; kernel32.GetModuleHandleA
003D0281    0BC0            or      eax, eax
003D0283    
75 07           jnz    short 003D028C
003D0285    
56              push    esi
003D0286    FF95 
40040000   call    dword ptr [ebp+0x440]
003D028C    0FB64E FF       movzx  ecx
, byte ptr [esi-0x1]
003D0290    03F1            add    esi
, ecx

003D02B8    
42              inc    edx
003D02B9    
52              push    edx
003D02BA    
52              push    edx
003D02BB    
56              push    esi
003D02BC    FF95 
38040000   call    dword ptr [ebp+0x438]                          ; kernel32.GetProcAddress
003D02C2    8907            mov    dword ptr [edi], eax                          ; 保存API地址
003D02C4    5A              pop    edx
003D02C5    0FB642 FF       movzx  eax
, byte ptr [edx-0x1]
003D02C9    03D0            add    edx
, eax
003D02CB    
42              inc    edx
003D02CC    83C7 
04         add    edi, 0x4
003D02CF    
59              pop    ecx
003D02D0  ^ E2 CA           loopd  short 003D029C                                
; 循環獲取所有用到的API地址
003D02D2  ^ EB 93           jmp    short 003D0267                                ; 繼續其它DLL


我們可以猜測出來,接下來程序要做什么。
對的,它是要把所有API調用的地址代碼從類似于:

00406508    90                      nop
00406509    E8 00000000     call    0040650E
0040650E    8BC0                 mov    eax
, eax


改寫成:

00406508    90                            nop
00406509    E8 B29EFCFF        call 003D03C0


就是說,程序會自動定位所有要改寫的地方,我們就可以借用這個時機,來修復我們的IAT調用。
好,我們繼續。

003D02D4    8B85 79040000  mov    eax, dword ptr [ebp+0x479]
003D02DA    83F8 
01        cmp    eax, 0x1
003D02DD    0F85 
9E000000  jnz    003D0381
003D02E3    8BBD 
81040000  mov    edi, dword ptr [ebp+0x481]                    ; 1B90
003D02E9    03FD            add    edi, ebp
003D02EB    8DB5 CD020000  lea    esi
, dword ptr [ebp+0x2CD]
003D02F1    8B07            mov    eax
, dword ptr [edi]
003D02F3    0BC0            or      eax
, eax
003D02F5    
75 02          jnz    short 003D02F9
003D02F7    EB 1D          jmp    short 003D0316
003D02F9    
25 FFFFFF7F    and    eax, 0x7FFFFFFF                                ; 很關鍵的代碼,用來計算填充位置的算法
003D02FE    8BDE            mov    ebx, esi


為了相信跟蹤我們熟悉的API,以保證代碼的準確性,我們可以在這里下條件斷點: EAX == 0x0040650E,然后自己跟蹤這個過程。
經過調試,我們知道,此時的[EDI]跟0x0x7FFFFFFF&運算以后,再減去4就是我們要填充的地址了。
而[EDI+4]中存放的就是我們需要的API地址。

當然,如果相信分析過我們逆向班15課的課后作業的話,我們很明白,這個殼加密的IAT不一定全是FF25類型的,還有FF15類型的。
詳細分析003D03C0這個CALL的話,我們就可以明白,它有一個分流器來處理這些IAT加密。

003D0300    2BD8            sub    ebx, eax
003D0302    
8958 FC        mov    dword ptr [eax-0x4], ebx                      ; 改寫代碼了~~~~,也就是說,我們就在這里下手,嘿嘿
003D0305    83C7 04        add    edi, 0x4
003D0308    8B1F            mov    ebx
, dword ptr [edi]              ; 看到了吧,EDI+4中的內容就是API地址的指針。
003D030A    8B0B            mov    ecx, dword ptr [ebx]
003D030C    334F FC        xor    ecx
, dword ptr [edi-0x4]
003D030F    890F            mov    dword ptr 
[edi], ecx
003D0311    83C7 
04        add    edi, 0x4                                ; 繼續下一個位置。
003D0314  ^ EB DB          jmp    short 003D02F1


好了,現在讓我們整理一下我們現在所掌握的信息:

整理

1、003D0302    mov  dword ptr [eax-0x4], ebx  ; 這里的[EAX-4]CALL后面的地址。
        由此我們知道,[EAX-6]就是JMP的機器指令地址了,我們可以給這里賦值為FF25,也就是:mov    word ptr [eax-0x6], 0x25FF

2、我們已經知道了如何獲取API地址,以及填寫到哪個地址。


現在萬事俱備,就差我們去修補它了,好我們開始動手修改這個殼的代碼來修復IAT了。
先找一個足夠大的空間,來寫我們的代碼,我找到下面的地址:

003D0593    90              nop
003D0594    
90              nop


好,我們先改個跳轉,來轉移到我們的這個地址上:

003D02F9    33D2            xor    edx, edx                        ; 很關鍵的代碼,用來計算填充位置的算法
003D02FB    B9 02000000    mov    ecx, 0x2
003D0300    F7E1            mul    ecx
003D0302    D1E8            shr    eax
, 1                          ; 改寫代碼了~~~~,也就是說,我們就在這里下手,嘿嘿
003D0304    08D2            or      dl, dl
003D0306    0F85 
87020000  jnz    003D0593                        ; 這里是CALL/JMP的分流,跳了就是FF25類型的,按照FF25的方式休息,如果不跳,就是按照FF15的方式修復
003D030C    E9 9D020000    jmp    003D05AE                        ; 跳到FF15的修復代碼中

33 D2 B9 02 00 00 00 F7 E1 D1 E8 08 D2 0F 85 87 02 00 00 E9 9D 02 00 00

到我們新找到空間將代碼改寫成如下樣子:

003D0593    66:C740 FA FF25 mov    word ptr [eax-0x6], 0x25FF      ; FF25的修復代碼。
003D0599    8B5F 04        mov    ebx, dword ptr [edi+0x4]
003D059C    
8958 FC        mov    dword ptr [eax-0x4], ebx
003D059F    8B0B            mov    ecx
, dword ptr [ebx]
003D05A1    334F FC        xor    ecx
, dword ptr [edi-0x4]
003D05A4    890F            mov    dword ptr 
[edi], ecx
003D05A6    83C7 
08        add    edi, 0x8
003D05A9  ^ E9 43FDFFFF    jmp    003D02F1
003D05AE    
66:C740 FA FF15 mov    word ptr [eax-0x6], 0x15FF      ; FF15的修復代碼
003D05B4    8B5F 04        mov    ebx, dword ptr [edi+0x4]
003D05B7    
8958 FC        mov    dword ptr [eax-0x4], ebx
003D05BA    8B0B            mov    ecx
, dword ptr [ebx]
003D05BC    334F FC        xor    ecx
, dword ptr [edi-0x4]
003D05BF    890F            mov    dword ptr 
[edi], ecx
003D05C1    83C7 
08        add    edi, 0x8
003D05C4  ^ E9 28FDFFFF    jmp    003D02F1

66 C7 40 FA FF 25 8B 5F 04 89 58 FC 8B 0B 33 4F FC 89 0F 83 C7 08 E9 43 FD FF FF 66 C7 40 FA FF
15 8B 5F 04 89 58 FC 8B 0B 33 4F FC 89 0F 83 C7 08 E9 43 FD FF FF

 執行完這些代碼,讓我們看下API調用的代碼,如下:

00406505    8D40 00        lea    eax, dword ptr [eax]
00406508  - FF25 8CE74500  jmp    dword ptr [0x45E78C]            ; kernel32.GetModuleHandleA
0040650E    8BC0            mov    eax, eax
00406510  - FF25 88E74500  jmp    dword ptr [0x45E788]            ; kernel32.LocalAlloc
00406516    8BC0            mov    eax, eax
00406518  - FF25 84E74500  jmp    dword ptr [0x45E784]            ; kernel32.TlsGetValue
0040651E    8BC0            mov    eax, eax
00406520  - FF25 80E74500  jmp    dword ptr [0x45E780]            ; kernel32.TlsSetValue
00406526    8BC0            mov    eax, eax
00406528    50              push    eax
00406529    6A 40          push    0x40
0040652B    E8 E0FFFFFF    call    
00406510                        ; jmp to kernel32.LocalAlloc


不過這個殼好像沒有FF15類型的,好,到現在已經全部修復完成了。

接下來就是讓代碼修復OEP出的代碼,然后我們跳到OEP處就可以了。
但是如果我們現在繼續在00401000段下個斷點程序會拋異常而不會像我們一開始那樣,到OEP附近。
我們單步跟蹤:

003D0429    8D85 D7020000   lea     eax, dword ptr [ebp+0x2D7]
003D042F    
8947 08         mov     dword ptr [edi+0x8], eax
003D0432    8B4F 0C         mov     ecx
, dword ptr [edi+0xC]
003D0435    03C1            add     eax
, ecx
003D0437    
8947 0C         mov     dword ptr [edi+0xC], eax
003D043A    8B95 E0030000   mov     edx
, dword ptr [ebp+0x3E0]
003D0440    8DB5 E4030000   lea     esi
, dword ptr [ebp+0x3E4]
003D0446    B8 FFFF0000     mov     eax
, 0xFFFF
003D044B    
3385 FC030000   xor     eax, dword ptr [ebp+0x3FC]
003D0451    
3385 00040000   xor     eax, dword ptr [ebp+0x400]
003D0457    
3385 04040000   xor     eax, dword ptr [ebp+0x404]
003D045D    8B3E            mov     edi
, dword ptr [esi]
003D045F    83C6 
04         add     esi, 0x4
003D0462    B9 
08000000     mov     ecx, 0x8
003D0467    8A1F            mov     bl
, byte ptr [edi]
003D0469    32C3            xor     al
, bl
003D046B    D1E8            shr     eax
, 1
003D046D    
73 05           jnb     short 003D0474
003D046F    
35 01A00000     xor     eax, 0xA001
003D0474  ^ E2 F5           loopd   short 003D046B
003D0476    
47              inc     edi
003D0477    3B3E            cmp     edi
, dword ptr [esi]
003D0479  ^ 
75 E7           jnz     short 003D0462
003D047B    83C6 
04         add     esi, 0x4
003D047E    83EA 
01         sub     edx, 0x1
003D0481    83FA 
00         cmp     edx, 0x0
003D0484  ^ 
75 D7           jnz     short 003D045D                   ; 循環修復并填充OEP處的代碼
003D0486    8DBD 0C040000   lea     edi, dword ptr [ebp+0x40C]
003D048C    
66:8B1F         mov     bx, word ptr [edi]
003D048F    33D8            xor     ebx
, eax
003D0491    
66:891F         mov     word ptr [edi], bx
003D0494    
66:8B5F 02      mov     bx, word ptr [edi+0x2]
003D0498    33D8            xor     ebx
, eax
003D049A    
66:895F 02      mov     word ptr [edi+0x2], bx
003D049E    8DB5 
14040000   lea     esi, dword ptr [ebp+0x414]
003D04A4    8BBD 0C040000   mov     edi
, dword ptr [ebp+0x40C]
003D04AA    8B8D 
10040000   mov     ecx, dword ptr [ebp+0x410]
003D04B0    
66:8B1E         mov     bx, word ptr [esi]
003D04B3    33D8            xor     ebx
, eax
003D04B5    
66:891F         mov     word ptr [edi], bx               ; 如果上面單步跟蹤執行的話,這里的EDI不是一個正常的地址,這里就會出異常。
003D04B8    83C7 02         add     edi, 0x2
003D04BB    83C6 
02         add     esi, 0x2
003D04BE  ^ E2 F0           loopd   short 003D04B0                   
; 接著修復OEP處的代碼。
003D04C0    8B85 0C040000   mov     eax, dword ptr [ebp+0x40C]       ; 這里取出OEP
003D04C6    894424 FC       mov     dword ptr [esp-0x4], eax
003D04CA    
61              popad
003D04CB    FF6424 DC       jmp     dword ptr 
[esp-0x24]             ; 跳到OEP去。

當我們單步跟蹤到003D04B5的時候,發現,EDI不是一個正常的地址,往這里寫內容,程序會異常的。
通過我們剛才到OEP的調試,我們知道,edi本身應該是我們OEP的地址,這個代碼就是填充OEP用的。我們先不管它。

在003D04C0這里,將EAX修改為我們的OEP,然后跳到OEP以后,手工改好了OEP的代碼,dump出一個文件,修復了下轉存文件。可是問題提示C0000005初始化錯誤,本來以為全盤皆輸了,經Nick提示,說是要修復TLS表。
所以,我按照沒脫殼的程序把TLS填好,重新計算了下索引變量的虛擬地址(就是TLS表的RVA+SIZE)。然后保存,運行,OK了

問題解決了,嘿嘿。

加殼的程序,脫殼后的程序,已經脫殼腳本還有分析筆記下載/Files/besterChen/Unpack/01/UpkMe.rar

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            开心色5月久久精品| 亚洲韩国日本中文字幕| 性一交一乱一区二区洋洋av| 亚洲欧洲日韩在线| 欧美激情精品久久久| 亚洲第一网站免费视频| 欧美大胆成人| 99综合在线| 亚洲影院污污.| 欧美一区二区三区免费看| 久久se精品一区二区| 嫩草影视亚洲| 欧美午夜精品久久久久免费视| 国产精品视频自拍| 一色屋精品视频在线观看网站| 亚洲国产专区| 欧美一区二区视频网站| 久久深夜福利| 亚洲看片网站| 久久国产夜色精品鲁鲁99| 欧美精品一区二区久久婷婷| 国产精品网站一区| 在线观看视频一区二区| 亚洲欧美日韩国产另类专区| 久久综合九色| 亚洲午夜电影| 欧美成人一区在线| 国产亚洲精品自拍| 这里只有视频精品| 美日韩在线观看| 亚洲图片欧洲图片日韩av| 久久中文精品| 国产精品夜色7777狼人| 日韩网站在线观看| 免费成人美女女| 欧美诱惑福利视频| 欧美视频日韩视频| 亚洲欧洲日产国产综合网| 欧美在线播放| 一本色道久久综合亚洲91| 免费欧美在线视频| 韩日成人av| 欧美在线观看你懂的| 一本色道久久综合亚洲精品按摩| 蜜臀a∨国产成人精品| 国产欧美午夜| 欧美影院视频| 亚洲免费影视第一页| 欧美日韩国产123| 亚洲日本成人网| 免费成人性网站| 久久国产色av| 在线看日韩欧美| 美女脱光内衣内裤视频久久影院| 亚洲欧美成人| 亚洲国产经典视频| 久久久久高清| 欧美亚洲三区| 国产亚洲激情视频在线| 欧美一二三区精品| 亚洲影音先锋| 国产精品国产成人国产三级| 亚洲综合成人在线| 亚洲美洲欧洲综合国产一区| 欧美久久视频| 亚洲在线1234| 欧美亚洲自偷自偷| 国产亚洲欧美一区| 久久美女性网| 久久综合九色九九| 亚洲国产精品专区久久| 亚洲国产精品福利| 欧美视频国产精品| 欧美一区2区视频在线观看| 欧美在线观看一区二区| 韩国欧美国产1区| 亚洲国产成人精品视频| 欧美日韩一区二区三区视频| 亚洲欧美日韩精品久久亚洲区| 亚洲美女精品成人在线视频| 国产精品久久久久久久久久尿| 久久国产精品色婷婷| 久久婷婷蜜乳一本欲蜜臀| 亚洲激情在线激情| 亚洲乱码久久| 国产亚洲人成a一在线v站 | 免费在线观看精品| 亚洲精品在线观看免费| 一区二区三区日韩欧美精品| 国产午夜精品理论片a级探花 | 欧美视频一区二区在线观看 | 久久综合网hezyo| 免费在线成人av| 亚洲女女做受ⅹxx高潮| 欧美一区二区三区在线观看| 亚洲国产精品第一区二区三区| 日韩视频在线免费| 国内揄拍国内精品少妇国语| 亚洲高清久久网| 国产精品视频你懂的| 亚洲二区在线观看| 国产午夜精品美女毛片视频| 亚洲欧洲一区二区在线观看| 国模大胆一区二区三区| 日韩视频在线永久播放| 一区二区在线视频播放| 99国产麻豆精品| 亚洲国产精品va在线看黑人动漫 | 日韩视频三区| 精品成人久久| 日韩亚洲精品视频| 亚洲国产视频a| 欧美在线视频免费观看| 亚洲一区二区三区精品在线观看| 久久三级福利| 久久九九国产精品| 国产精品久久影院| 亚洲欧洲在线免费| 在线观看视频一区二区| 欧美一区视频在线| 亚洲一二三区在线观看| 欧美va亚洲va国产综合| 久久影音先锋| 在线播放豆国产99亚洲| 欧美中文日韩| 欧美一级免费视频| 欧美涩涩网站| 一区二区欧美激情| 亚洲色图制服丝袜| 欧美电影免费观看高清完整版| 久久中文欧美| 一区在线播放视频| 久久久精品日韩欧美| 久久综合伊人77777| 激情久久五月| 久久九九免费视频| 久久亚洲综合色| 一区二区在线观看av| 久久露脸国产精品| 欧美jizzhd精品欧美喷水| 在线观看欧美日韩| 免费在线观看成人av| 亚洲国产精品v| 日韩一区二区电影网| 欧美激情偷拍| 夜夜嗨av一区二区三区网页| 亚洲女人小视频在线观看| 国产美女精品人人做人人爽| 亚洲一区二区精品视频| 久久九九精品| 日韩视频免费观看高清完整版| 欧美久久综合| 亚洲免费影院| 欧美国产精品v| 99re成人精品视频| 欧美日韩亚洲综合一区| 一区二区不卡在线视频 午夜欧美不卡在 | 亚洲欧美在线网| 久久久久中文| 悠悠资源网亚洲青| 欧美精品九九| 在线一区二区三区四区| 欧美在线影院| 91久久久在线| 国产精品久久一级| 久久精品二区三区| 亚洲国产成人久久综合一区| 亚洲一区日本| 亚洲高清视频一区| 欧美日韩综合视频| 欧美在线视频观看免费网站| 91久久精品国产| 国产有码一区二区| 91久久精品国产91性色| 亚洲尤物视频网| 在线播放精品| 国产精品hd| 老司机精品久久| 亚洲欧美日韩在线一区| 91久久在线播放| 久久美女性网| 午夜精品剧场| 99www免费人成精品| 国产一区欧美| 欧美日韩情趣电影| 久久天天狠狠| 亚洲欧美国产77777| 亚洲激情一区二区| 久久综合久久久久88| 亚洲欧美一区二区三区久久| 亚洲精品国产日韩| 黄色亚洲免费| 国产欧美日韩一区二区三区在线观看| 欧美劲爆第一页| 久热综合在线亚洲精品| 亚洲欧美日韩在线高清直播| 亚洲精品偷拍| 最新亚洲一区| 亚洲国产精品久久精品怡红院| 久久久久久久综合狠狠综合|