首页
社区
课程
招聘
一个毙掉OD的系统级杀手
发表于: 2008-3-25 13:12 4163

一个毙掉OD的系统级杀手

2008-3-25 13:12
4163
在研究调Themida 壳时发现的,很强悍

RaiseException的四个参数
参数1-------异常号(由系统发送)
参数2-------异常标志(取1或者0,0表示返回异常处继续执行,1表示不处理)
参数3-------与下面的指针配合用,表示指向的地方一共有几个参数
参数4-------指向调用的地址
我们 可以来做个实验
用OD打开一个加载有KERNEL32.dll和NETDLL.dll模块的文件,然后把代码窗口拉到下面有许多
0000          add     byte ptr [eax], al
0000          add     byte ptr [eax], al
     .....................................
这样的地方,在某个地址开头将这个连续的ASCII二进制串复制上去
0D 0A 0A 0A 25 73 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0A 0D 2D 2D 2D 20 20 20 20 20
20 20 20 20 20 54 68 65 6D 69 64 61 20 50 72 6F 66 65 73 73 69 6F 6E 61 6C 20 20 20 20 20 20 20
20 20 20 20 20 2D 2D 2D 0A 0D 2D 2D 2D 20 20 20 20 20 20 28 63 29 32 30 30 36 20 4F 72 65 61 6E
73 20 54 65 63 68 6E 6F 6C 6F 67 69 65 73 20 20 20 20 20 20 20 20 20 2D 2D 2D 0A 0D 2D 2D 2D 2D
2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D
2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 0A 0A

然后再找个0000  byte ptr [eax], al 这样的空白地方输入以下汇编指令

PUSH   你的ASCII的首地址
PUSH   你上面的那个ASCII首地址的堆栈值
PUSH   2
PUSH   0
PUSH   40010006
call    dword ptr [你的RaiseException函数地址]
断点(防止跑飞)

最后将EIP强行设置到指令的开始处运行,然后查看记录看看发生了什么

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
2
这只是OutputDebugString
riijj的crackme中出现过
2008-3-25 13:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
OutputDebugString是什么?
2008-3-25 13:23
0
雪    币: 47147
活跃值: (20405)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
http://bbs.pediy.com/showthread.php?t=38125
2008-3-25 13:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
拜读了,更正一下刚才的错误,第一个参数不是错误地址,而是异常号,几乎是你填什么进去系统就发还什么给你,奇怪的是如果是40010006这个数值却不会发还。
2008-3-25 14:08
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
6
你居然还记得这篇
2008-3-25 15:14
0
游客
登录 | 注册 方可回帖
返回
//