能力值:
( LV2,RANK:10 )
|
-
-
2 楼
网上有远程线程注入源码,自己对比看看。
最后于 2020-6-7 06:00
被麻木的时间编辑
,原因:
|
能力值:
( LV2,RANK:15 )
|
-
-
3 楼
是不是要VirtualProtect修改模块属性,可以用getLastError获取值看看是什么原因吧
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
严启真
是不是要VirtualProtect修改模块属性,可以用getLastError获取值看看是什么原因吧
我想原因找到了,是因为我的线程函数是在自己的代码里面写的,地址不是目标函数的地址,所以远程的时候在目标进程中找不到线程函数,拿着怎么修改啊??有点不会了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
用SHELLCODE把要用的函数地址找出来。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
sixL
用SHELLCODE把要用的函数地址找出来。
不用shellcode可以吗??我的线程函数就是实现修复IAT表的功能,但是如果在本地的程序运行的话,就错了,我是想把这个修复IAT表的代码写到目标的进程中去,然后在目标进程中运行修复,这个操作怎么做啊??有点不会
|
能力值:
( LV2,RANK:15 )
|
-
-
7 楼
你搞个dll注入不就解决了?注入加载dll的代码…
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
严启真
你搞个dll注入不就解决了?注入加载dll的代码…
我这个本来就是注入,就是注入加载dll的
|
能力值:
( LV2,RANK:15 )
|
-
-
9 楼
没懂,我也小白,不过我认为,所有操作应放dll里,包括创建线程和线程函数,exe只负责加载dll,dll注入了远程进程成功就可为所欲为…
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
把代码全部贴出来,我帮你调试一下。你远程线程运行了吗? 要是运行了就没问题了。
最后于 2020-6-7 23:23
被麻木的时间编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
麻木的时间
把代码全部贴出来,我帮你调试一下。你远程线程运行了吗? 要是运行了就没问题了。
代码有些多,而且还有界面等东西,所以只能给你发一下实现的函数,另外这个是滴水课程的隐藏模块那一节的练习 我写的代码是这样的 BOOL writemem(HWND hdlg) { HWND wen1; HWND wen2; DWORD pid; HMODULE hdllname=NULL; DWORD dllcode=0; //获得注入文件路径 TCHAR buffer[30]; memset(buffer,0,30); wen1=GetDlgItem(hdlg,IDC_EDIT1); wen2=GetDlgItem(hdlg,IDC_EDIT2); GetWindowText(wen2,buffer,30); void* pfilebuffer=NULL; peread(buffer,&pfilebuffer); if(!pfilebuffer) { return FALSE; } PIMAGE_DOS_HEADER pdos=NULL; PIMAGE_FILE_HEADER pfile=NULL; PIMAGE_OPTIONAL_HEADER32 poptional=NULL; PIMAGE_DATA_DIRECTORY pdata=NULL; PIMAGE_BASE_RELOCATION pbase=NULL; pdos=(PIMAGE_DOS_HEADER)pfilebuffer; pfile=(PIMAGE_FILE_HEADER)((DWORD)pfilebuffer+pdos->e_lfanew+4); poptional=(PIMAGE_OPTIONAL_HEADER32)((DWORD)pfile+20); pdata=(PIMAGE_DATA_DIRECTORY)((DWORD)poptional+96); pbase=(PIMAGE_BASE_RELOCATION)((DWORD)pfilebuffer+rvatofoa(pfilebuffer,(pdata+5)->VirtualAddress)); DWORD sizeofimage=poptional->SizeOfImage; //打开注入进程 memset(buffer,0,30); GetWindowText(wen1,buffer,30); sscanf(buffer,"%d",&pid); HANDLE hproc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid); char* mem=(char*)VirtualAllocEx(hproc,NULL,sizeofimage,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); //修复重定位表 DWORD oldimagebase=poptional->ImageBase; poptional->ImageBase=(DWORD)mem; while(pbase->SizeOfBlock && pbase->VirtualAddress) { PWORD pnum=(PWORD)((DWORD)pbase+8); for(DWORD i=0;i<((pbase->SizeOfBlock)-8)/2;i++) { WORD low=pnum[i]&0x0fff; WORD hig=(pnum[i]&0xf000)>>12; if(hig==3) { DWORD rva=(DWORD)low+pbase->VirtualAddress; //修改重定位地址 PDWORD offset=(PDWORD)((DWORD)pfilebuffer+rvatofoa(pfilebuffer,rva)); *offset=*offset-oldimagebase+poptional->ImageBase; } } pbase=(PIMAGE_BASE_RELOCATION)((DWORD)pbase+pbase->SizeOfBlock); } WriteProcessMemory(hproc,mem,pfilebuffer,sizeofimage,0); free(pfilebuffer); HANDLE thread=CreateRemoteThread(hproc,NULL,0,(LPTHREAD_START_ROUTINE)mem,0,0,NULL); if (!thread) { VirtualFreeEx(hproc,mem,0,MEM_RELEASE); CloseHandle(hproc); return FALSE; } WaitForSingleObject(thread,-1); GetExitCodeThread(thread,&dllcode); hdllname=(HMODULE)dllcode; VirtualFreeEx(hproc,mem,sizeofimage,MEM_DECOMMIT); CloseHandle(hproc); return TRUE; }
|