首页
社区
课程
招聘
[旧帖] [原创]解决载入(打开)加壳程序后,OD关闭退出的问题 0.00雪花
发表于: 2009-3-18 10:03 13979

[旧帖] [原创]解决载入(打开)加壳程序后,OD关闭退出的问题 0.00雪花

2009-3-18 10:03
13979
题目:解决载入(打开)加壳程序后,OD关闭退出的问题

编写:Coderui

邮箱:coderui@163.com

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

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

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

问题:
    前不久好象出了一款新的虚拟机加密壳(不知道是什么名字,没见过),这个壳加密过的程序不能够使用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

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 288
活跃值: (53)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
附件样本来自如下地址:
http://bbs.pediy.com/showthread.php?p=593074&posted=1
2009-3-18 10:10
0
雪    币: 15
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
帮我一大忙 谢谢
2009-3-18 14:24
0
雪    币: 288
活跃值: (53)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
客气,能够解决问题就好,呵呵!
2009-3-18 19:13
0
雪    币: 1481
活跃值: (874)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
VMP Anti......
2009-3-19 10:26
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主发的附件是病毒吗?我用毒霸杀不出。
2009-3-19 11:56
0
雪    币: 288
活跃值: (53)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
恩,您说的对。
是我接触的少,谢谢指点!
2009-3-19 13:34
0
雪    币: 288
活跃值: (53)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
8
您好,这个我就不清楚了,不好意思。
我是在本论坛帖子“http://bbs.pediy.com/showthread.php?p=593074&posted=1 ”中转过来的。
2009-3-19 13:35
0
雪    币: 222
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我也遇到过类似的问题, 请问怎么解决:
无壳程序

A.OD加载后(不设置任何断点), 直接F9  \程序的部分功能用不了
B.OD加载后(把目标程序别名另存),\程序的部分功能用不了

关闭OD后,程序一切正常!
2009-4-21 00:09
0
雪    币: 288
活跃值: (53)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
10
内部有反调试、反跟踪的代码。其中一个是检测OD调试器。
动态调试,找到指定位置后,去修改下判断就好了。
检测OD调试器的方法有很多,具体问题,具体分析吧。
2009-4-26 10:48
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢楼主了,我也因为类似的原因卡这了。。。
2009-8-14 20:22
0
雪    币: 44
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
你们都是高手啊,弱弱问一句,为什么不用OD attach进线程看呢。
曾经碰到一个程序,现象正好相反,serv-u用OD载入调试,运行很正常,独立运行程序5分钟内必定退出。后来attach进去发现里面有IsdebugPresent函数,接下来就知道该干什么了。
2009-8-14 22:37
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
试试看,哈哈哈~
2009-8-22 02:56
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
占位思考,测试VMP1.7程序无效。
另,4楼何意,是否也是如此?
2009-8-27 11:32
0
雪    币: 75
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
不错,以后遇到类似情况,也这么搞一下,看看你的方法奏效不。。
2009-8-28 16:29
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
en 有个程序开始经过PEID 看到是overlay,也是导入OD就退出,按照楼主的说法,进行操作后,可以进行调试,也看到了对应的反调试手法
不过后来用ExeInfope直接就定位是这个VM的壳
2009-10-27 16:57
0
雪    币: 110
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
2009-11-1 21:48
0
雪    币: 126
活跃值: (37)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
18
这是我收集的一些方法,能解决大部分自动退出问题

http://bbs.pediy.com/showthread.php?t=102366
2009-12-5 14:53
0
雪    币: 126
活跃值: (37)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
19
vmp的壳可以用高版本的EXEInfo查,低版本的查不出来的
2009-12-6 09:20
0
游客
登录 | 注册 方可回帖
返回
//