美文网首页
代码注入

代码注入

作者: Fa1se003 | 来源:发表于2017-05-23 19:58 被阅读16次
image.png
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

typedef int (__stdcall *PMESSAGEBOX)(HWND ,LPCTSTR ,LPCTSTR ,UINT);


typedef struct _CODE_ARGS_
{
    PMESSAGEBOX     pMessageBox;
    HWND            hWnd;         
    LPCTSTR         lpText;   
    LPCTSTR         lpCaption;
    UINT            uType;
}CODE_ARGS;


DWORD Inject_Fun(CODE_ARGS *pCodeArgs)
{
    pCodeArgs->pMessageBox(pCodeArgs->hWnd,pCodeArgs->lpText,pCodeArgs->lpCaption,1);
    return 0;
}
void Inject_Fun_End(void)
{

}

int main(int argc, char* argv[])
{
    DWORD PID = 0;
    puts("Input Target Process ID:\n");
    scanf("%u",&PID);
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);
    DWORD dw = GetLastError();
    void *pRemoteAddr = VirtualAllocEx(hProcess,NULL,1024,MEM_COMMIT,PAGE_EXECUTE_READWRITE);//开辟空间
    CODE_ARGS Code_Args = {0};

    Code_Args.pMessageBox = (PMESSAGEBOX)GetProcAddress(LoadLibrary("User32.dll"),"MessageBoxA");
    Code_Args.hWnd = NULL;
    Code_Args.uType = 1;

    char TextArr[] = "Hello Boys I Come Here!";
    char CaptionArr[] = "Code Inject!";
    DWORD uType = 1;
    void *pRemoteArgAddr = NULL;
    void *pRemoteProc = NULL;

    
    DWORD dwOffset = 0,dwWriteByte = 0;

    //写入结构体两个字符串
    Code_Args.lpText = (char *)pRemoteAddr;
    WriteProcessMemory(hProcess,(void *)((DWORD)pRemoteAddr + dwOffset),TextArr,strlen(TextArr)+1,&dwWriteByte);
    dwOffset += dwWriteByte;

    Code_Args.lpCaption = (char *)((DWORD)pRemoteAddr + dwOffset);
    WriteProcessMemory(hProcess,(void *)((DWORD)pRemoteAddr + dwOffset),CaptionArr,strlen(CaptionArr)+1,&dwWriteByte);
    dwOffset += dwWriteByte;


    //写入结构体
    pRemoteArgAddr = (BYTE *)pRemoteAddr + dwOffset;
    WriteProcessMemory(hProcess,pRemoteArgAddr,&Code_Args,sizeof(Code_Args),&dwWriteByte);
    dwOffset += dwWriteByte;


    //写入函数机器码 写入长度在release下好用,debug版本需要修复
    pRemoteProc = (BYTE *)pRemoteAddr + dwOffset;
    WriteProcessMemory(hProcess,pRemoteProc,(void *)Inject_Fun,(DWORD)Inject_Fun_End - (DWORD)Inject_Fun,&dwWriteByte);
    
    DWORD TID = 0;
    HANDLE hRemotethread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pRemoteProc,pRemoteArgAddr,0,&TID);
    
    WaitForSingleObject(hRemotethread,INFINITE);
    CloseHandle(hRemotethread);
    VirtualFreeEx(hProcess,pRemoteAddr,0,MEM_RELEASE);
    CloseHandle(hProcess);
    return 0;
}

相关文章

  • iOS逆向 代码注入+Hook

    iOS逆向 代码注入+HookiOS逆向 代码注入+Hook

  • iOS应用代码注入防护

    iOS应用代码注入防护 iOS应用代码注入防护

  • iOS开发逆向之代码注入(上)

    本文主要讲解代码注入的两种方式:FrameWork注入、dylib注入 代码注入 一般修改原始的程序,是利用代码注...

  • 代码注入

    Framework库中代码注入工程的步骤:(选择iOS下创建库) Dylib库中代码注入工程的步骤:(选择MacO...

  • 代码注入

  • 代码注入

    typedef注意用法

  • 代码注入

    在学习代码注入之前,先看一下iOS 程序 main 函数之前发生了什么 一、framework形式代码注入 1.创...

  • 代码注入

    代码注入 一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等第三方库...

  • 代码注入

    前提使用了重签名脚本。1.framework注入(1)新建名为YPHOOK的framework (2)在YPHOO...

  • 代码注入

    代码注入 一般修改原始的程序,是利用代码注入的方式,注入代码就会选择利用FrameWork或者Dylib等三方库的...

网友评论

      本文标题:代码注入

      本文链接:https://www.haomeiwen.com/subject/kcmgxxtx.html