能力值:
( LV2,RANK:10 )
|
-
-
2 楼
64位程序无法加载32位DLL
|
能力值:
( LV13,RANK:405 )
|
-
-
3 楼
可以GetLastError看一下,去msdn查一下返回值,看看错误原因
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
醉花阴柳
64位程序无法加载32位DLL
dll是64位的
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
sudozhange
可以GetLastError看一下,去msdn查一下返回值,看看错误原因
getlasterror:0 执行正常 现在是我注入其他程序是正常的,注入任务管理器就是不行
|
能力值:
( LV13,RANK:405 )
|
-
-
6 楼
这小孩真骚
getlasterror:0 执行正常
现在是我注入其他程序是正常的,注入任务管理器就是不行
内存区段呢,你的注入是哪种注入?
|
能力值:
( LV13,RANK:405 )
|
-
-
7 楼
刚才我测试了下,如果用管理员权限是可以注入的,否则权限不足
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
sudozhange
刚才我测试了下,如果用管理员权限是可以注入的,否则权限不足
这是我在网上找的实现代码,就是标准的CreateRemoteThread 我这边也用了管理员的方式执行任然不行,测试dll是64位的dll,就是任务管理器注入不进去 int main(int argc, char* argv[])
{
//定义线程体的大小
const DWORD dwThreadSize = 4096;
DWORD dwWriteBytes;
//提升进程访问权限
enableDebugPriv();
char *szExeName="taskmgr.exe";
OutputDebugStringA("1");
DWORD dwProcessId = processNameToId(szExeName);
if (dwProcessId == 0) {
OutputDebugStringA("no this exe");
return -1;
}
//根据进程ID得到进程句柄
HANDLE hTargetProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
OutputDebugStringA("2");
if (!hTargetProcess) {
OutputDebugStringA("Open target process failed !");
return 0;
}
//在宿主进程中为线程体开辟一块存储区域
//在这里需要注意MEM_COMMIT | MEM_RESERVE内存非配类型以及PAGE_EXECUTE_READWRITE内存保护类型
//其具体含义请参考MSDN中关于VirtualAllocEx函数的说明。
void* pRemoteThread = VirtualAllocEx(hTargetProcess, 0,
dwThreadSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (!pRemoteThread) {
OutputDebugStringA("Alloc memory in target process failed !");
return 0;
}
OutputDebugStringA("3");
//将线程体拷贝到宿主进程中
if (!WriteProcessMemory(hTargetProcess,
pRemoteThread, &threadProc, dwThreadSize, 0)) {
OutputDebugStringA("Write data to target process failed !");
return 0;
}
//定义线程参数结构体变量
RemoteParam remoteData;
ZeroMemory(&remoteData, sizeof(RemoteParam));
//填充结构体变量中的成员
HINSTANCE hUser32 = LoadLibrary("kernel32.dll");
remoteData.dwMessageBox = (DWORD)GetProcAddress(hUser32, "LoadLibraryA");
strcat_s(remoteData.szMsg, "E:\\hjx\\workspace\\hook\\nokilltest\\Release\\dll64.dll");
//为线程参数在宿主进程中开辟存储区域
RemoteParam* pRemoteParam = (RemoteParam*)VirtualAllocEx(
hTargetProcess , 0, sizeof(RemoteParam), MEM_COMMIT, PAGE_READWRITE);
if (!pRemoteParam) {
OutputDebugStringA("Alloc memory failed !");
return 0;
}
OutputDebugStringA("4");
//将线程参数拷贝到宿主进程地址空间中
if (!WriteProcessMemory(hTargetProcess ,
pRemoteParam, &remoteData, sizeof(remoteData), 0)) {
OutputDebugStringA("Write data to target process failed !");
return 0;
}
//在宿主进程中创建线程
HANDLE hRemoteThread = CreateRemoteThread(
hTargetProcess, NULL, 0, (DWORD (__stdcall *)(void *))pRemoteThread,
pRemoteParam, 0, &dwWriteBytes);
if (!hRemoteThread) {
OutputDebugStringA("Create remote thread failed !");
return 0;
}
printf("getlasterror:%d",GetLastError());
OutputDebugStringA("5");
CloseHandle(hRemoteThread);
FreeLibrary(hUser32);
getchar();
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
x64位要用x64的。有碰到使用debug的dll注入不了,release可以注入。你可以试试
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
wanttobeno
x64位要用x64的。有碰到使用debug的dll注入不了,release可以注入。你可以试试
是64,也是release 注入其他进程能够成功,eg :calc.exe 就是任务管理器注入不了
|
能力值:
( LV13,RANK:405 )
|
-
-
11 楼
这小孩真骚
这是我在网上找的实现代码,就是标准的CreateRemoteThread 我这边也用了管理员的方式执行任然不行,测试dll是64位的dll,就是任务管理器注入不 ...
你可以看下我的帖子,反射式注入那个我刚刚试了下,是成功执行的
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
写个服务进程,用system权限注入。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
wilway
写个服务进程,用system权限注入。[em_6]
嗯,好的有需要会尝试一下。谢谢各位,现在用的是@sudozhange 推荐的reflective dll注入
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
这小孩真骚
嗯,好的有需要会尝试一下。谢谢各位,现在用的是@sudozhange 推荐的reflective dll注入
应用级createremotethread注入,注入与被注入程序是需要统一会话层的,不能用system权限
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
syxdotar
这小孩真骚
嗯,好的有需要会尝试一下。谢谢各位,现在用的是@sudozhange 推荐的reflective dll注入
应用级createremote ...
刚刚试了下用服务进程的方式进行dll注入,createremotethread 的getlasterror返回8 没有足够空间,如果通过一般exe就能成功,这是不是你说的这种情况。不太懂这些。但是我看了有些dll是能够通过服务进程进行注入的,有什么细节需要注意吗?求指点
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
这小孩真骚
方便说下怎么实现的吗[em_6]
NtCreateThreadEx
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
win7 旗舰版x64 NtCreateThreadEx failed............很奇怪的是GetLastError返回的是0 NTSTATUS status = funNtCreateThreadEx(
&hThread,
0x1FFFFF, //GENERIC_ALL
NULL,
process,
(LPTHREAD_START_ROUTINE) addr, //LoadLibraryA
arg, //dll address 用VirtualAllocEx在宿主进程中分配的
FALSE, //start instantly
NULL,
NULL,
NULL,
&ntbuffer
); 不知道怎么回事?请问你知道原因吗
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
NtCreateThreadEx任然是在32位上跑的溜得很,x64上比较尴尬 还有一个就是在写windows服务的时候,win32的解决方案程序在 32,64位上都能跑,倒是x64编译的服务在windows7 x64上提示服务没有响应控制功能。想锤人。 了解的,指点下小弟,thanks
|
|
|