- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2024-4-1
 
- 在线时间
 - 1 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 19 
 
 
 
 
 | 
 
 
远程线程: 
- #include<windows.h>
 
 - #include<stdio.h>
 
 -  
 
 - //函数地址:00C31740
 
 - int main() {
 
 -         
 
 -         HANDLE hThread;
 
 -         HANDLE hProcess;
 
 -  
 
 -         // 1、得到要在其进程中创建线程的进程句柄
 
 -         hProcess = OpenProcess(PROCESS_ALL_ACCESS,false,10940);
 
 -  
 
 -         if (hProcess == NULL) {
 
 -                 OutputDebugString("OpenProcess fail");
 
 -                 return -1;
 
 -         }
 
 -         // 2、通过进程句柄创建线程
 
 -         hThread = CreateRemoteThread(
 
 -                 hProcess,
 
 -                 NULL,  //获取默认的安全描述符,当前用户的令牌权限 
 
 -                 0,  //使用可执行文件的默认大小
 
 -                 (LPTHREAD_START_ROUTINE)0x010817E0,  // 创建线程调用的函数
 
 -                 NULL,  // 传递函数中的参数
 
 -                 0, //线程在创建后立即运行 
 
 -                 NULL // 不返回线程标识符
 
 -         );
 
 -  
 
 -         if (hThread == NULL) {
 
 -                 OutputDebugString("CreateRemoteThread fail");
 
 -                 CloseHandle(hProcess);
 
 -                 return -1;
 
 -         }
 
 -  
 
 -         printf("线程启动!\n");
 
 -  
 
 -         // 3、释放资源
 
 -         CloseHandle(hThread);
 
 -         getchar(); //进行堵塞
 
 -         return 0;
 
 -  
 
 - }
 
  复制代码 
远程线程注入: 
- #include<Windows.h>
 
 - #include<Tlhelp32.h>
 
 - #include<stdio.h>
 
 - /*
 
 - 远程线程注入
 
 - 代码写的不太严谨,大家谅解
 
 - */
 
 -  
 
 - DWORD GetOneProcessPid(const char *FileName) {
 
 -         HANDLE hSnapShot;
 
 -         PROCESSENTRY32 pro32;
 
 -  
 
 -         pro32.dwSize = sizeof(PROCESSENTRY32);
 
 -         // 1、获得当前进程的快照
 
 -  
 
 -         hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 
 -  
 
 -         if (hSnapShot == INVALID_HANDLE_VALUE) {
 
 -                 return -1;
 
 -         }
 
 -  
 
 -         bool bMore;
 
 -         // 2、遍历进程的名称是否为指定名称,获取指定进程名称的PID
 
 -         bMore = Process32First(hSnapShot, &pro32);
 
 -         while (bMore) {
 
 -                 // 3、获取指定进程名称的PID
 
 -                 if (!strcmp(pro32.szExeFile, FileName)) {
 
 -                         return pro32.th32ProcessID;
 
 -                 }
 
 -                 bMore = Process32Next(hSnapShot, &pro32);                  //遍历
 
 -         }
 
 -  
 
 -         // 4、释放资源
 
 -         CloseHandle(hSnapShot);
 
 -  
 
 -         return 0;
 
 - }
 
 - DWORD WINAPI ThreadProc(LPVOID lpParameter) {
 
 -         return 0;
 
 - }
 
 -  
 
 - bool LoadDll(DWORD ProcessPid,const char *DllPath) {
 
 -         HANDLE hProcess;
 
 -         DWORD DllPathLen;
 
 -         PDWORD addr;
 
 -         HMODULE hModule;
 
 -         PDWORD FuncAddr;
 
  
-         // 1、获取要注入进程的句柄
 
 -         hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessPid);
 
 -         if (hProcess == NULL) {
 
 -                 return false;
 
 -         }
 
 -  
 
 -         // 2、获取DLL的信息
 
 -         DllPathLen = strlen(DllPath) + 1; //+1的原因结尾需要\0 结尾
 
 -  
 
 -         // 3、申请指定进程中的内存
 
 -         addr = (PDWORD)VirtualAllocEx(
 
 -                 hProcess, //申请指定进程的句柄
 
 -                 NULL,  // 安全描述符
 
 -                 DllPathLen,  // 申请内存的字节大小
 
 -                 MEM_COMMIT,  // 
 
 -                 PAGE_READWRITE // 内存的属性
 
 -         );
 
 -  
 
 -         printf("%x", addr);
 
 -  
 
 -         // 4、将DLL的信息写入到要注入的进程内存中
 
 -         WriteProcessMemory(hProcess, addr, DllPath, DllPathLen, NULL);
 
 -  
 
 -         // 5、要获取其进程的LoadLibraryA/W的函数地址,该函数保存在系统中的Kernel32.dll中,那么需要先获得Kernel32.dll的句柄
 
 -         hModule = GetModuleHandle("Kernel32.dll");
 
 -  
 
 -         // 6、从中获得LoadLibraryA/W的函数地址
 
 -         FuncAddr = (PDWORD)GetProcAddress(hModule, "LoadLibraryA"); //返回值为函数地址
 
 -         
 
 -         // 7、注入到指定进程中进行加载内存中申请的DLL信息,把LoadLibraryA的地址作为函数 来加载addr,也就是DLL的路径
 
 -         CreateRemoteThread(hProcess, NULL, 0, LPTHREAD_START_ROUTINE(FuncAddr), addr, 0, NULL);
 
 -         
 
 -         return true;
 
 - }
 
  
- int main() {
 
 -         LoadDll(GetOneProcessPid("x.exe"),"C:\\Users\\dell\\Desktop\\test\\DLL2.dll");
 
 -         return 0;
 
 - }
 
  复制代码 
 
 
 |   
 
 
 
 |