首页
社区
课程
招聘
[求助]关于内存写入注入的实现
发表于: 2020-6-9 11:05 4649

[求助]关于内存写入注入的实现

2020-6-9 11:05
4649

本人学习滴水的远程线程注入的第二块内存写入式注入,但是再练习过程中发现代码出现问题,自己经过练习,发现无法解决,是在不会,如果有做过这个练习的同学,求指点一下,多谢了,(练习是滴水三期的练习)
自己研究两三天,却还是不会,特别恳请做出这个练习的同学能指点一下,万分感谢!!!!
练习的题目如图:
课后练习的题目
自己写的代码如下:
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;
}
错误的提示截图:
错误的截图


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 5
支持
分享
最新回复 (5)
雪    币: 3307
活跃值: (3903)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
建议你看看这篇文章https://bbs.pediy.com/thread-254334.htm
2020-6-9 13:19
0
雪    币: 1151
活跃值: (244)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Mr.hack 建议你看看这篇文章https://bbs.pediy.com/thread-254334.htm
也就是说,滴水课程的这个练习的要注入的dll,不是一般的dll,而是里面还写了修复IAT表函数的dll吗??
2020-6-9 15:58
0
雪    币: 3307
活跃值: (3903)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
学习小菜鸟 也就是说,滴水课程的这个练习的要注入的dll,不是一般的dll,而是里面还写了修复IAT表函数的dll吗??
IAT表是必须修复的,而且IAT表的修复只能由被注入的目标进程的线程来修复
2020-6-9 16:04
0
雪    币: 1151
活跃值: (244)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Mr.hack IAT表是必须修复的,而且IAT表的修复只能由被注入的目标进程的线程来修复
我IAT表修复的函数写出来了,但是不知道怎么让被注入的目标进程的线程来执行IAT修复的函数
2020-6-9 18:09
0
雪    币: 3307
活跃值: (3903)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
学习小菜鸟 我IAT表修复的函数写出来了,但是不知道怎么让被注入的目标进程的线程来执行IAT修复的函数
你仔细看那篇文章,里面有解决方案
2020-6-10 14:25
0
游客
登录 | 注册 方可回帖
返回
//