簡略分析某外掛外殼

簡略分析某外掛外殼
【目    標】:英雄王座 v0.001.014
【工    具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F
【任    務】:脫馬甲
【操作平臺】:Windows Xp sp2
【作    者】:loveboom[DFCG][FCG][US]
【簡要說明】:這裏一個比較奇怪的外殼,在外面看不到關於這個殼的任何說明,殼通過一個DLL對原程序進行解壓,解壓完畢執行原程序,是一個比較有新意的加殼方式。
【詳細過程】:
OD沒什麼特別的設置,打開所有異常項就行了。
先直接用Lordpe 看看這個殼的一點信息:

比較有意思,程序只用一個DLL來解壓並運行程序,
因爲殼是通過DLL解壓後,再運行,所以我們不能直接讓OD停在OEP處,因爲OD一般是在程序的oep處下個cc斷,這樣纔會中斷在程序入口處。改一下OD的設置:
讓OD中斷在系統DLL中。
這樣就可以加載程序了,因爲殼後面會改IAT到殼裏,所以我們先要在程序裏新增一個段。我的做法是用winhex新鍵一個大小爲35KB(這個因IAT大小而定)的空白文件,然後用LORDPE載入程序文件並新增一個段,選擇從磁盤載入段就行了。
最下面那個段就是我新加的.
現在再次用OD載入目標程序,現在中斷在系統中:
7C921231    C3              RETN                                     ; 中斷在系統dll中
7C921232    8BFF            MOV EDI,EDI
斷下後在程序的CODE段下F2斷點:
然後按F9運行程序,運行後,程序中斷在ShellDll.dll中,也就是DLL解碼程序文件處:
100025A2    8BCE            MOV ECX,ESI                              ; 如果沒有解壓完跳到這裏繼續
100025A4    6A 01           PUSH 1
100025A6    8B11            MOV EDX,DWORD PTR DS:[ECX]               ; 中斷在這裏
100025A8    895424 18       MOV DWORD PTR SS:[ESP+18],EDX            ; 這裏的代碼對原程序進行解碼.
100025AC    8B41 04         MOV EAX,DWORD PTR DS:[ECX+4]
100025AF    894424 1C       MOV DWORD PTR SS:[ESP+1C],EAX
100025B3    8B51 08         MOV EDX,DWORD PTR DS:[ECX+8]
100025B6    895424 20       MOV DWORD PTR SS:[ESP+20],EDX
100025BA    8D5424 18       LEA EDX,DWORD PTR SS:[ESP+18]
100025BE    8B41 0C         MOV EAX,DWORD PTR DS:[ECX+C]
100025C1    8D4C24 28       LEA ECX,DWORD PTR SS:[ESP+28]
100025C5    51              PUSH ECX
100025C6    55              PUSH EBP
100025C7    52              PUSH EDX
100025C8    8D4C24 20       LEA ECX,DWORD PTR SS:[ESP+20]
100025CC    894424 30       MOV DWORD PTR SS:[ESP+30],EAX
100025D0    E8 5BEBFFFF     CALL 10001130
100025D5    8B4C24 24       MOV ECX,DWORD PTR SS:[ESP+24]
100025D9    8B5424 28       MOV EDX,DWORD PTR SS:[ESP+28]
100025DD    8BC6            MOV EAX,ESI
100025DF    83C6 10         ADD ESI,10
100025E2    4B              DEC EBX
100025E3    8908            MOV DWORD PTR DS:[EAX],ECX
100025E5    8B4C24 2C       MOV ECX,DWORD PTR SS:[ESP+2C]
100025E9    8950 04         MOV DWORD PTR DS:[EAX+4],EDX
100025EC    8B5424 30       MOV EDX,DWORD PTR SS:[ESP+30]
100025F0    8948 08         MOV DWORD PTR DS:[EAX+8],ECX
100025F3    8950 0C         MOV DWORD PTR DS:[EAX+C],EDX
100025F6  ^ 75 AA           JNZ SHORT 100025A2                       ; 沒解壓完跳回去
100025F8    5D              POP EBP
100025F9    5B              POP EBX
100025FA    8D4C24 08       LEA ECX,DWORD PTR SS:[ESP+8]
100025FE    C74424 34 FFFFF>MOV DWORD PTR SS:[ESP+34],-1
10002606    C1E7 04         SHL EDI,4
10002609    E8 22EAFFFF     CALL 10001030
1000260E    8B4C24 2C       MOV ECX,DWORD PTR SS:[ESP+2C]
10002612    8BC7            MOV EAX,EDI
10002614    5F              POP EDI
10002615    5E              POP ESI
10002616    64:890D 0000000>MOV DWORD PTR FS:[0],ECX
1000261D    83C4 30         ADD ESP,30
10002620    C2 1000         RETN 10                                  ; 我們可以直接在這裏按F4,執行到這裏
斷下後,直接F4執行到10002620處,注意因爲OD在程序OEP處下了cc,這裏解碼後的OEP部分代碼錯誤,所以我們要在這時改一個OEP代碼,然後再改回去就行了。操作完畢後再一次CODE段斷點,這樣就到了IAT處理塊,我們來分析一下IAT的處理:
1000236B    8B4424 0C       MOV EAX,DWORD PTR SS:[ESP+C]
1000236F    C606 E9         MOV BYTE PTR DS:[ESI],0E9                ; 再一次下段後中斷在這裏,這裏填入遠程跳,讓IAT的部分去殼裏
10002372    2BC6            SUB EAX,ESI                              ; 計算跳轉的距離
10002374    83C0 FB         ADD EAX,-5
10002377    8946 01         MOV DWORD PTR DS:[ESI+1],EAX             ; 填入跳去遠程地址
1000237A    8B5424 14       MOV EDX,DWORD PTR SS:[ESP+14]            ; 取要保存輸入表的地址
1000237E    8B4424 20       MOV EAX,DWORD PTR SS:[ESP+20]            ; 取出跳去IAT的代碼,用於然後比較,跳去API一般是 ff25,ff15之類的等
10002382    3D 2D8B0000     CMP EAX,8B2D                             ; 比較是不是mov ebp,ds:[xxxxxxxx]的樣式
10002387    893A            MOV DWORD PTR DS:[EDX],EDI               ; 把IAT填入殼裏面
10002389    0F8F 9C000000   JG 1000242B                              ; 如果大於8b2d就跳
1000238F    0F84 86000000   JE 1000241B                              ; 如果等於就跳去8b2d情況的處理
10002395    3D 158B0000     CMP EAX,8B15                             ; 這裏比較是不是 MOV EDX, DS:[XXXXXXXX]的樣式
1000239A    7F 68           JG SHORT 10002404                        ; 如果大於就跳
1000239C    74 38           JE SHORT 100023D6                        ; 等於就跳去處理8b15的情況
1000239E    3D A1000000     CMP EAX,0A1                              ; 比較是不是 MOV EAX,DS:[xxxxxxxx]的情況
100023A3    74 1B           JE SHORT 100023C0                        ; 如果是則跳去處理
100023A5    3D 0D8B0000     CMP EAX,8B0D                             ; 判斷是否爲MOV ECX,DS:[xxxxxxxx]
100023AA    0F85 D9000000   JNZ 10002489                             ; 如果不是則跳
100023B0    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理MOV ECX,DS:[xxxxxxxx]的情況
100023B4    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
100023B7    C601 8B         MOV BYTE PTR DS:[ECX],8B
100023BA    C641 01 0D      MOV BYTE PTR DS:[ECX+1],0D
100023BE    EB 24           JMP SHORT 100023E4
100023C0    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理MOV EAX,DS:[xxxxxxxx]的情況
100023C4    8D46 05         LEA EAX,DWORD PTR DS:[ESI+5]
100023C7    C601 A1         MOV BYTE PTR DS:[ECX],0A1
100023CA    8B5424 14       MOV EDX,DWORD PTR SS:[ESP+14]
100023CE    8951 01         MOV DWORD PTR DS:[ECX+1],EDX
100023D1    83C1 05         ADD ECX,5                                ; 因爲MOV EAX,DS:[xxxxxxxx]機器碼只有五位,所以處理有一點不同
100023D4    EB 18           JMP SHORT 100023EE
100023D6    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理MOV EDX, DS:[XXXXXXXX]的情況
100023DA    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
100023DD    C601 8B         MOV BYTE PTR DS:[ECX],8B
100023E0    C641 01 15      MOV BYTE PTR DS:[ECX+1],15
100023E4    8B5424 14       MOV EDX,DWORD PTR SS:[ESP+14]            ; 處理完那個跳之裏類的,就寫出DS:[xxxxxxxx]中的地址,地址就是eip的前一句的地址
100023E8    8951 02         MOV DWORD PTR DS:[ECX+2],EDX
100023EB    83C1 06         ADD ECX,6
100023EE    2BC1            SUB EAX,ECX                              ; 計算距離
100023F0    C601 E9         MOV BYTE PTR DS:[ECX],0E9                ; 在殼裏增加完跳去API的代碼後,填入要jmp返回程序的代碼
100023F3    83E8 05         SUB EAX,5
100023F6    5F              POP EDI
100023F7    8941 01         MOV DWORD PTR DS:[ECX+1],EAX             ; 填入返回地址
100023FA    5E              POP ESI
100023FB    33C0            XOR EAX,EAX
100023FD    5B              POP EBX
100023FE    83C4 10         ADD ESP,10
10002401    C2 0C00         RETN 0C
10002404    3D 1D8B0000     CMP EAX,8B1D                             ; 判斷是否爲MOV EBX,DS:[xxxxxxxx]
10002409    75 7E           JNZ SHORT 10002489                       ; 如果不是則跳
1000240B    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理MOV EBX,DS:[xxxxxxxx]的情況
1000240F    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
10002412    C601 8B         MOV BYTE PTR DS:[ECX],8B
10002415    C641 01 1D      MOV BYTE PTR DS:[ECX+1],1D
10002419  ^ EB C9           JMP SHORT 100023E4
1000241B    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理mov ebp,ds:[xxxxxxxx]的情況
1000241F    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
10002422    C601 8B         MOV BYTE PTR DS:[ECX],8B
10002425    C641 01 2D      MOV BYTE PTR DS:[ECX+1],2D
10002429  ^ EB B9           JMP SHORT 100023E4
1000242B    3D 15FF0000     CMP EAX,0FF15                            ; 判斷是否爲CALL DS:[xxxxxxxx]
10002430    7F 3D           JG SHORT 1000246F                        ; 如果大於則跳
10002432    74 2C           JE SHORT 10002460                        ; 等於就跳去處理CALL DS:[xxxxxxxx]
10002434    2D 358B0000     SUB EAX,8B35                             ; 這裏處理否爲MOV ESI,DS:[xxxxxxxx]
10002439    74 15           JE SHORT 10002450                        ; 相等則跳
1000243B    83E8 08         SUB EAX,8                                ; 這裏用另一種方式判斷是否爲MOV EDI,DS:[xxxxxxxx]
1000243E    75 49           JNZ SHORT 10002489                       ; 如果不是則跳
10002440    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理MOV EDI,DS:[xxxxxxxx]的情況
10002444    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
10002447    C601 8B         MOV BYTE PTR DS:[ECX],8B
1000244A    C641 01 3D      MOV BYTE PTR DS:[ECX+1],3D
1000244E  ^ EB 94           JMP SHORT 100023E4
10002450    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理MOV ESI,DS:[xxxxxxxx]的情況
10002454    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
10002457    C601 8B         MOV BYTE PTR DS:[ECX],8B
1000245A    C641 01 35      MOV BYTE PTR DS:[ECX+1],35
1000245E  ^ EB 84           JMP SHORT 100023E4
10002460    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理CALL DS:[xxxxxxxx]的情況
10002464    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
10002467    C601 FF         MOV BYTE PTR DS:[ECX],0FF
1000246A  ^ E9 71FFFFFF     JMP 100023E0
1000246F    3D 25FF0000     CMP EAX,0FF25                            ; 判斷是否爲JMP DS:[xxxxxxxx]
10002474    75 13           JNZ SHORT 10002489                       ; 如果不是則跳
10002476    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]            ; 處理JMP DS:[XXXXXXXX]的情況
1000247A    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
1000247D    C601 FF         MOV BYTE PTR DS:[ECX],0FF
10002480    C641 01 25      MOV BYTE PTR DS:[ECX+1],25
10002484  ^ E9 5BFFFFFF     JMP 100023E4
10002489    5F              POP EDI
1000248A    C743 04 1527000>MOV DWORD PTR DS:[EBX+4],2715
10002491    5E              POP ESI
10002492    83C8 FF         OR EAX,FFFFFFFF
10002495    5B              POP EBX
10002496    83C4 10         ADD ESP,10
10002499    C2 0C00         RETN 0C
看完後總結一下,先把JMP API的代碼跳到殼裏去,IAT的處理除了mov eax,ds:[xxxxxxxx]有點不同之外,其它的都是先填入EAX的值(也就是jmp mov ebp之類的),然後寫入要跳的地址,地址就是當前EIP的前一句的地址也就是eip-4,處理完就填入要返回的地址。
分析完畢我們寫上自己的代碼;
1000237A   /E9 025E0000     JMP 10008181
1000237F   |90              NOP
10002380   |90              NOP
10002381   |90              NOP
10002382   |3D 2D8B0000     CMP EAX,8B2D
10002387   |893A            MOV DWORD PTR DS:[EDX],EDI
10002389   |0F8F 9C000000   JG 1000242B
1000238F   |0F84 86000000   JE 1000241B
10002395   |3D 158B0000     CMP EAX,8B15
1000239A   |7F 68           JG SHORT 10002404
1000239C   |74 38           JE SHORT 100023D6
1000239E   |3D A1000000     CMP EAX,0A1
100023A3   |74 1B           JE SHORT 100023C0
100023A5   |3D 0D8B0000     CMP EAX,8B0D
100023AA   |0F85 D9000000   JNZ 10002489
100023B0   |E9 5C5D0000     JMP 10008111
100023B5   |90              NOP
100023B6   |90              NOP
100023B7   |C601 8B         MOV BYTE PTR DS:[ECX],8B
100023BA   |C641 01 0D      MOV BYTE PTR DS:[ECX+1],0D
100023BE   |EB 24           JMP SHORT 100023E4
100023C0   |E9 4C5D0000     JMP 10008111
100023C5   |90              NOP
100023C6   |90              NOP
100023C7   |C601 A1         MOV BYTE PTR DS:[ECX],0A1
100023CA   |8B5424 14       MOV EDX,DWORD PTR SS:[ESP+14]
100023CE   |8951 01         MOV DWORD PTR DS:[ECX+1],EDX
100023D1   |83C1 05         ADD ECX,5
100023D4   |EB 18           JMP SHORT 100023EE
100023D6   |E9 365D0000     JMP 10008111
100023DB   |90              NOP
100023DC   |90              NOP
100023DD   |C601 8B         MOV BYTE PTR DS:[ECX],8B
100023E0   |C641 01 15      MOV BYTE PTR DS:[ECX+1],15
100023E4   |8B5424 14       MOV EDX,DWORD PTR SS:[ESP+14]
100023E8   |8951 02         MOV DWORD PTR DS:[ECX+2],EDX
100023EB   |83C1 06         ADD ECX,6
100023EE   |2BC1            SUB EAX,ECX
100023F0   |C601 00         MOV BYTE PTR DS:[ECX],0
100023F3   |33C0            XOR EAX,EAX
100023F5   |90              NOP
100023F6   |5F              POP EDI
100023F7   |8941 01         MOV DWORD PTR DS:[ECX+1],EAX
100023FA   |5E              POP ESI
100023FB   |33C0            XOR EAX,EAX
100023FD   |5B              POP EBX
100023FE   |83C4 10         ADD ESP,10
10002401   |C2 0C00         RETN 0C
10002404   |3D 1D8B0000     CMP EAX,8B1D
10002409   |75 7E           JNZ SHORT 10002489
1000240B   |E9 015D0000     JMP 10008111
10002410   |90              NOP
10002411   |90              NOP
10002412   |90              NOP
10002413   |90              NOP
10002414   |90              NOP
10002415   |90              NOP
10002416   |90              NOP
10002417   |90              NOP
10002418   |90              NOP
10002419   |90              NOP
1000241A   |90              NOP
1000241B   |E9 F15C0000     JMP 10008111
10002420   |90              NOP
10002421   |90              NOP
10002422   |90              NOP
10002423   |90              NOP
10002424   |90              NOP
10002425   |90              NOP
10002426   |90              NOP
10002427   |90              NOP
10002428   |90              NOP
10002429   |90              NOP
1000242A   |90              NOP
1000242B   |3D 15FF0000     CMP EAX,0FF15
10002430   |7F 3D           JG SHORT 1000246F
10002432   |74 2C           JE SHORT 10002460
10002434   |2D 358B0000     SUB EAX,8B35
10002439   |74 15           JE SHORT 10002450
1000243B   |83E8 08         SUB EAX,8
1000243E   |75 49           JNZ SHORT 10002489
10002440   |B8 3D8B0000     MOV EAX,8B3D
10002445   |E9 C75C0000     JMP 10008111
1000244A   |90              NOP
1000244B   |90              NOP
1000244C   |90              NOP
1000244D   |90              NOP
1000244E   |90              NOP
1000244F   |90              NOP
10002450   |B8 358B0000     MOV EAX,8B35
10002455   |E9 B75C0000     JMP 10008111
1000245A   |90              NOP
1000245B   |90              NOP
1000245C   |90              NOP
1000245D   |90              NOP
1000245E   |90              NOP
1000245F   |90              NOP
10002460   |E9 AC5C0000     JMP 10008111
10002465   |90              NOP
10002466   |90              NOP
10002467   |90              NOP
10002468   |90              NOP
10002469   |90              NOP
1000246A   |90              NOP
1000246B   |90              NOP
1000246C   |90              NOP
1000246D   |90              NOP
1000246E   |90              NOP
1000246F   |3D 25FF0000     CMP EAX,0FF25
10002474   |75 13           JNZ SHORT 10002489
10002476   |E9 965C0000     JMP 10008111
1000247B   |90              NOP
1000247C   |90              NOP
1000247D   |90              NOP
1000247E   |90              NOP
1000247F   |90              NOP
10002480   |90              NOP
10002481   |90              NOP
10002482   |90              NOP
10002483   |90              NOP
10002484   |90              NOP
10002485   |90              NOP
10002486   |90              NOP
10002487   |90              NOP
10002488   |90              NOP
10002489   |5F              POP EDI
1000248A   |C743 04 1527000>MOV DWORD PTR DS:[EBX+4],2715
10002491   |5E              POP ESI
10002492   |83C8 FF         OR EAX,FFFFFFFF
10002495   |5B              POP EBX
10002496   |83C4 10         ADD ESP,10
10002499   |C2 0C00         RETN 0C
然後在空地上再寫一段:
10008111    8B4C24 10       MOV ECX,DWORD PTR SS:[ESP+10]
10008115    51              PUSH ECX
10008116    8BCE            MOV ECX,ESI                              ; 填入代碼到程序中
10008118    3C A1           CMP AL,0A1
1000811A    74 34           JE SHORT 10008150                        ; 對eax=a1的情況進行處理
1000811C    90              NOP
1000811D    9C              PUSHFD
1000811E    66:8BD0         MOV DX,AX
10008121    66:C1E0 08      SHL AX,8
10008125    8AC6            MOV AL,DH
10008127    9D              POPFD
10008128    66:8901         MOV WORD PTR DS:[ECX],AX                 ; 寫入EAX的值
1000812B    8D46 06         LEA EAX,DWORD PTR DS:[ESI+6]
1000812E    8B5424 18       MOV EDX,DWORD PTR SS:[ESP+18]            ; 因爲前面ECX入棧了,所以這裏是esp+18
10008132    90              NOP
10008133    90              NOP
10008134    90              NOP
10008135    90              NOP
10008136    90              NOP
10008137    90              NOP
10008138    8951 02         MOV DWORD PTR DS:[ECX+2],EDX             ; 填入DS:[XXXXXXXX]中的值
1000813B    59              POP ECX
1000813C    66:C701 0000    MOV WORD PTR DS:[ECX],0                  ; 把原來填入代碼給清空掉
10008141    C741 02 0000000>MOV DWORD PTR DS:[ECX+2],0
10008148  ^ E9 9EA2FFFF     JMP 100023EB                             ; 處理完跳回去
1000814D    90              NOP
1000814E    90              NOP
1000814F    90              NOP
10008150    8801            MOV BYTE PTR DS:[ECX],AL                 ; 對0A1進行處理
10008152    8D46 05         LEA EAX,DWORD PTR DS:[ESI+5]
10008155    8B5424 18       MOV EDX,DWORD PTR SS:[ESP+18]
10008159    8951 01         MOV DWORD PTR DS:[ECX+1],EDX
1000815C    59              POP ECX
1000815D    C601 00         MOV BYTE PTR DS:[ECX],0
10008160    90              NOP
10008161    90              NOP
10008162    C741 01 0000000>MOV DWORD PTR DS:[ECX+1],0
10008169    83E9 01         SUB ECX,1
1000816C  ^ E9 7AA2FFFF     JMP 100023EB                             ; 處理完畢跳回去
10008171    90              NOP
10008172    90              NOP
10008173    90              NOP
10008174    90              NOP
10008175    90              NOP
10008176    90              NOP
10008177    90              NOP
10008178    90              NOP
10008179    90              NOP
1000817A    90              NOP
1000817B    90              NOP
1000817C    90              NOP
1000817D    90              NOP
1000817E    90              NOP
1000817F    90              NOP
10008180    90              NOP
10008181    8B5424 14       MOV EDX,DWORD PTR SS:[ESP+14]            ; 這裏把IAT部分放到程序裏
10008185    81EA 40435F00   SUB EDX,5F4340                           ; 這裏就是把殼的IAT地址放到我們前面新加的段裏,注意,這裏的值,可能每次載入後有所不同
1000818B    90              NOP                                      ; 第二次我們要手工處理一下,每二次正常過的話這裏是5c4010,我們改成5C4004,並在這裏下斷
1000818C    90              NOP                                      ; 後面的我就用腳本來處理
1000818D    90              NOP
1000818E    895424 14       MOV DWORD PTR SS:[ESP+14],EDX
10008192    90              NOP
10008193    90              NOP
10008194    90              NOP
10008195    90              NOP
10008196    90              NOP
10008197    8B4424 20       MOV EAX,DWORD PTR SS:[ESP+20]
1000819B  ^ E9 E2A1FFFF     JMP 10002382
100081A0    90              NOP
向下可以找到處理完IAT的跳:
在上面也下個斷,然後寫腳本:
var value
var edivalue
var sedi
 
