找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 875|回复: 19

昭姐每天一练- 经典注入游戏2(QueueApc注入)

[复制链接]

30

主题

1

回帖

0

积分

版主

积分
0
发表于 2013-6-8 10:56:42 | 显示全部楼层 |阅读模式
优点:比较隐蔽,简单  缺点:实现的条件比较苛刻





#include "stdafx.h"


#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <TlHelp32.h>

#include <iostream>
#include <string>
using namespace std;

#define DEF_BUF_SIZE 1024

// 用于存储注入模块DLL的路径全名
char szDllPath[DEF_BUF_SIZE] = {0} ;

// 使用APC机制向指定ID的进程注入模块
BOOL InjectModuleToProcessById ( DWORD dwProcessId )
{
    DWORD    dwRet = 0 ;
    BOOL    bStatus = FALSE ;
    LPVOID    lpData = NULL ;
    UINT    uLen = strlen(szDllPath)
    // 打开目标进程
    HANDLE hProcess = OpenProcess ( PROCESS_ALL_ACCESS, FALSE, dwProcessId ) ;
    if ( hProcess )
    {
        // 分配空间
        lpData = VirtualAllocEx ( hProcess, NULL, uLen, MEM_COMMIT, PAGE_EXECUTE_READWRITE ) ;
        if ( lpData )
        {
            // 写入需要注入的模块路径全名
            bStatus = WriteProcessMemory ( hProcess, lpData, szDllPath, uLen, &dwRet ) ;
        }
        CloseHandle ( hProcess ) ;
    }

    if ( bStatus == FALSE )
        return FALSE ;

    // 创建线程快照
    THREADENTRY32 te32 = { sizeof(THREADENTRY32) } ;
    HANDLE hThreadSnap = CreateToolhelp32Snapshot ( TH32CS_SNAPTHREAD, 0 ) ;
    if ( hThreadSnap == INVALID_HANDLE_VALUE )
        return FALSE ;

    bStatus = FALSE ;
    // 枚举所有线程
    if ( Thread32First ( hThreadSnap, &te32 ) )
    {
        do{
            // 判断是否目标进程中的线程
            if ( te32.th32OwnerProcessID == dwProcessId )
            {
                // 打开线程
                HANDLE hThread = OpenThread ( THREAD_ALL_ACCESS, FALSE, te32.th32ThreadID ) ;
                if ( hThread )
                {
                    // 向指定线程添加APC
                    DWORD dwRet = QueueUserAPC ( (PAPCFUNC)LoadLibraryA, hThread, (ULONG_PTR)lpData ) ;
                    if ( dwRet > 0 )
                        bStatus = TRUE ;
                    CloseHandle ( hThread ) ;
                }
            }

        }while ( Thread32Next ( hThreadSnap, &te32 ) ) ;
    }

    CloseHandle ( hThreadSnap ) ;
    return bStatus;
}

int _tmain(int argc, _TCHAR* argv[])
{
    // 取得当前工作目录路径
    GetCurrentDirectoryA ( DEF_BUF_SIZE, szDllPath ) ;

    // 生成注入模块DLL的路径全名
    strcat ( szDllPath, "\\DLLSample.dll" ) ;

    DWORD dwProcessId = 0 ;
    // 接收用户输入的目标进程ID
    while ( cout << "请输入目标进程ID:" && cin >> dwProcessId && dwProcessId > 0 )
    {
        BOOL bRet = InjectModuleToProcessById ( dwProcessId ) ;
        cout << (bRet ? "注入成功!":"注入失败!") << endl ;
    }
    return 0;
}
[attachment=50]

26

主题

17

回帖

0

积分

版主

积分
0
发表于 2013-6-8 12:27:01 | 显示全部楼层
:x 小昭我是无忌

23

主题

21

回帖

0

积分

版主

积分
0
发表于 2013-6-8 13:55:48 | 显示全部楼层
:x 你是无忌(的)哥哥

1793

主题

457

回帖

0

积分

管理员

积分
0
发表于 2013-6-8 14:27:19 | 显示全部楼层

回 无知 的帖子

无知::x 小昭我是无忌&#160;(2013-06-08 12:27)&#160;

你是无忌的弟弟无知

:cry:

1

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-6-8 14:33:05 | 显示全部楼层
我是殷野王

2

主题

14

回帖

0

积分

新手上路

积分
0
发表于 2013-6-19 13:05:39 | 显示全部楼层
感谢分享!~~~~~~~~

67

主题

115

回帖

0

积分

版主

积分
0
发表于 2013-6-20 14:57:00 | 显示全部楼层
金毛狮王。

0

主题

8

回帖

0

积分

新手上路

积分
0
发表于 2013-6-21 17:07:05 | 显示全部楼层
感谢分享。要是有易版 就好了:evil:

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2013-7-3 17:42:16 | 显示全部楼层
hehe

30

主题

1

回帖

0

积分

版主

积分
0
 楼主| 发表于 2013-7-3 21:10:05 | 显示全部楼层

回 lingzhuxi 的帖子

lingzhuxi:感谢分享。要是有易版 就好了:evil: &#160;(2013-06-21 17:07)&#160;
易语言版 本来就有我会发出来的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 21:05 , Processed in 0.104532 second(s), 21 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表