首页
社区
课程
招聘
[原创]pc版微信 数据库备份(7)加载器编写
2021-1-15 22:05 3981

[原创]pc版微信 数据库备份(7)加载器编写

2021-1-15 22:05
3981

加载dll进入另一个进程的方式一般有两种:
第一种:主动加载,通过注入的方式加载,先启动目标进程,在注入目标进程。
第二种:被动加载,让目标自己主动去加载我们的dll
如何实现,让目标自动加载自己编写的dll呢?
一是:自己写一个系统dll的壳,自己的dll只是实现间接的调用系统dll的功能。替换掉系统的dll。
二是:编写一个LSP(分层服务提供程序)。这种方式实现比较容易。
三是:系统驱动,这个要相对复杂了

 

我今天要说的是第一种加载方式:主动加载

 

主动加载也分两种情况
(1):目标进程由我们主动启动,然后加载外挂dll
(2):目标进程已经启动,通过枚举目标进程,然后加载外挂dll

 

(1)实现方式的重要代码:

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
void GetFullName(const char* name, char* fullName, int len)
{
    memset(fullName, 0, len);
    GetCurrentDirectory(260, fullName);
    lstrcat(fullName, "\\");
    lstrcat(fullName, name);
    OutputDebugString(fullName);
}
 
//加载dll到目标进程
void AttachDll(HANDLE hProcess)
{
    if (NULL != hProcess)
    {
        char path[260];
        GetFullName(g_dllName, path, 260);
        OutputDebugString(path);
        DetourContinueProcessWithDll(hProcess, path);
        CloseHandle(hProcess);
    }
}
 
//设置调试权限
void SetDebugPrivileges()
{
    TOKEN_PRIVILEGES tp;
    HANDLE hToken;
    HANDLE hCurProcess = ::GetCurrentProcess();
    if (::OpenProcessToken(hCurProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
    {
        ::LookupPrivilegeValue(0, "SeDebugPrivilege", &tp.Privileges[0].Luid);
        tp.PrivilegeCount = 1;
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        ::AdjustTokenPrivileges(hToken, false, &tp, 0, 0, 0);
    }
}
 
PROCESS_INFORMATION pi;
 
DWORD WINAPI attchDll(LPVOID lParam)
{
    char aimFile[260];
    char configFile[260];
    STARTUPINFO    si;
    SetDebugPrivileges();
 
 
    //启动目标客户端
    memset(&si, 0, sizeof(si));
    GetStartupInfo(&si);
    memset(&pi, 0, sizeof(pi));
    memset(aimFile, 0, 260);
 
    strcpy(aimFile, "C:\\Program Files (x86)\\Tencent\\WeChat\\Wechat.exe");
    //MessageBox(0,wowFile,"path",0);
    CreateProcess(0, aimFile, 0, 0, 0, 0, 0, 0, &si, &pi);
    Sleep(3000);
    //启动外挂
    memset(g_dllName, 0, 260);
    strcpy(aimFile, "sqliteReverse.dll");
 
    AttachDll(pi.hProcess);
    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);
 
    return 0;
 
}

(2):枚举进程代码

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
//枚举目标进程
void EnumProcess(char* processName)
{
    DWORD dwProcessId = 0;
    while (!dwProcessId)
    {
        HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
        if (hSnapshot)
        {
            PROCESSENTRY32 pe;
            pe.dwSize = sizeof(pe);
            if (::Process32First(hSnapshot, &pe))
            {
                do
                {
                    if (!::StrCmpI(processName, pe.szExeFile))
                    {
                        dwProcessId = pe.th32ProcessID;
                        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
                        //加载dll
                        AttachDll(hProcess);
                    }
                } while (::Process32Next(hSnapshot, &pe));
            }
        }
        CloseHandle(hSnapshot);
        ::Sleep(1000);
    }
}

pc版微信 数据库备份(8)源码分享

 

上一页


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-1-18 09:29 被freeGod编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 3496
活跃值: (749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kxzpy 2021-1-16 09:29
2
0
谢谢分享
游客
登录 | 注册 方可回帖
返回