mov value,c
 
mov edivalue,edi
and edivalue,ff000000
mov sedi,edivalue
 
run
 
lbl1:
   eoe lbl2
   cmp eip,100021E7                             //判斷有沒有處理完IAT
   je lbl2
   mov edivalue,edi                                 //這裏粗略的處理分界線
   and edivalue,ff000000
   cmp edivalue,sedi
   jne lbl3                                      //如果地址的前兩位不同就認爲是不同
   add value,c                                         
 
lblsub:
   sub edx,value
   cmp edx,5C479C                                //這裏對上面的粗略後留下的部分處理完
   je lbl4
   cmp edx,5C4B0C                               //找到的地址+8
   je lbl4
   cmp edx,5c4c40                                  //找到的地址+8
   je lbl4
 
lblsub1:
   run
   jmp lbl1
 
lbl2:
   ret
 
 
lbl3:
   mov sedi,edivalue                               //發現有所不同就設定一個分界線
   add value,8
   jmp lblsub
 
lbl4:
   add edx,4                                            //這裏也用於設定分界線
   sub value,4
   jmp lblsub1
寫完運行一下腳本,這樣就可以得到很完整的程序,然後DUMP和FIXDUMP一下程序就可以運行了。
好了,脫殼完畢!
注意一下:程序最好不要在xp 下脫,因爲那樣,脫了後的文件在其它平臺上可能會有問題.
第二,這個殼處理IAT不是很好,所以當獲取IAT失敗裏也不會有什麼提示,這一點要我們自己去注意.
抓一下成功的IAT來看看:
Greetz:
 Fly.Jingulong,yock,tDasm.David.ahao.UFO(brother).alan(sister).all of my friends and you!
 
By loveboom[DFCG][FCG]
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章