首页
社区
课程
招聘
未解决 [求助]反射式注入x86 MFC dll 应该如何修改代码 100雪币
发表于: 2024-10-29 16:42 1536

未解决 [求助]反射式注入x86 MFC dll 应该如何修改代码 100雪币

2024-10-29 16:42
1536

如题,我抄代码实现了正常的空dll反射式注入,但是碰到mfc dll就抓瞎了,因为mfc dll好像除了dllmain,还有额外的初始化步骤。

反射式注入部分已经基本实现了,只剩导出表没有处理,不过这个不影响正常dll的注。我该怎么才能正常注入mfc dll呢?

注入器调用dllmain入口函数代码:

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
//工具类
DWORD Asm_PushImm(PBYTE Order, DWORD Imm)
{
    Order[0] = 0x68; // push imm32
    *(PDWORD)&Order[1] = Imm; // 正确地设置32位立即数
    return 5; // push imm32 总是占用5个字节
}
 
DWORD Asm_Call(PBYTE Order, DWORD Imm,DWORD Addr)
{
    Order[0] = 0xe8; // call rel32
    Addr += 5; // 调整为下一条指令的地址
    *(PDWORD)&Order[1] = Imm - Addr; // 计算相对偏移
    return 5; // call rel32 总是占用5个字节
}
 
DWORD Asm_Return(PBYTE Order)
{
    Order[0] = 0xc3;
    return 1;
}
 
//构建调用代码
BYTE Order[32]{};
DWORD pos = 0;
pos += Asm_PushImm(Order, 0);
pos += Asm_PushImm(Order + pos, DLL_PROCESS_ATTACH);
pos += Asm_PushImm(Order + pos, (DWORD)pDllBase);
pos += Asm_Call(Order + pos, (DWORD)pDllBase + pNtHeader->OptionalHeader.AddressOfEntryPoint, (DWORD)pMemoEx + pos);
Asm_Return(Order + pos);
 
//写入调用代码
WriteProcessMemory(hProcess, pMemoEx, Order, 32, NULL);
 
//启动线程
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pMemoEx, NULL, 0, NULL);
 
if (hThread == NULL) {
    delete[] FileData;
    CloseHandle(hProcess);
    return FALSE;
}
 
// 等待线程完成
std::cout << "Waiting for thread to finish..." << std::endl;
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 138
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
mark
2024-11-17 21:50
0
游客
登录 | 注册 方可回帖
返回
//