Linux系统中如何彻底隐藏一个TCP连接?
前面的文章中,我稍微描述了一下如何隐藏一个TCP连接: https://blog.csdn.net/dog250/article/details/105372214 在上文中,我采用了 传统 的做法,即hook住proc的/proc/net/tcp展示接口,但这个方法并没有可观赏性,说白了有点像掩耳盗铃,毕竟连接还是在那里的,你自己去遍历系统的TCP ehash表,还是能看到所有大的TCP连接的。 所以,今天我来用 手艺活儿 的方法,庖丁解牛般演示如何彻底隐藏一个TCP连接。 看看那些各种hook proc展示接口的掩耳盗铃法,多么的复杂!多么的复杂啊!看看我这个,多么的彻底!多么的简单啊! 所谓的彻底隐藏,就是将一个TCP连接从系统的TCP ehash表中摘除!这个很容易,调用 inet_unhash 即可了。 问题是,摘除了之后,我们把它放在哪里,才能让进来的数据包顺利匹配到该连接呢? 答案还是二进制hook。 我们搜索系统内存中含有8个字节(一个地址的大小)空隙的位置,把sock结构体的地址放进去即可。这个空隙一般在内核函数之间。比如我使用的地址: # define ROOM_ADDR 0xffffffff815622dd 它就是ip_rcv函数和ip4_frag_match之间的无用空隙。当然了,我们也可以动态分配内存,但是并不优雅。 来吧,下面是代码: // hide