dll注入-简单main
dll injection - simple main
我正在字符串中将dll注入到.exe中,我编写了这个简单的main,但我的文件没有创建。我用cpp代码注入它,但我不认为注入器是问题所在。
DWORD WINAPI Main_thread( LPVOID lpParam)
{
std::ofstream myfile;
myfile.open ("C:\Users\root\Desktop\example.txt");
myfile << "success" << std::endl;
myfile.close();
return S_OK;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD _reason, LPVOID lpReserved)
{
if (_reason == DLL_PROCESS_ATTACH)
CreateThread(0, 0x1000, &Main_thread, 0, 0, NULL);
return true;
}
注射器代码:
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
using namespace std;
bool InjectDLL(DWORD ProcessID);
char dllPath[250] = "C:\Users\root\Desktop\testdll\bin\Debug\testdll.dll";
char ProcessName[] = "chrome.exe";
typedef HINSTANCE (*fpLoadLibrary)(char*);
int main()
{
DWORD processId = NULL;
PROCESSENTRY32 pe32 = {sizeof(PROCESSENTRY32)};
HANDLE hProcSnap;
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(Process32First(hProcSnap, &pe32))
{
do{
if(!strcmp(pe32.szExeFile, ProcessName))
{
processId = pe32.th32ProcessID;
break;
}
}while(Process32Next(hProcSnap, &pe32));
}
if (!InjectDLL(processId))
cout << "DLL failed to inject" << endl;
}
bool InjectDLL(DWORD ProcessID)
{
HANDLE hProc;
LPVOID paramAddr;
HINSTANCE hDll = LoadLibrary("KERNEL32");
fpLoadLibrary LoadLibraryAddr = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA");
hProc = OpenProcess (PROCESS_ALL_ACCESS, false, ProcessID);
paramAddr = VirtualAllocEx(hProc, 0, strlen(dllPath)+1, MEM_COMMIT, PAGE_READWRITE);
bool memoryWritten = WriteProcessMemory(hProc, paramAddr, dllPath, strlen(dllPath)+1, NULL);
CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryAddr, paramAddr, 0, 0);
CloseHandle(hProc);
return memoryWritten;
}
dll似乎没有被注入,或者他不会写,我没有将注入器作为根启动
您可以从任务管理器中诊断问题,添加PID列。或者使用SysInternals的Process Explorer。您将看到Chrome.exe启动了自己的许多实例。主要的一个只是显示用户界面,不涉及浏览网页。您将看到其他选项卡,每个选项卡对应您在浏览器中打开的选项卡。
这些其他实例是特殊的,它们在沙箱中运行附加组件和脚本代码。旨在使Chrome对可能导致浏览器崩溃或挂起的网页或脚本具有弹性。但尤其是在删除所有权限的运行时环境中运行代码,这样就不会干扰用户的机器。就像你试图写的那种代码。
因此,您的Process32First/Next((迭代器太简单了,它会拾取它首先找到的Chrome.exe的任何实例。它很可能是一个沙盒实例,不会让你搞砸它。你只能注入用户启动的实例,只显示UI的实例。这通常是这种黑客攻击的有用性结束的地方,在这种情况下没有什么有趣的事情可以处理。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++中用vector填充一个简单的动态数组
- 代码在main()中运行,但在函数中出现错误
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- 一种在C++中读取TXT配置文件的简单方法
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 函数是否可以访问传递给main()的参数
- 显示错误输出的简单数组排序程序
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- 简单 qtest 失败,'multiple definition of main'
- dll注入-简单main