⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gport.cpp

📁 一个测试的程序,2000下可以运行,XP下有问题.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//#include <stdio.h>
//#include <stdlib.h>
//#include <winsock2.h>
//#include <Aclapi.h>
//
//#pragma comment ( lib, "ws2_32.lib" )
//
//// NtQuerySystemInformation record type 16
//#define NT_HANDLE_LIST		0x10
//#define OBJECT_TYPE_SOCKET	0x1A
//#define MAX_HANDLE_LIST_BUF	0x200000
//
//// 定义HanleInfo数据结构
//typedef struct _HandleInfo
//{
//	USHORT dwPid;					
//	USHORT CreatorBackTraceIndex;	
//	BYTE   ObjType;
//	BYTE   HandleAttributes;
//	USHORT HndlOffset;
//	DWORD  dwKeObject;
//	ULONG  GrantedAccess;
//}HANDLEINFO, *PHANDLEINFO;
//
//// 申明NtQuerySystemInformation()函数
//typedef DWORD (CALLBACK* NTQUERYSYSTEMINFORMATION)( DWORD, PDWORD, DWORD, PVOID );
//
//NTQUERYSYSTEMINFORMATION NtQuerySystemInformation;
//
//// 判断SOCKET类型的数组
//char szSockType[6][6] = { "NUL", "TCP", "UDP", "RAW", "RDM", "SEQ" };
//
//
////
//// RaisePrivleges()函数用来提升本进程的特权
////
//bool RaisePrivleges( HANDLE hToken, char *pPriv )
//{
//	TOKEN_PRIVILEGES tkp;
//	if ( !LookupPrivilegeValue( NULL, pPriv, &tkp.Privileges[0].Luid ) )
//	{
//		printf( "LookupPrivilegeValue Error:%d\n", GetLastError() );
//		return false;
//	}
//
// 	tkp.PrivilegeCount = 1;
//	tkp.Privileges[0].Attributes |= SE_PRIVILEGE_ENABLED; 
// 	int iRet = AdjustTokenPrivileges(	hToken, 
//										false, 
//										&tkp, 
//										0, 
//										(PTOKEN_PRIVILEGES)NULL, 
//										0 );
//
//	if ( iRet == NULL )					//AdjustTokenPrivileges函数调用失败
//	{
//		printf( "AdjustTokenPrivileges Error:%d\n", GetLastError() ); 
//		return false;
//	}
//	else								//AdjustTokenPrivileges调用成功
//	{									//使用GetLastError()获得返回值
//		iRet = GetLastError();
//		switch ( iRet )
//		{
//			case ERROR_NOT_ALL_ASSIGNED://未指派所有的特权
//				printf( "AdjustTokenPrivileges ERROR_NOT_ALL_ASSIGNED\n" );
//				return false;
//		
//			case ERROR_SUCCESS:			//成功地指派了所有的特权
//				return true;
//
//			default:					//不知名的错误
//				printf( "AdjustTokenPrivileges Unknow Error:%d\n", iRet );
//				return false;
//		}
//	}
//}//end of RaisePrivleges
//
//
////
//// AdjustDacl用来调整目标进程的DACL
////
//void AdjustDacl( HANDLE hProcess )
//{
//	SID world = { SID_REVISION, 1, SECURITY_WORLD_SID_AUTHORITY, 0 };
//	LPTSTR ptstrName = (LPTSTR)&world;
//    EXPLICIT_ACCESS ea =
//     {
//         STANDARD_RIGHTS_ALL | SPECIFIC_RIGHTS_ALL,
//         SET_ACCESS,
//         NO_INHERITANCE,
//         {
//			 0, NO_MULTIPLE_TRUSTEE,
//             TRUSTEE_IS_SID,
//             TRUSTEE_IS_USER,
//			 ptstrName
//		 }
//     };
//	ACL * pdacl = 0;
//	if ( SetEntriesInAcl(1, &ea, 0, &pdacl) != ERROR_SUCCESS )
//		printf( "SetEntriesInAcl Error:%d", GetLastError() );
//	
//	if ( SetSecurityInfo(	hProcess, 
//							SE_KERNEL_OBJECT, 
//							DACL_SECURITY_INFORMATION, 
//							0 , 0, pdacl, 0 ) != ERROR_SUCCESS )
//		printf( "SetSecurityInfo Error:%d", GetLastError() );
//	LocalFree(pdacl);
//}//end of AdjustDacl
//
//
//int main( )
//{
//	printf( "\t=*= GPort Beta1 (Shotgun@xici.net) =*=\n\n" );
//	int iRet;
//	WSADATA wsaData;
//	iRet = WSAStartup( MAKEWORD(1,1), &wsaData );
//	if ( iRet )
//		printf( "WSAStartup Error:%d\n", GetLastError() );
//
//	HANDLE hCurrentProc = GetCurrentProcess();
//	HANDLE hToken;
//	if ( !OpenProcessToken(	hCurrentProc,
//							TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,
//							&hToken ) ) 
//		printf( "OpenProcessToken Error:%d\n", GetLastError() );
//
//	else
//	{
//		if ( !RaisePrivleges( hToken, SE_DEBUG_NAME ) )
//			printf( "SetPrivleges SE_DEBUG_NAME Error:%d\n", GetLastError() );
//	}
//
//	if ( hToken ) 
//		CloseHandle( hToken );
//
//	HMODULE hNtdll = NULL;
//	hNtdll = LoadLibrary( "ntdll.dll" );
//	if ( !hNtdll )
//	{
//		printf( "LoadLibrary( NTDLL.DLL ) Error:%d\n", GetLastError() );
//		return false;
//	}
//	
//	NtQuerySystemInformation = (NTQUERYSYSTEMINFORMATION)
//		GetProcAddress(	hNtdll,	"NtQuerySystemInformation");
//	if ( !NtQuerySystemInformation )
//	{
//		printf( "GetProcess( NtQuerySystemInformation ) Error:%d\n", GetLastError() );
//		return false;
//	}
//
//	DWORD dwNumBytes = MAX_HANDLE_LIST_BUF;
//	PDWORD pdwHandleList = (PDWORD)malloc( dwNumBytes );
//	if ( !pdwHandleList )
//	{		
//	  printf( "Malloc for Handle List Error:%d\n", GetLastError() );
//	  return false;
//	}
//	DWORD dwNumBytesRet = 0x10;
//	iRet = (*NtQuerySystemInformation)(	NT_HANDLE_LIST,
//										pdwHandleList,
//										dwNumBytes,
//										&dwNumBytesRet);
//	DWORD dwNumEntries;
//	PHANDLEINFO pHandleInfo;
//	if ( iRet )
//	{
//		printf( "NtQuerySystemInformation return %d, Error:%d\n", 
//				dwNumBytesRet, 
//				GetLastError() );
//	}
//	else
//	{
//		HANDLE hProc;
//		dwNumEntries = pdwHandleList[0];
//		pHandleInfo = (PHANDLEINFO)( pdwHandleList + 1 );
//		for ( DWORD i = 0; i < dwNumEntries; i++ )
//		{
//			printf( "PID=%4d\n", 
//								pHandleInfo->dwPid);
//
//			if (  ( pHandleInfo->ObjType == OBJECT_TYPE_SOCKET ) 
//				&& ( pHandleInfo->dwPid ) ) 
//			{
//				hProc = OpenProcess(WRITE_DAC,
//									false,
//									pHandleInfo->dwPid );
//				if ( hProc )
//				{
//					AdjustDacl( hProc );
//					CloseHandle( hProc );
//				}
//				else
//					printf( "OpenProcess(WRITE_DAC) %d Error:%d\n", 
//							pHandleInfo->dwPid,
//							GetLastError() );
//
//				HANDLE hMyHandle = NULL;
//				hProc = OpenProcess(PROCESS_DUP_HANDLE,
//									true,
//									pHandleInfo->dwPid );
//
//				if ( hProc )
//				{
//					DuplicateHandle(hProc,
//									(HANDLE)pHandleInfo->HndlOffset,
//									hCurrentProc,
//									&hMyHandle,
//									STANDARD_RIGHTS_REQUIRED,
//									true,
//									0 );
//					CloseHandle( hProc );
//				}
//				else 
//					printf( "OpenProcess %d Error:%d\n", 
//							pHandleInfo->dwPid,
//							GetLastError() );
//				if ( !hMyHandle ) 
//				{
//					//printf( "DuplicateHandle PID=%4d HANDLE:%4d Error:%d\n",
//					//		pHandleInfo->dwPid, pHandleInfo->HndlOffset, GetLastError() );
//				}
//				else
//				{
//					sockaddr_in name = {0};
//					name.sin_family = AF_INET;
//					int namelen = sizeof(sockaddr_in);
//					SOCKET s = (SOCKET)hMyHandle;
//					iRet = getsockname( s, 
//										(sockaddr*)&name, 
//										&namelen );
//					if ( iRet != SOCKET_ERROR ) 
//					{
//						int sockType = 0;
//						int optlen = 4;
//						iRet = getsockopt(	s,
//											SOL_SOCKET, 
//											SO_TYPE,
//											(char*)&sockType,
//											&optlen );
//						printf( "PID=%4d PORT=%5d %s\n", 
//								pHandleInfo->dwPid,
//								ntohs( name.sin_port ),
//								szSockType[sockType] );
//					}
//				}				
//			}
//			pHandleInfo++;		
//		}
//	}
//	if ( pdwHandleList )
//		free( pdwHandleList );
//	if ( hCurrentProc )
//		CloseHandle( hCurrentProc );
//	return 0;
//}
























#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <Aclapi.h>
#include <stdio.h>
#include <winioctl.h>
#include <winerror.h>

#pragma comment ( lib, "ws2_32.lib" )
#define NT_HANDLE_LIST        16
#define OBJECT_TYPE_SOCKET    0x1A
#define MAX_HANDLE_LIST_BUF    0x200000

typedef struct _HandleInfo
{
    USHORT dwPid;                    
    USHORT CreatorBackTraceIndex;    
    BYTE   ObjType;
    BYTE   HandleAttributes;
    USHORT HndlOffset;
    DWORD  dwKeObject;
    ULONG  GrantedAccess;
}HANDLEINFO, *PHANDLEINFO;

typedef struct _IO_STATUS_BLOCK {
    DWORD Status;
    ULONG Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

typedef struct _LSA_UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PWSTR  Buffer;
} LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;

typedef LSA_UNICODE_STRING UNICODE_STRING, *PUNICODE_STRING;

typedef struct _OBJECT_ATTRIBUTES {
    ULONG Length;
    HANDLE RootDirectory;
    UNICODE_STRING *ObjectName;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -