首页
社区
课程
招聘
11
[原创]纯C++编写Win32/X64通用Shellcode注入csrss进程.
发表于: 2015-8-8 04:26 38684

[原创]纯C++编写Win32/X64通用Shellcode注入csrss进程.

2015-8-8 04:26
38684

这是做的一些研究,觉得没什么用处,人生不应该把精力放在这些小打小闹的垃圾玩意身上;先讲一下文章的主题这样做的目的,这样做免去了用汇编代码限制,纯C++编写的东西移植性高.

注入csrss进程要点:只能用导入表之存在ntdll的dll进行注入,否则会失败.其他要点基本上没什么了,csrss进程pid使用CsrGetProcessId函数获取,免去了遍历进程的痛苦.

看下我们的注入器(这是Win32/x64通用的).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "main.h"
#include "base/component_name.h"
 
namespace bootldr{
    static HANDLE WINAPI ShellcodeBegin(PTHREAD_DATA parameter){
        if (parameter->fnRtlInitUnicodeString != nullptr&&parameter->fnLdrLoadDll != nullptr){
            UNICODE_STRING UnicodeString;
            parameter->fnRtlInitUnicodeString(&UnicodeString, parameter->dllpath);
            HANDLE module_handle = nullptr;
            return (HANDLE)parameter->fnLdrLoadDll(nullptr, nullptr, &UnicodeString, &module_handle);
        }
        else{
            return (HANDLE)-3;
        }
    }
    static DWORD WINAPI ShellcodeEnd(){
        return 0;
    }
    static bool SetProcessPrivilege(DWORD SE_DEBUG_PRIVILEGE = 0x14){
        BOOLEAN bl;
        RtlAdjustPrivilege(SE_DEBUG_PRIVILEGE, TRUE, FALSE, &bl);
        return bl;
    }
    static bool ProcessInternalExecute(PTHREAD_DATA parameter,DWORD process_id){
        HANDLE hProcess = nullptr;
        CLIENT_ID cid = { (HANDLE)process_id, nullptr };
        OBJECT_ATTRIBUTES oa;
        InitializeObjectAttributes(&oa, NULL, 0, NULL, NULL);
        if (!NT_SUCCESS(NtOpenProcess(&hProcess, PROCESS_ALL_ACCESS, &oa, &cid))){
            return false;
        }
        PVOID data = VirtualAllocEx(hProcess, NULL, 0x2000, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
        PVOID code = VirtualAllocEx(hProcess, NULL, 0x2000, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
        if (!data || !code){
            NtClose(hProcess);
            return false;
        }
        NtWriteVirtualMemory(hProcess, data, parameter, sizeof(THREAD_DATA), NULL);
        NtWriteVirtualMemory(hProcess, code, (PVOID)ShellcodeBegin, (ULONG)((LPBYTE)ShellcodeEnd - (LPBYTE)ShellcodeBegin), NULL);
        HANDLE hThread = nullptr;
        if (!NT_SUCCESS(RtlCreateUserThread(hProcess, NULL, FALSE, 0, 0, 0, code, data, &hThread, NULL))){
            NtClose(hProcess);
            return false;
        }
        NtWaitForSingleObject(hThread, FALSE, NULL);
        DWORD exit_code = -1;
        GetExitCodeThread(hThread, &exit_code);
        NtClose(hThread);
        VirtualFreeEx(hProcess, data, 0, MEM_RELEASE);
        VirtualFreeEx(hProcess, code, 0, MEM_RELEASE);
        NtClose(hProcess);
        return (exit_code==0);
    }
    std::wstring GetAbsolutePath(const std::wstring& name){
        wchar_t fileName[MAX_PATH] = {0};
        GetModuleFileNameW(NULL, fileName, MAX_PATH);
        PathRemoveFileSpec(fileName);
        return std::wstring(fileName).append(name);
    }
    void SetShellcodeLdrModulePath(PTHREAD_DATA parameter,const std::wstring& srcfile){
        wcscpy_s(parameter->dllpath, srcfile.c_str());
    }
}
 
int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nShowCmd){
    THREAD_DATA parameter = {0};
    parameter.fnRtlInitUnicodeString = (pRtlInitUnicodeString)GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "RtlInitUnicodeString");
    parameter.fnLdrLoadDll = (pLdrLoadDll)GetProcAddress(GetModuleHandleW(L"ntdll.dll"), "LdrLoadDll");
    parameter.fnGetTempPathW = (pGetTempPathW)GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "GetTempPathW");
    parameter.fnGetSystemDirectoryW = (pGetSystemDirectoryW)GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "GetSystemDirectoryW");
    parameter.fnGetVolumeInformationW = (pGetVolumeInformationW)GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "GetVolumeInformationW");
    bootldr::SetProcessPrivilege();
    bootldr::SetShellcodeLdrModulePath(&parameter, bootldr::GetAbsolutePath(base::kBootldrName));
    bootldr::ProcessInternalExecute(&parameter, GetCurrentProcessId()/*CsrGetProcessId()*/);
    return 0;
}

[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 11
支持
分享
赞赏记录
参与人
雪币
留言
时间
東陽不列山
为你点赞!
2025-1-31 04:37
一路南寻
为你点赞!
2025-1-8 05:23
伟叔叔
感谢你的贡献,论坛因你而更加精彩!
2024-8-20 05:56
心游尘世外
看雪因你而更加精彩!
2024-7-11 06:47
QinBeast
感谢你的贡献,论坛因你而更加精彩!
2024-7-10 05:58
Youlor
为你点赞!
2024-6-11 02:42
飘零丶
为你点赞~
2024-5-31 05:26
shinratensei
为你点赞~
2024-5-31 05:19
PLEBFE
为你点赞~
2023-2-26 01:08
sfzhi
为你点赞~
2023-1-11 11:59
Anowhere
为你点赞~
2022-6-16 17:42
最新回复 (30)
雪    币: 55963
活跃值: (21450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
IE首页保护算法逆向工程?
东西先不要删除,如果写的好,版主会移到软件调试版块去的
2015-8-8 17:54
2
雪    币: 18
活跃值: (1059)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
顶起来,人生必须通过努力才能得到自己想要、喜欢的东西.
2015-8-13 20:51
1
雪    币: 10
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rel
4
占坑以待
2015-8-14 02:37
1
雪    币: 878
活跃值: (496)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
小东西成就大事物
2015-8-16 11:34
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
围观一下,顶起来
2015-8-16 12:08
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
人生不应该把精力放在这些小打小闹的垃圾玩意身上
2015-8-16 14:13
0
雪    币: 16711
活跃值: (2783)
能力值: ( LV9,RANK:147 )
在线值:
发帖
回帖
粉丝
8
楼上偏了,.感谢楼主分享.不要小看一些小事物,积累起来可能成就无穷的力量.
2015-8-16 14:51
0
雪    币: 242
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
附件缺少头文件啊,大神。
1
main.cc(2): fatal error C1083: 无法打开包括文件: “base/component_name.h”: No such file or directory
2015-8-16 15:54
0
雪    币: 263
活跃值: (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
技术很重要,修养也很重要,老板眼中都只是工具,相煎何急呢
2015-8-18 09:45
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
11
点赞~csrss注入还是被人发出来了~
2015-8-18 11:27
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
错误        1        error C1083: 无法打开包括文件: “base/component_name.h”: No such file or directory        C:\Users\link\Desktop\bootldr\dllmain.cc        3        1        bootldr
2015-8-18 12:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
mark
2015-8-18 14:36
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
膜拜 csrss注入
2015-8-23 21:49
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢楼主分享
2015-8-26 18:28
0
雪    币: 630
活跃值: (570)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢楼主分享~
2016-1-9 09:42
0
雪    币: 260
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
启动远程线程失败了。。
2016-3-7 10:01
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
你这逗逼
2016-4-1 23:04
0
雪    币: 137
活跃值: (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
报个要求版本12,你当前版本为4的错误
2016-4-3 11:11
0
雪    币: 235
活跃值: (23)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
打开csrss进程失败呀?如何打开csrss进程
2016-9-27 09:25
0
雪    币: 115
活跃值: (23)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
21
你就想大家都不发,你们统治内核!!
2016-11-18 21:05
0
雪    币: 115
活跃值: (23)
能力值: (RANK:20 )
在线值:
发帖
回帖
粉丝
22
兄弟,六个联系方式把。我有事情请教你!
2016-11-18 21:06
0
雪    币: 10971
活跃值: (5156)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
感谢楼主分享。
2016-11-18 21:56
0
雪    币: 40
活跃值: (303)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
谢谢,易编译出来竟然免杀
2016-11-20 22:57
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
能说说 这个注入后有什么用.可以做什么坏事呢....这进程权限很高的啊
2016-11-20 23:11
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册