首页
社区
课程
招聘
[原创]周末有点时间系列:一击必杀检测OD
发表于: 2012-8-28 06:25 13108

[原创]周末有点时间系列:一击必杀检测OD

2012-8-28 06:25
13108
玩了一把内核的创建真实的objectType玩后,我正好处理一个工作上的问题要检测某些东西,而且不能内核hook,不能注入DLL或者代码,只能依靠标准的系统api~~
工作中的问题解决后,突发奇想能不能用同样的方式来检测od。
这个问题的描述大体上是:
1.需要比while(1)反复getwindow枚举更快速的窗体检测模式,且不能是目前有bypass的方法。
2.不使用内核驱动和DLL注入
3.不使用无官方文档的api
4.与启动的先后顺序无关

1限定了getwindow枚举不可用,LL鼠标钩子配合WindowFromPoint不可用
2限定了不能玩内核和DLL注入,也就是没有hook,也没有内核callback的可能
3限定了不能使用没官方文档各种猥琐方法
4说明后启动也要能检测

这么限定,我翻了十几分钟的MSDN找到一个简单api:SetWinEventHook
因为自身的不常见,所以没多少bypass的可能,而且可以在当前进程获取整个系统的Event,不需要注入,另外消息灵活启动的前后顺序无影响。
直接用代码说话
void CALLBACK HandleWinEvent(HWINEVENTHOOK hook, DWORD event, HWND hwnd, 
	LONG idObject, LONG idChild, 
	DWORD dwEventThread, DWORD dwmsEventTime)
{
	char name[MAX_PATH];
	GetWindowTextA(hwnd,name,MAX_PATH);
	LONG mStyle = GetWindowLongA(hwnd,GWL_STYLE);
	LONG ExtStyle=GetWindowLongA(hwnd,GWL_EXSTYLE);
	if(mStyle==0x57c70000&&ExtStyle==0x140)
	{
		printf("find od 1 %08x %s\r\n",dwEventThread,name);
	}
	if (mStyle==0x56CF0000&&ExtStyle==0x140)
	{
		printf("Find od 2 %08x %s\r\n",dwEventThread,name);
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	CoInitialize(NULL);
	HWINEVENTHOOK hHook = SetWinEventHook( EVENT_MIN , EVENT_MAX , NULL, HandleWinEvent, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS);
	if (hHook)
	{
		printf("set hook ok\r\n");
	}
	else
	{
		printf("some hack in this os\r\n");
		exit(-1);
	}
	while(1)
	{
		MSG msg;
		GetMessage(&msg,NULL,0,0);
		TranslateMessage(&msg);
	}
	return 0;
}


好了,完事了。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
老V威武, ........
2012-8-28 07:17
0
雪    币: 485
活跃值: (78)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
占位学习
2012-8-28 07:59
0
雪    币: 275
活跃值: (51)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
我对AntiGameProtect  神器比较感兴趣
2012-8-28 09:10
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
喜欢,周末有点时间
2012-8-28 10:09
0
雪    币: 219
活跃值: (738)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
6
马克一下  支持lao V
2012-8-28 10:16
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
逆了某游戏早就知道这种检测手段了。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd373640(v=vs.85).aspx
2012-8-28 10:24
0
雪    币: 296
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
万一火了呢。。。
2012-8-28 15:24
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
话说lz使用的某api曾经能完全绕过某nb安全软件的主动防御
2012-8-28 15:41
0
雪    币: 76
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
代码都出来了,bypass也不远了
2012-8-30 09:36
0
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
立马过来膜拜老V
2012-8-30 17:18
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
学习了,顶一个
2012-8-31 17:13
0
雪    币: 73
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
又来学习学习~~
2012-8-31 17:17
0
雪    币: 275
活跃值: (51)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
14
难道不能SetWindowLong修改了od 的属性,或者多添加几个,而且这样属性的窗口应该不止是od吧
我随便写了程序etwindowLong 成 这个属性 就能误报
2012-9-3 11:35
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
15
改了OD的属性会出现一些神奇的错误
有这样属性的窗口真的基本就是od这货了。
误报无所谓,宁可错杀一万不可放过一个(比QVM误报低很多了~)。
2012-9-3 20:29
0
雪    币: 297
活跃值: (120)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
看雪的大牛真多
2012-9-3 20:45
0
雪    币: 70
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
进来学习下,慢慢积累
2013-3-19 10:20
0
雪    币: 384
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
真心希望您每天都是周末
2013-3-19 12:59
0
雪    币: 143
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
19
老板,二斤酱油
2013-3-19 23:32
0
游客
登录 | 注册 方可回帖
返回
//