首页 电脑 电脑学堂 查看内容

一位前辈对ipc的看法及一网友的回复

2004-11-2 07:55 493 0

摘要: 编者:这是我从小榕论坛看的帖, 帖很乱,我整理了一下,只选了我认为比较有用的部分发了 ipc问题---对于每个喜欢hacking的朋友,都不应该选择它,理由很简单,因为他会暴露你的IP(用代理也一样...
关键词: 进程 句柄 问题 一个 系统 线程 ObjectTable 代理 HandleTableList UniqueProcessId

编者:这是我从小榕论坛看的帖, 帖很乱,我整理了一下,只选了我认为比较有用的部分发了 ipc问题---对于每个喜欢hacking的朋友,都不应该选择它,理由很简单,因为他会暴露你的IP(用代理也一样),shell是从来不调用API,你怎样来代理?用钩子函数来替换的api,写一个驱动或者spi?(这样可以代理shell,但net use是不可以的)会话连接的时候实际上是系统(*nix)进程在使用socket,大多代理都是基于Winsock(windows)设计的,或者说dll,hook,在windows下只有使用 WSOCK32.DLL,WS2_32.DLL才可以成功代理 归结:net.exe时,tcp连接没有断仍然可以用资源管理器访问共享,因此他不能使用winsock来维护连接,用的是系统维护该tcp连接: 1.hook api(但是因为他不是简单的socket通信,涉及认证和加密,很难hook) 2.底层驱动,要改他的tcp/ip协议栈数据流。 3.spi 下面是一位网友的回复: 技术的本身,一直是在一边被论证使用、一边被抛弃中发展。 我也是2002 ns注册的,其实好像当时看过相关的讨论, 只叹自己的网络技术太不扎实了(我也一直用net use)。 唉,要努力呀,当看完XCON2004议题我不再相信网络技术;当见着yuange我开始不相信上帝了。 技术面太广,而我懂的也太皮毛了。。。 其实每一项技术应用的好,都是精深的; 如rootkit, 现在的多是有进程的, 现实无进程化应算是优秀的rootkit;但用INF驱动做的rootkit可以现实现无进程!我有一个这样的。 但一个问题,也是xfocus以前讨论过的:“问题就在返回的那个SHELL是有进程。不实现SHELL的话不少操作都麻烦了点。”也是我的困惑。 有关进程,看了tk的ppt:《用ring3代码可靠地枚举Windows进程》更只有是一头雾水了。 话题在引用牛人的blog文章中结束:(xfocus讨论) 从断开ActiveProcessLinks,到利用KiWaitInListHead、KiWaitOutListHead、KiDispatcherReadyListHead检测隐藏进程,然后SoBeIt提出的替换链表来对抗这种检测手段颇有意思。大家的目光都注意在那一堆进线程相关链上,其实还有很多检测的方法。下面提一种很土的手法,曾在procmon中用了一下很快就抛弃了。这里介绍一下它的可行性和弱点,很土很简单,呵呵。 一、可行性 首先看看NtQuerySystemInformation系统服务。此服务功能很多,有一项可以查询系统中的所有句柄,给出的信息包含进程id,那么它是如何得知句柄属于那个进程呢?其实它是首先枚举进程,然后再查询进程句柄的。那么它查询进程的手法与NtQuerySystemInformation提供的另一个功能——进程查询是否一样呢,答案是否定的。 EPROCESS结构中有一个指针指向ObjectTable,在ObjectTable的结构中又有一域HandleTableList将所有ObjectTable连接起来,同时又有UniqueProcessId域表征此ObjectTable属于哪个进程,这样实质上就将进程们链到一起了。在handle的枚举过程中系统调用ExSnapShotHandleTables,此函数在一个循环中遍历HandleTableList,再得到所有的句柄,由此可见,利用句柄枚举可以实现进程枚举(没有进程会没有句柄)。 可以通过hook来隐藏信息,同样也可以在更底层枚举,这个不是问题。 二、弱点 1、若通过query句柄得到进程id,看看系统copy进程id的代码: (*HandleEntryInfo)->UniqueProcessId = (USHORT)((ULONG_PTR)UniqueProcessId); 好好的id被截短了,在服务器上有巨量的进线程时16为不大够(这种可能性虽很小,却存在)。 若直接遍历HandleTableList,没这问题,只是没那么稳定可靠。 2、最大的问题,这个链表也是可以被断开的。如果断开会使系统崩溃,那么它还有存在的价值,可惜测试中系统p事没有(记忆中好像是)。所以扔掉它了。 ProcMon的方法二用的就是这个方案,随后考虑动态察看活动的进程,选择了几个点:像线程切换、时钟中断等,觉得最好确定一个无需硬编码的方案,windows的调度时机主要是时钟中断clock2和主动放弃CPU,因而可以选择它们,实现时也没有hook中断而选择了KeUpdateSystemTime(好像是)以及其他函数。最后编写了ProcMon的“线程执行情况”菜单(或是另类可疑信息?太久记不清),开始运行没什么问题,几天后偶然发现可重复的崩溃隐患所以去掉了相应的代码。那时转向了更新的思路,没去管它了.    
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部