DLL injection

#define ArrLen(arr) (sizeof(arr)/sizeof(arr[0]))

int main(int argc, char *argv[])
{
    // Open process with 
    HANDLE processHandle = OpenProcess(PROCESS_QUERY_INFORMATION        // 
                                       | PROCESS_CREATE_THREAD            // Required by 'CreateRemoteThread()'.
                                       | PROCESS_VM_OPERATION            // Required by 'VirtualAllocEx()'.
                                       | PROCESS_VM_WRITE,                // Required by 'WriteProcessMemory()'.
                                       FALSE, 1234);

    // Allocate memory at remote processs.
    char *remoteMem = static_cast<char *>(VirtualAllocEx(processHandle, nullptr, 64, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE));

    // All processes use "kernel32.dll" in the same location, we get the offset of 'LoadLibraryA()' and use it in remote process. 
    // (There is no function named 'LoadLibrary'!)
    PTHREAD_START_ROUTINE funcLoadLibrary = reinterpret_cast<PTHREAD_START_ROUTINE>(GetProcAddress(GetModuleHandle("kernel32"), "LoadLibraryA"));

    // Write argument to remote process for 'LoadLibraryA()'.
    const char buf[64] = "youDll.dll";
    WriteProcessMemory(processHandle, remoteMem, buf, ArrLen(buf), nullptr);

    // Create remote thread, and run the 'LoadLibraryA()'.
    // You can write your code at the 'case DLL_PROCESS_ATTACH' in dll.
    HANDLE hThread = CreateRemoteThread(processHandle, nullptr, 0, funcLoadLibrary, remoteMem, 0, nullptr);
    // Wait for completion of the remote task.
    WaitForSingleObject(hThread, INFINITE);

    return 0;
}

转载于:https://www.cnblogs.com/walfud/archive/2012/10/23/2735070.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值