首页 > 其他分享 >inlineHook 注入

inlineHook 注入

时间:2023-02-26 18:14:16浏览次数:54  
标签:MessageBox include OK DLL return NULL inlineHook 注入

inject.h

#pragma once

#ifndef INJECT_H
#define INJECT_H


int inject_sc();

#endif // !INJECT_H


#include <windows.h>
#include <stdio.h>
#include <iostream>
#include "include/inject.h"
#include <tchar.h>
#include <TlHelp32.h>

using namespace std;


static HANDLE hprocess;

char DllFileName[] = "E:\\codes\\cpp\\66pkscwc\\Debug\\66pkscwc.dll";
DWORD dllPathSize = strlen(DllFileName) + 1;


// 提权函数
BOOL EnableDebugPrivilege()
{
    HANDLE hToken;
    BOOL fOk = FALSE;
    if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
    {
        TOKEN_PRIVILEGES tp;
        tp.PrivilegeCount = 1;
        LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);

        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);

        fOk = (GetLastError() == ERROR_SUCCESS);
        CloseHandle(hToken);
    }
    return fOk;

}




int inject_sc() {
    //点击注入按钮
    wchar_t buff[0x100] = { 0 };
    DWORD weChatProcessId = 0;
    // 1) 遍历系统中的进程,找到进程(CreateToolhelp32Snapshot、Process32Next)
    HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    swprintf_s(buff, L"CreateToolhelp32Snapshot=%p", handle);
    OutputDebugString(buff);
    PROCESSENTRY32  processentry32 = { 0 };
    //这个结构体需要有一个初始值的大小
    processentry32.dwSize = sizeof(processentry32);

    BOOL next = Process32Next(handle, &processentry32);
    while (next == TRUE) {
        if (wcscmp(processentry32.szExeFile, L"starcraft.exe") == 0) {
            //如果这个等于星际争霸可执行文件的名字
            weChatProcessId = processentry32.th32ProcessID;
            break;
        }

        next = Process32Next(handle, &processentry32);

    }
    if (weChatProcessId == 0) {
        MessageBox(NULL, L"没找到星际争霸的进程!", L"错误", MB_OK);
        return false;

    }
    // 2)  打开进程,获得Handle(OpenProcess)
    HANDLE openHandle = OpenProcess(PROCESS_ALL_ACCESS, TRUE, weChatProcessId);

    if (NULL == openHandle) {
        MessageBox(NULL, L"打开星际争霸的进程失败!", L"错误", MB_OK);
        return false;
    }


    // 3)  打开进程中的DLL文件路径字符串申请内存空间(VirtualAllocEx)
    LPVOID allocAddress = VirtualAllocEx(openHandle, NULL, dllPathSize, MEM_COMMIT, PAGE_READWRITE);

    if (NULL == allocAddress) {
        MessageBox(NULL, L"分配内存空间失败!", L"错误", MB_OK);
        return false;
    }
    swprintf_s(buff, L"VirtualAllocEx=%p", allocAddress);
    OutputDebugString(buff);
    // 4)  把DLL文件路径字符串写入到申请的内存空间(WriteProcessMemory)
    BOOL res = WriteProcessMemory(openHandle, allocAddress, DllFileName, dllPathSize, NULL);

    if (res == 0) {
        MessageBox(NULL, L"把DLL文件路径字符串写入到申请的内存空间失败!", L"错误", MB_OK);
        return false;
    }
    // 5)  从kerne32.dll中获取LoadLibraryA的函数地址(GetModuleHandler、GetProcAddress)

    HMODULE hMODULE = GetModuleHandle(L"kernel32.dll");
    FARPROC fARPROC = GetProcAddress(hMODULE, "LoadLibraryA");

    if (NULL == fARPROC) {
        MessageBox(NULL, L" 从kerne32.dll中获取LoadLibraryA的函数地址失败!", L"错误", MB_OK);
        return false;
    }

    // 6)  在启动内存指定了文件名路径诶DLL(CreateRemoteThread)
    //也就是调用DLL中的DLLMain(以DLL_PROCESS_ATTACH)为参数

    HANDLE hANDLE = CreateRemoteThread(openHandle, NULL, 0, (LPTHREAD_START_ROUTINE)fARPROC, allocAddress, 0, NULL);
    if (NULL == hANDLE) {
        MessageBox(NULL, L" 启动内存指定了文件名路径诶DLL失败!", L"错误", MB_OK);
        return false;
    }
    DWORD DllAddr = 0;
    //等待线程函数结束,获得退出码
    WaitForSingleObject(hANDLE, -1);
    GetExitCodeThread(hANDLE, &DllAddr);


   /* HWND scWnd = FindWindowA(0, "Brood War");
    if (NULL == scWnd) {
        MessageBox(NULL, L" 没有找到星际的窗口!", L"错误", MB_OK);
        return false;
    }*/
    
   // WinMain((HINSTANCE)scWnd,0, (LPSTR)"", 0);
    


    return 1;
}



标签:MessageBox,include,OK,DLL,return,NULL,inlineHook,注入
From: https://www.cnblogs.com/cfas/p/17157199.html

相关文章

  • 记录下SQL注入案例
    SQL注入大扫除时发现了几年前的笔记本,稍微看了下过去的笔记。SQL注入这玩意虽说是很老的问题了,在mybatis等优秀的ORM框架里面早已经通过预编译技术解决了。但是突然......
  • Spring依赖注入
    1.基于set方法注入<beanclass="com.jixian.spring.entity.Book"><propertyname="bname"value="计算机百科全书"/><propertyname="author"va......
  • 被注入的dll 获取进程的加载地址,并通过偏移修改游戏数据
    //dllmain.cpp:定义DLL应用程序的入口点。#include"pch.h"#include<stdio.h>#include<tchar.h>#include<exception>#include<wchar.h>#include<windows.h......
  • 数据库架构、SQL漏洞注入
    找到数据库中的table表和colmuns表,里面是本机所有的数据库。    在vscode中找到php中的sql语句。      只有list.php中的第46行是有变量的sql语句,......
  • MySQL数据库架构&SQL注入漏洞
    1.查找zblog数据库中有哪些表查找目标表(zbp_member)中的的字段查找目标表中的目标数据(管理员的用户名密码)4.使用UNION语句替换掉原有查询结果,显示zblog数据库中的所有表。网......
  • GD32调试BUG-TIMER比较触发ADC注入模式
    在使用GD32f103的TIMER比较事件触发ADC注入模式时,如果TIMER模块的主频太高会导致ADC模块随机性接受不到TIMER模块发出的比较事件触发,只能降低TIMER模块的主频,其实就是牺牲P......
  • ASP.NET Core - 依赖注入(二)
    .NETCore依赖注入的基本用法话接上篇,这一章介绍.NETCore框架自带的轻量级Ioc容器下服务使用的一些知识点,大家可以先看看上一篇文章[ASP.NETCore-依赖注入(......
  • 依赖注入-Yii 模式-深入理解YII2.0(3.2)
    依赖注入和依赖注入容器为了降低代码耦合程度,提高项目的可维护性,Yii采用多许多当下最流行又相对成熟的设计模式,包括了依赖注入(​​DenpdencyInjection,DI​​​)和服务定......
  • 注入技巧
    尝试注入:测试1'or1=1#,初步判定存在SQL注入。1'or1=1#再测试字段数,到3时报错,说明字段数为2.1'orderby1#接着尝试union注入,回显了过滤的关键字。1'......