解决载入(打开)加壳程序后,OD关闭退出的问题
2009-11-29 13:10
741 查看
题目:解决载入(打开)加壳程序后,OD关闭退出的问题
编写:Coderui
邮箱:coderui@163.com
博客: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关闭退出的问题
- 解决载入(打开)加壳程序后,OD关闭退出的问题
- 关于Web程序打开Word、Excel后,不能关闭的问题的一个解决办法
- 解决虚拟键盘关闭后无法退出程序的问题
- Android 下Qt 多层窗口关闭时程序退出的问题 解决
- Win10系统如何解除程序打开被阻止的问题?Win10系统解除程序打开被阻止的解决方法
- MFC关于解决点击关闭,对话框仍有后台程序运行问题
- 关于“打开项目**时发生问题,尝试退出并重新启动应用程序。如果问题仍然存在,则可能是由于正在使用不支持的项目版本,或者项目文件可能损坏”的问题的解决办法。
- Dr. Com 用户认证程序 "其它程序占用控制端口, 请退出重新再试!(1)" 问题的一种解决方法
- 关于各种文件用Editplus的方式打开出现“向程序发送命令时出现问题”的解决方法
- 解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题
- sql server 2000下的关于“provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接”问题的解决
- C# WinForm程序完全退出的问题解决,需要的朋友可以参考一下
- 解决ubuntu中新建rails程序无法打开ruby内置服务器问题!
- 修正ActiveMQ C++客户端(CMS)当服务器关闭程序无法退出问题
- windows 2003 远程桌面关闭 运行程序退出解决
- 关闭程序后,子线程未正确退出引出的内存泄露问题
- 解决VS2010打开Web页面时经常由于内存较低而导致VS2010自动关闭的问题
- MATLAB7.0程序打开后一会就自动关闭的解决方法
- ubuntu linux qq自动退出关闭的问题解决方法