首页
社区
课程
招聘
[旧帖] 注入随机性失败的问题 0.00雪花
发表于: 2016-3-3 14:09 2626

[旧帖] 注入随机性失败的问题 0.00雪花

2016-3-3 14:09
2626
远程线程注入,表现为总要失败后才会成功,通常是失败一次,再点一下注入按钮就成功了,如果还失败,关掉程序,重新启动,然后成功。整个过程是没有修改代码也没有编译的,纯粹就是运行。

关键代码如下:
  HANDLE hRemoteProcess;
  CString str;
  hRemoteProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwRemoteProcessId);
  if (NULL == hRemoteProcess) {
    str.Format("%d", hRemoteProcess);
    MessageBox(NULL, str, "OpenProcess:%d", MB_OK);
    printf("OpenProcess:%d\n", GetLastError());
    return FALSE;

  }
  void  *pRemoteAddr;
  int len = lstrlen(DllFullPath) +1;
  pRemoteAddr = VirtualAllocEx(hRemoteProcess, NULL, len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  if (NULL == pRemoteAddr) {
    str.Format("%d", hRemoteProcess);
    MessageBox(NULL, str, "VirtualAllocEx:%d", MB_OK);
    printf("VirtualAllocEx:%d\n", GetLastError());
    goto error;

  }


getlasterror是6,报错集中在VirtualAllocEx时。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 8
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
cb := (1 + lstrlenW(pszLibAFilename)) * sizeof(WCHAR);
  pszLibFileRemote := PWIDESTRING(VirtualAllocEx(hRemoteProcess, nil, cb, MEM_COMMIT,PAGE_READWRITE));
2016-3-3 14:35
0
雪    币: 4751
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
int len = lstrlen(DllFullPath) + sizeof(TCHAR);
pRemoteAddr = VirtualAllocEx(hRemoteProcess, NULL,len,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
2016-3-3 15:45
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ccj
4
这样改了,测试还是一样的。
2016-3-3 16:06
0
雪    币: 8
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
错误6是句柄无效,请上完整代码
2016-3-3 16:22
0
雪    币: 4751
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
#include <strsafe.h>			//格式化错误消息
#pragma comment(lib, "strsafe.lib")
void GetLastErrorEx(LPTSTR lpszFunction)
{
	LPVOID lpMsgBuf;
	LPVOID lpDisplayBuf;
	DWORD dw = GetLastError(); 

	FormatMessage(
		FORMAT_MESSAGE_ALLOCATE_BUFFER | 
		FORMAT_MESSAGE_FROM_SYSTEM |
		FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL,
		dw,
		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
		(LPTSTR) &lpMsgBuf,
		0, NULL );

	lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof (TCHAR)); 
	StringCchPrintf((LPTSTR)lpDisplayBuf, 
		LocalSize(lpDisplayBuf) / sizeof (TCHAR),
		TEXT( "%s failed with error %d: %s" ), 
		lpszFunction, dw, lpMsgBuf); 
	MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT( "Error" ), MB_OK); 

	LocalFree(lpMsgBuf);
	LocalFree(lpDisplayBuf);
}


调用这函数  把错误码转换下
2016-3-3 16:26
0
雪    币: 4751
活跃值: (1783)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
printf("VirtualAllocEx:%d\n", GetLastError());

改成 GetLastErrorEx("VirtualAllocEx ");
2016-3-3 16:28
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ccj
8
显示为“error 8 ,存储空间不足,无法使用此命令”
2016-3-4 10:26
0
游客
登录 | 注册 方可回帖
返回
//