首页
社区
课程
招聘
[旧帖] [原创]利用SEH和INT3实现API HOOK 0.00雪花
发表于: 2011-3-27 23:50 6059

[旧帖] [原创]利用SEH和INT3实现API HOOK 0.00雪花

2011-3-27 23:50
6059

用SEH技术实现API Hook,网上已经有帖子了,可是那些帖子太老,太陈旧,只是适用于95、95时代。
在XP上,网上说的方法根本行不通。

小弟刚学API HOOK, 有幸发现在XP上自由使用SEH链的方法,现在把成果公布出来大家一起分享^_^
各位大侠如果已经知道了,不要笑话小弟^_^

设置SEH链:
PVOID AddVectoredExceptionHandler(int 顺序,PVOID ErrorHander)

移除SEH链:
RemoveVectoredExceptionHandler(PVOID ErrorHander)

ErrorHander函数声明:
LONG WINAPI ErrorHandler(struct _EXCEPTION_POINTERS *ep)

好,我的方案是获得Debug权限(这样才能OpenProcess),然后把我的Dll绑到目标程序上。
Dll把SEH链设置好,就等着它上钩^_^

当然,因为SEH链是什么错误都处理的,上钩的不一定是我们想要的鱼,这时我们只要判断EIP就知道是不是我们要的鱼啦^_^

废话不多说,下面附上HOOK了DrawTextExW和TextOutW的程序,带源代码^_^

http://bbs.pediy.com/images/attach/png.gif


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (25)
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个也得要顶上去,,,,,
2011-3-28 19:57
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
3
不错,谢谢分享 :)
2011-3-28 20:27
0
雪    币: 89
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
代码 这么规范,。。
有的地方写的还真详细
2011-3-28 20:38
0
雪    币: 89
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看到一个问题。。
BOOL GetPIDFromProcessName(LPCTSTR ProcessName)
{
        PROCESSENTRY32 pe;
        HANDLE ss;
        unsigned PID = 0;

        pe.dwSize = sizeof(pe);

        ss = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        Process32First(ss, &pe);
        do
        {
                if(!lstrcmp(ProcessName, pe.szExeFile))
                {
                        PID = pe.th32ProcessID;
                }
        }while(Process32Next(ss, &pe));
        CloseHandle(ss);
        SetLastError(0);
        return PID;
}

这里怎么会是BOOL 类型呢?
2011-3-28 20:44
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哈哈,确实哦
不过windef.h里这样定义BOOL的
typedef int                 BOOL;
而微软的编译器int应该是32位的,那么用BOOL也可以存放PID的
不过感觉还是用ULONG或者DWORD规范一些
2011-3-28 21:12
0
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
有码就喜欢,版主应该给邀请码的吧
如果不给楼主可以消息我,我好像还可以买一个
2011-3-28 21:15
0
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
8
谢谢你们的夸奖^_^
2011-3-28 23:31
0
雪    币: 143
活跃值: (61)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
恩,那样确实很规范,这获得PID代码是复制的,原版就是用DWORD^_^

如果是DWORD,我就会去查,到底错误了会不会返回-1呢?
于是就不敢直接这样写:
if(!func())
    return err;

但是用BOOL,我就会很干脆地那样写,
所以我觉得BOOL更好哦^_^
2011-3-28 23:52
0
雪    币: 183
活跃值: (1223)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
LZ的代码 看着就爽 。。
2011-4-3 17:11
0
雪    币: 133
活跃值: (587)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
11
不错   下载来看看
2011-4-4 00:02
0
雪    币: 145
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
标记,回头来学习
2011-4-4 02:53
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢LZ分享。。学习学习。
2011-4-4 03:07
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
你这个太新了,让我鱼酷无类
2011-4-4 08:18
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
支持!谢谢分享哈!学习了!
2011-4-4 10:57
0
雪    币: 20
活跃值: (99)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
16
支持楼主,学习了!呵呵!
2011-4-4 18:35
0
雪    币: 1040
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
学习。。。。
2011-4-18 12:46
0
雪    币: 403
活跃值: (551)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
在xp下为什么运行不成功那,打开记事本后运行程序,记事本就崩溃了。
2011-10-20 21:38
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
mark
2011-11-3 10:51
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
不错的东东,感谢楼主了
2011-11-3 11:04
0
雪    币: 248
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
等下要试试。。
谢lz@
2011-11-18 15:45
0
雪    币: 5335
活跃值: (3729)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
22
晚上回家看看
2011-11-18 16:14
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
这个帖子得顶上去
2011-11-18 18:08
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
24
这样会被360报无数字签名的,不知道哥们现在想到了方法吗?
2011-11-18 18:19
0
雪    币: 195
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
一个字,谢谢,我终于可以安心睡觉了
2012-1-13 05:11
0
游客
登录 | 注册 方可回帖
返回
//