能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我来看看...............
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
如果原来程序的函数里面已经装了try_catch的话,是到不了你的SEH里面的。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
顶礼膜拜
|
能力值:
( LV6,RANK:90 )
|
-
-
5 楼
我觉得用seh来完成这个任务比较困难,从两个方面来说
1)seh是建立在当前函数的栈帧上.若是开个远程线程来完成楼主所说的功能,这个seh也只是建立在远程线程里面的某个函数的栈帧上,并不能影响到被你改成0xcc位置所在的函数的seh链表,从而此seh不会得到执行.
2)从mov fs:[0],esp来看,seh链是与当前线程的TEB的第一个参数.在远程线程里创建的seh只会改变远程线程的teb里的seh链表,并不会改变当前进程其他线程teb的seh链表.所以即使成功在其他线程里写下了0xcc,但并未修改它们的seh链,该seh也是不能得到执行.
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
无效果 VC 2005 编译
|
能力值:
( LV9,RANK:170 )
|
-
-
7 楼
看来还不完善,等新酒发酵变陈酒
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
可用用 AddVectoredExceptionHandler?
LONG WINAPI VectoredHandler(PEXCEPTION_POINTERS ExceptionInfo)
{
if ( ExceptionInfo->ExceptionRecord->ExceptionCode == STATUS_BREAKPOINT )
{
ExceptionInfo->ContextRecord->Eip++;
return EXCEPTION_CONTINUE_EXECUTION
}
return EXCEPTION_CONTINUE_SEARCH;
}
AddVectoredExceptionHandler(1, VectoredHandler);
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
SEH的确是线程相关的,是个链表结构,程序自己装了SEH对你HOOK没啥影响,和堆栈一样,我们控制好安装SEH的时机就可以避开,后安装的SEH先执行,我们的SEH先得到INT3异常处理了不传递给它本来的SEH处理就万事大吉了。在远处线程中(注入DLL实现SEH比较简单)用SetWindowsLong改下窗口过程到自己的函数,自己定义的窗口过程函数调用的这个时候FS:[0]不就是主线程的环境了吗?很容易处理,可能我表达得太简单了,没说怎么实现远处线程来操作主线程的SEH。
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
VC高版本编译SEH记得链接的时候指定 /SAFESEH:NO即可!
|
能力值:
( LV3,RANK:30 )
|
-
-
11 楼
效率是问题, 这种方法比detours并没有什么优势
|
能力值:
( LV6,RANK:90 )
|
-
-
12 楼
利用seh来hook任何位置,还真不是那么容易就能处理,楼主实现一个demo让我们见识见识吧
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
[QUOTE=droiyan;794138]看了“hook 任意函数,任意位置 【共享资源】 soucre ”一文,还以为实现了我想要的“HOOK任意地址指令”功能,遗憾的是还是和以前的HOOK代码类似,都有局限性,5个字节的跳转要求使我们总不能想HOOK啥地址就HOOK啥地址,要选一些没有相对转移的位置来实施HOOK大法。一个字节0xCC的软中断是我们理想的选择,不用考虑什么跳转不跳转,直接中断下来干点什么坏事才转回去正是我们经常用OD干的事情,为什么不能用它来HOOK呢,哈哈!搜了下,已经有前辈写过类似的利用SEH实施API hook的文章,我就不重复了,我写的不是HOOK API而是HOOK任意地址,比如给游戏开个远程线程,给它的主线程安装个“HOOK任意地址”的SEH,干点什么想干的事,那是多么惬意的事情啊,哈哈!废话少说,高手请飘过,测试代码如下:。。。
。。。。。。
SEH的确是线程相关的,是个链表结构,程序自己装了SEH对你HOOK没啥影响,和堆栈一样,我们控制好安装SEH的时机就可以避开,后安装的SEH先执行,我们的SEH先得到INT3异常处理了不传递给它本来的SEH处理就万事大吉了。在远处线程中(注入DLL实现SEH比较简单)用SetWindowsLong改下窗口过程到自己的函数,自己定义的窗口过程函数调用的这个时候FS:[0]不就是主线程的环境了吗?很容易处理,可能我表达得太简单了,没说怎么实现远处线程来操作主线程的SEH。
...[/QUOTE]
这也算hook任意地址? 怎么保证你的int3不被别的seh处理掉?,程序运行过程中创
建的线程如何“控制好安装SEH的时机”?要是没有窗口呢?SetWindowsLong
只是指定了新的窗口过程,原来的窗口过程呢?hook过去?
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
脑子慢 不知道我这样理解对不对 异常处理都是 和进程或线程相关的 任意位置是不是这个进程的任意位置 再就是通过创建远线程的方法把 异常处理也 写进别的进程里 这样实现 为了保证 任意的 地址是不是要把异常处理写在 程序的 最前面 要不当出现一个int3的时候 不会保证异常链已经布置好了
|
能力值:
( LV5,RANK:70 )
|
-
-
15 楼
AddVectoredExceptionHandler 更具可行性.只是如果被hook的函数本身带有SEH结构就不会跑到我们设置的地方了.
如果不用inline hook,貌似希望使用这类一字节任意地址hook的,只能是额外开一个进程,以调试器方式处理,只有这样才能首先获得控制权.
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
不对吧? 有SEH AddVectoredExceptionHandler 也能捕捉到的 我还用这个写了一个简单调试器
|
能力值:
( LV9,RANK:200 )
|
-
-
17 楼
Hook RtlDispatchException函数不行吗?
|
能力值:
( LV6,RANK:90 )
|
-
-
18 楼
支持16,17楼!!,veh比seh优先级高,即使有seh还是会先执行veh.
hook rtldispatchroutine比较彻底
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
这个是正道。
|
|
|