unsigned long resolv(char*host)
{
struct hostent *hp;
unsigned long host_ip;
host_ip = inet_addr(host);
if( host_ip == INADDR_NONE )
{
hp = gethostbyname(host);
if(!hp)
{
//printf("/nError: Unable to resolve hostname (%s)/n",host);
exit(1);
}
else
host_ip = *(u_long*)hp->h_addr ;
}
return(host_ip);
}
//校验和算法
unsigned short checksum(unsigned short*buffer,int size)
{
unsigned long cksum=0 ;
while(size>1)
{
cksum+=*buffer++;
size-=sizeof(unsigned short);
}
if(size)
cksum+=*(UCHAR*)buffer ;
cksum=(cksum>>16)+(cksum&0xffff);
cksum+=(cksum>>16);
return(unsigned short)(~cksum);
}
//
// 根据窗口句柄取得文件完整路径。
//
//
// 参数:
// hWnd
// 窗口句柄
// lpszFileName
// 获取文件完整路径的缓冲区
// nSize
// 缓冲区长度
//
// 返回值
// 成功返回TRUE, 出错返回FALSE;
//
BOOL GetFileNameFromHwnd(HWND hWnd, LPTSTR lpszFileName, DWORD nSize)
{
BOOL bResult = FALSE;
// 从句柄获取进程ID号
DWORD dwProcessId;
GetWindowThreadProcessId(hWnd , &dwProcessId);
// 获取系统版本信息
OSVERSIONINFO osverinfo;
osverinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if ( !GetVersionEx(&osverinfo) )
return FALSE;
// 当系统为NT核心时
if ( osverinfo.dwPlatformId == VER_PLATFORM_WIN32_NT )
{
// 调用PSAPI
BOOL (WINAPI *lpfEnumProcessModules)
(HANDLE, HMODULE*, DWORD, LPDWORD);
DWORD (WINAPI *lpfGetModuleFileNameEx)
(HANDLE, HMODULE, LPTSTR, DWORD);
// 加载PSAPI.DLL
HINSTANCE hInstLib = LoadLibrary("PSAPI.DLL");
if ( hInstLib == NULL )
return FALSE ;
// 定位相关函数
lpfEnumProcessModules = (BOOL(WINAPI *)
(HANDLE, HMODULE *, DWORD, LPDWORD))GetProcAddress(
hInstLib, "EnumProcessModules");
lpfGetModuleFileNameEx =(DWORD (WINAPI *)
(HANDLE, HMODULE, LPTSTR, DWORD))GetProcAddress(
hInstLib, "GetModuleFileNameExA");
if ( lpfEnumProcessModules && lpfGetModuleFileNameEx )
{
// 打开指定进程
HANDLE hProcess;
hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, dwProcessId);
if ( hProcess )
{
// 权举模块
HMODULE hModule;
DWORD dwNeed;
if (lpfEnumProcessModules(hProcess,
&hModule, sizeof(hModule), &dwNeed))
{
// 获取文件路径
if ( lpfGetModuleFileNameEx(hProcess, hModule,
lpszFileName, nSize) )
bResult = TRUE;
}
// 关闭句柄
CloseHandle( hProcess ) ;
}
}
// 释放PSAPI.DLL
FreeLibrary( hInstLib ) ;
}
// 当系统为9X
else if ( osverinfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
{
// 通过ToolHelp
HANDLE (WINAPI *lpfCreateSnapshot)(DWORD, DWORD);
BOOL (WINAPI *lpfProcess32First)(HANDLE, LPPROCESSENTRY32);
BOOL (WINAPI *lpfProcess32Next)(HANDLE, LPPROCESSENTRY32);
// 相关函数的获取
lpfCreateSnapshot =
(HANDLE(WINAPI*)(DWORD,DWORD))GetProcAddress(
GetModuleHandle("kernel32.dll"),
"CreateToolhelp32Snapshot" );
lpfProcess32First=
(BOOL(WINAPI*)(HANDLE,LPPROCESSENTRY32))GetProcAddress(
GetModuleHandle("kernel32.dll"),
"Process32First" );
lpfProcess32Next=
(BOOL(WINAPI*)(HANDLE,LPPROCESSENTRY32))GetProcAddress(
GetModuleHandle("kernel32.dll"),
"Process32Next" );
if ( !lpfCreateSnapshot ||
!lpfProcess32First ||
!lpfProcess32Next)
return FALSE;
// 利用Toolhelp权举
HANDLE hSnapshot;
hSnapshot = lpfCreateSnapshot(TH32CS_SNAPPROCESS , 0);
if (hSnapshot != (HANDLE)-1)
{
// 从第一个开始权举
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
if ( lpfProcess32First(hSnapshot, &pe) )
{
do {
// 如果是该进程的话取出进程路径
if (pe.th32ProcessID == dwProcessId)
{
lstrcpy(lpszFileName, pe.szExeFile);
bResult = TRUE;
break;
}
} while ( lpfProcess32Next(hSnapshot, &pe) );
}
// 关闭句柄
CloseHandle(hSnapshot);
}
}
else
return FALSE;
return bResult;
}
// 根据错误ID获取出错信息
void ErrorTrace(const char *msg, DWORD error)
{
DWORD numWritten;
if (error)
{
LPTSTR lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
error,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Free the buffer.
LocalFree( lpMsgBuf );
}
}
//利用管道获取命令行
bool __fastcall TForm1::RunCmd(AnsiString cmd,TStringList *stringlist)
{
TMemoryStream *memstream=new TMemoryStream();
AnsiString rn="//r//n";
PROCESS_INFORMATION proc;
STARTUPINFO start;
SECURITY_ATTRIBUTES sa;
long ret;
unsigned long lngBytesread;
HANDLE hReadPipe,hWritePipe;
char *strBuff=(char *)malloc(256);
if(strBuff==NULL)
{
return false;
}
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=true;
sa.lpSecurityDescriptor=NULL;
ret=CreatePipe(&hReadPipe,&hWritePipe,&sa,0);
if(ret==0)
{
//创建管道失败
return false;
}
memset(&start,0x00,sizeof(STARTUPINFO));
start.cb=sizeof(STARTUPINFO);
start.dwFlags=STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
start.hStdOutput=hWritePipe;
start.hStdError=hWritePipe;
bool retc=CreateProcess(NULL,cmd.c_str(),NULL,NULL,true, 0, 0, NULL, &start, &proc);
if(!retc)
{
return false;
}
CloseHandle(hWritePipe);
unsigned long len;
memstream->Position=0;
while(true)
{
memset(strBuff,0x00,256);
GetFileSize(hReadPipe,&len);
ret = ReadFile(hReadPipe, strBuff, 256, &lngBytesread,NULL);
if(ret==0)
{
break;
}
else
{
memstream->Write(strBuff,lngBytesread);
}
}
CloseHandle(proc.hProcess);
CloseHandle(proc.hThread);
CloseHandle(hReadPipe);
memstream->Position=0;
free(strBuff);
stringlist->LoadFromStream(memstream);
memstream->Clear();
delete memstream;
return true;
}
//提升进程权限
BOOL EnablePrivilege(LPCTSTR lpSystemName,LPCTSTR lpName)
{
HANDLE hToken ;
BOOL fOk=FALSE ;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken))
{
TOKEN_PRIVILEGES tp ;
tp.PrivilegeCount=1 ;
if(!LookupPrivilegeValue(lpSystemName,lpName,&tp.Privileges[0].Luid))
printf("Can't lookup privilege value./n");
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED ;
if(!AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL))
printf("Can't adjust privilege value./n");
fOk=(GetLastError()==ERROR_SUCCESS);
CloseHandle(hToken);
}
return fOk ;
}
# 回复:常用函数库收集
//连接指定IP端口,返回socket
int conn(char *ip,int p)
{
int sockfd;
hrm.sin_family = AF_INET;
hrm.sin_addr.s_addr = inet_addr(ip);
hrm.sin_port = htons(p);
bzero(&(hrm.sin_zero),8);
sockfd=socket(AF_INET,SOCK_STREAM,0);
if((connect(sockfd,(struct sockaddr*)&hrm,sizeof(struct sockaddr))) < 0)
{
perror("connect");
exit(0);
}
printf("[x] Connected to: %s on port %d./n",ip,p);
return sockfd;
}
# 回复:常用函数库收集
//将指定程序安装成服务
int InstallService(
char *svr_name, char *display_name,char *exepath, int starttype
)
{
SC_HANDLE hService,hSCManager;
hSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(hSCManager==NULL) return 0;
hService=CreateService(hSCManager,svr_name,display_name,
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
starttype, //SERVICE_AUTO_START
SERVICE_ERROR_NORMAL, // error control type
exepath, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
if(hService==NULL) return 0;
CloseServiceHandle(hService);
return 1;
}
//将指定服务删除
int AUTOLOAD::DeleteServiceByName(char *svr_name)
{
SC_HANDLE hService,hSCManager;
hSCManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(hSCManager==NULL) return 0;
hService=OpenService(hSCManager,svr_name,SERVICE_ALL_ACCESS);
if(hService==NULL) return 0;
if(DeleteService(hService)==0) return 0;
if(CloseServiceHandle(hService)==0) return 0;
return 1;
}