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

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

2021-1-15 22:05
4765

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

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

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

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

(2):枚举进程代码

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

上一页

 
 
 
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;
 
}
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();

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

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