📄 gport.cpp
字号:
//#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 + -