首页
社区
课程
招聘
这注入为啥 WIN8 不支持呢
发表于: 2014-12-19 04:04 7052

这注入为啥 WIN8 不支持呢

2014-12-19 04:04
7052
找不到原因了 WIN7 XP 都挺好的  APC 也不支持WIN8  这EIP 也是不支持 为啥?
STARTUPINFOW si = { 0 };
PROCESS_INFORMATION pi = { 0 };
si.cb = sizeof(STARTUPINFOW);

::CreateProcessW(pProcessPath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
CONTEXT ct = { 0 };
ct.ContextFlags = CONTEXT_ALL;
GetThreadContext(pi.hThread, &ct);
DWORD dwSize = sizeof(WCHAR) * 1024;
BYTE *pProcessMem = (BYTE *)::VirtualAllocEx(pi.hProcess, NULL, dwSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

DWORD dwWrited = 0;
::WriteProcessMemory(pi.hProcess, (pProcessMem + 0x100), pDllPath, (wcslen(pDllPath) + 1) * sizeof(WCHAR), &dwWrited);

FARPROC pLoadLibraryW = (FARPROC)::GetProcAddress(::GetModuleHandle(L"Kernel32"), "LoadLibraryW");

BYTE ShellCode[32] = { 0 };
DWORD *pdwAddr = NULL;

ShellCode[0] = 0x60; // pushad
ShellCode[1] = 0x9c; // pushfd
ShellCode[2] = 0x68; // push
pdwAddr = (DWORD *)&ShellCode[3]; // ShellCode[3/4/5/6]
*pdwAddr = (DWORD)(pProcessMem + 0x100);
ShellCode[7] = 0xe8;
pdwAddr = (DWORD *)&ShellCode[8]; // ShellCode[8/9/10/11]
*pdwAddr = (DWORD)pLoadLibraryW - (DWORD)(pProcessMem + 7) - 5;
ShellCode[12] = 0x9d; // popfd
ShellCode[13] = 0x61; // popad
ShellCode[14] = 0xe9; // jmp

pdwAddr = (DWORD *)&ShellCode[15]; // ShellCode[15/16/17/18]
*pdwAddr = ct.Eip - (DWORD)(pProcessMem + 14) - 5;
::WriteProcessMemory(pi.hProcess, pProcessMem, ShellCode, sizeof(ShellCode), &dwWrited);
ct.Eip = (DWORD)pProcessMem;
::SetThreadContext(pi.hThread, &ct);

::ResumeThread(pi.hThread);
::CloseHandle(pi.hProcess);
::CloseHandle(pi.hThread);

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

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 138
活跃值: (306)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
pLoadLibraryW = (FARPROC)::GetProcAddress(::GetModuleHandle(L"Kernel32"), "LoadLibraryW");

ASLR
2014-12-19 07:37
0
雪    币: 376
活跃值: (92)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
标记下,看楼主怎么解决
2014-12-19 09:27
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
哈哈,我调试了一下,在win7上就不行了,因为,因为,程序那时候刚起来,kernel32还没被映射进进程空间,xp是一开始就映射模块的了,你可以用windbg调调看。可以考虑hook入口点做事情

就这鸟样
0:001:x86> u kernel32!LoadLibraryW
Couldn't resolve error at 'kernel32!LoadLibraryW'
0:001:x86> lmf
start             end                 module name
00c60000 00c90000   notepad  notepad.exe
740b0000 740b8000   wow64cpu C:\Windows\SYSTEM32\wow64cpu.dll
740c0000 7411c000   wow64win C:\Windows\SYSTEM32\wow64win.dll
74120000 7415f000   wow64    C:\Windows\SYSTEM32\wow64.dll
777a0000 77949000   ntdll    ntdll.dll   
77980000 77b00000   ntdll_77980000 ntdll.dll
2014-12-19 09:56
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
5
mark
2014-12-19 10:06
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
又是 注
2014-12-19 10:11
0
雪    币: 8188
活跃值: (2842)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
7
用ldrloaddll,如4楼,在wow64下kernel32的加载时机是不一样的。
2014-12-19 12:36
0
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
哦 的确你说的这个问题  现在我改
CreateProcess()
sleep(20000)
暂停线程()
EIP注入()

是可以
看还有什么好办法没 没就结贴给你分了  但WIN7 是没这问题的啊 XP 我也测试了
2014-12-19 15:14
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
我的方法会比较挫,hook 一些 ntdll 的函数例如 ZwSetInformationProcess

        STARTUPINFOW si = { 0 };
        PROCESS_INFORMATION pi = { 0 };
        si.cb = sizeof(STARTUPINFOW);

        ::CreateProcessW(pProcessPath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
        DWORD dwSize = sizeof(WCHAR) * 1024;
        BYTE *pProcessMem = (BYTE *)::VirtualAllocEx(pi.hProcess, NULL, dwSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

        DWORD dwWrited = 0;
        ::WriteProcessMemory(pi.hProcess, (pProcessMem + 0x100), pDllPath, (wcslen(pDllPath) + 1) * sizeof(WCHAR), &dwWrited);

        FARPROC pLoadLibraryW = (FARPROC)::GetProcAddress(::GetModuleHandle(L"Kernel32"), "LoadLibraryW");

        BYTE ShellCode[32] = { 0 };
        DWORD *pdwAddr = NULL;

        ShellCode[0] = 0x60; // pushad
        ShellCode[1] = 0x9c; // pushfd
        ShellCode[2] = 0x68; // push
        pdwAddr = (DWORD *)&ShellCode[3]; // ShellCode[3/4/5/6]
        *pdwAddr = (DWORD)(pProcessMem + 0x100);
        ShellCode[7] = 0xe8;
        pdwAddr = (DWORD *)&ShellCode[8]; // ShellCode[8/9/10/11]
        *pdwAddr = (DWORD)pLoadLibraryW - (DWORD)(pProcessMem + 7) - 5;
        ShellCode[12] = 0x9d; // popfd
        ShellCode[13] = 0x61; // popad
        ShellCode[19] = 0xe9; // jmp

        FARPROC pqueryinfo = (FARPROC)::GetProcAddress(::GetModuleHandle(L"ntdll"), "ZwSetInformationProcess");
        ReadProcessMemory(pi.hProcess, pqueryinfo, ShellCode+14, 5, &dwWrited);
        pdwAddr = (DWORD *)&ShellCode[20]; // ShellCode[15/16/17/18]
        *pdwAddr = (DWORD)pqueryinfo - (DWORD)(pProcessMem + 19);
        ::WriteProcessMemory(pi.hProcess, pProcessMem, ShellCode, sizeof(ShellCode), &dwWrited);
        ShellCode[0] = 0xE9;
        pdwAddr = (DWORD *)&ShellCode[1]; // ShellCode[15/16/17/18]
        *pdwAddr = (DWORD)pProcessMem - (DWORD)pqueryinfo - 5;
        ::WriteProcessMemory(pi.hProcess, pqueryinfo, ShellCode, 5, &dwWrited);

        ::ResumeThread(pi.hThread);
        ::CloseHandle(pi.hProcess);
        ::CloseHandle(pi.hThread);
2014-12-19 19:39
0
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你这代码不是EIP注入啊  
虽然也可以  但我测试复杂点的DLL 就不可以了

比如我使用 freeLibrar 实现隐藏

注入dll1  dll1 加载dll2  复制dll2  free dll2 在copy回dll2   dll1卸载 只保留dll2 来实现隐藏。。
用你这个注入就失败了 还未找到原因   EIP注入就没事

08510000    60              pushad
08510001    9C              pushfd
08510002    68 00015108     push    0x8510100
08510007    E8 07494E6D     call    kernel32.LoadLibraryW
0851000C    9D              popfd
0851000D    61              popad
0851000E    B8 19000000     mov     eax, 0x19
08510013  - E9 F5FA646F     jmp     ntdll_1.77B5FB0D

77B5FB08 >- E9 F3049B90     jmp     08510000
77B5FB0D    33C9            xor     ecx, ecx
77B5FB0F    8D5424 04       lea     edx, [esp+0x4]
77B5FB13    64:FF15 C000000>call    fs:[0xC0]                         ; ZwSetInformationProcess
77B5FB1A    83C4 04         add     esp, 0x4
77B5FB1D    C2 1000         retn    0x10
2014-12-19 23:05
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
你说的好复杂,不知道你为何如此设计

附带一个demo玩玩

偷偷的上传,然后偷偷地删掉
上传的附件:
2014-12-19 23:14
0
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
你发错了吧 就一个DLL 文件 有何用?
2014-12-20 15:26
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
好吧,这个dll自己复制自己到另一片内存然后释放自己,新内存运行弹 MessageBox
2014-12-20 17:49
0
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
1 个DLL 怎么实现 自己写shell code吗 ,支持MFC吗  求代码~
2014-12-20 20:50
0
雪    币: 49
活跃值: (261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
LZ找到好办法了吗?分享下啊
2016-1-11 07:41
0
游客
登录 | 注册 方可回帖
返回
//