Guest User

Untitled

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