解决载入(打开)加壳程序后,OD关闭退出的问题

 

题目:解决载入(打开)加壳程序后,OD关闭退出的问题

编写:Coderui

邮箱:[email protected]

博客:http://hi.baidu.com/coderui

环境:Win XP-SP3,Ollydbg 1.10 cao_cong汉化第二版

关键字:脱壳;OD自动关闭;关闭OD;OD退出;载入后OD自动退出;打开后OD自动退出;

问题:
        “VMProtect”这个壳加密过的程序不能够使用OD(没加载反反调试插件)直接打开调试。原因是在使用OD打开时(还没有开始调试的情况下),OD会马上关闭退出,并且不会出现任何异常提示。

解决:
       昨天找了个时间研究了下这个加壳后的病毒程序样本(exe和dll版),通过多次尝试,发现了一个快速、简单的解决方法,在这里和大家分享下。
       在使用OD调试样本前,我们需要先手动去修改一下这个PE程序“导出表”中的“函数名数目”值。方法:使用“LordPE”打开要编辑的PE程序,然后依次选择[目录]->[导出表对应的“..”按钮],把“函数名数目”的值减1,并点击“保存”按钮,这样就OK了。为了好看些,您也可以把“函数数目”和“函数名数目”的值都同时减1并保存,效果一样。EXE和DLL版的程序都可以使用上述方法去解决这个问题,经过测试方法有效。

解释:
       一般情况下EXE不会加“导出表”,如果加了,就应该给出所导出的API函数。当我们打开加这个壳后的PE程序(EXE版)时,您会发现它存在“导出表”,但“导出表”中并没有导出的API函数。同时“函数数目”和“函数名数目”的值都比原PE程序设置的值大了1(如:EXE版“导出表”列表中显示了0个导出的API函数,壳将其“函数数目”和“函数名数目”的值都设置成了1;DLL版“导出表”列表中显示了0xD个导出的API函数,壳将其“函数数目”和“函数名数目”的值都设置成了0xE。)。所以我们将其减1,就OK了。被修改过的PE程序,可以正常运行,不会有任何影响。
      现在使用OD打开那个被我们修改过的加壳程序,OD就不会自动关闭退出了。这个壳内部还有很多反调试手段,极难搞(目前估计我还搞不定),呵呵!

壳检测出自己正在被调试时,会弹出如下提示信息(点“击确”定后退出):
------------------------------------------------------
C:/Documents and Settings/coderui/桌面/090316-A-0.exe
---------------------------
A debugger has been found running in your system.Please, unload it from memory and restart your program.
---------------------------
确定  
------------------------------------------------------

壳的入口代码如下(EXE版,第一个CALL进去以后,是一个向上的JMP。):
0044CB28 > 68 4EC42D0B     PUSH 0B2DC44E
0044CB2D    E8 E15E0000     CALL 090316-A.00452A13
0044CB32    68 4EE47306     PUSH 673E44E
0044CB37    E8 A75B0000     CALL 090316-A.004526E3
0044CB3C    60              PUSHAD
0044CB3D ^ 76 A6           JBE SHORT 090316-A.0044CAE5
0044CB3F    18E8            SBB AL,CH
0044CB41    A2 17000068     MOV BYTE PTR DS:[68000017],AL
0044CB46    4E              DEC ESI
0044CB47    44              INC ESP
0044CB48    1E              PUSH DS
0044CB49    04 E8           ADD AL,0E8
0044CB4B    14 4C           ADC AL,4C
0044CB4D    0000            ADD BYTE PTR DS:[EAX],AL
0044CB4F    3F              AAS
0044CB50    2F              DAS
0044CB51    026CC7 04       ADD CH,BYTE PTR DS:[EDI+EAX*8+4]
0044CB55    24 7D           AND AL,7D
0044CB57    7B 6E           JPO SHORT 090316-A.0044CBC7
0044CB59    27              DAA
0044CB5A    01C7            ADD EDI,EAX
0044CB5C    83EC FC         SUB ESP,-4
0044CB5F ^ 0F85 D5D9FDFF   JNZ 090316-A.0042A53A
0044CB65    66:0FBAE0 0D    BT AX,0D
0044CB6A    84F4            TEST AH,DH
0044CB6C    8B3C8F          MOV EDI,DWORD PTR DS:[EDI+ECX*4]
0044CB6F    53              PUSH EBX
0044CB70    85FF            TEST EDI,EDI
0044CB72    FF3424          PUSH DWORD PTR SS:[ESP]
0044CB75    E8 4CF0FFFF     CALL 090316-A.0044BBC6
0044CB7A    E9 7B200000     JMP 090316-A.0044EBFA
0044CB7F    68 4E844B03     PUSH 34B844E
0044CB84    E8 63320000     CALL 090316-A.0044FDEC
0044CB89    12B7 37873687   ADC DH,BYTE PTR DS:[EDI+87368737]

壳的入口代码如下(DLL,第一个CALL进去以后,是一个向上的JMP。):
009E602D > 68 96FA1F6F     PUSH 6F1FFA96
009E6032    E8 A5200A00     CALL HookSys.00A880DC
009E6037    F3:A4           REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
009E6039    60              PUSHAD
009E603A    FF7424 10       PUSH DWORD PTR SS:[ESP+10]
009E603E    8B7424 30       MOV ESI,DWORD PTR SS:[ESP+30]
009E6042    66:C70424 0B41 MOV WORD PTR SS:[ESP],410B
009E6048    C70424 0395CB1B MOV DWORD PTR SS:[ESP],1BCB9503
009E604F    C60424 65       MOV BYTE PTR SS:[ESP],65
009E6053    9C              PUSHFD
009E6054    8D6424 38       LEA ESP,DWORD PTR SS:[ESP+38]
009E6058 ^ E9 D10DFFFF     JMP HookSys.009D6E2E
009E605D    68 88FA8FFC     PUSH FC8FFA88
009E6062    E8 31040A00     CALL HookSys.00A86498
009E6067    04 77           ADD AL,77
009E6069    1999 6897FA9F   SBB DWORD PTR DS:[ECX+9FFA9768],EBX
009E606F    68 E85FFF09     PUSH 9FF5FE8
009E6074    00F2            ADD DL,DH
009E6076    6E              OUTS DX,BYTE PTR ES:[EDI]                ; I/O 命令
009E6077    93              XCHG EAX,EBX
009E6078    27              DAA
009E6079    68 9BFAAFCC     PUSH CCAFFA9B
009E607E    E8 51FF0900     CALL HookSys.00A85FD4
009E6083    D023            SHL BYTE PTR DS:[EBX],1
009E6085    B7 C2           MOV BH,0C2
009E6087    52              PUSH EDX
009E6088    68 EEF94FD9     PUSH D94FF9EE
009E608D    E8 06040A00     CALL HookSys.00A86498

你可能感兴趣的:(解决载入(打开)加壳程序后,OD关闭退出的问题)