易语言教程_易语言源码_易语言视频教程_易语言论坛

 找回密码
 点击注册

Vip新手入门区
新手学习指南  学员作品展示 Vip课程总纲  Vip绝密课程系列

Vip相关下载区
Vip模块下载   Vip模块绑定   Vip模块例子 魔鬼插件下载  魔鬼插件例子  教程工具下载

Vip论坛服务区
教程问题提问区   模块问题提问区 技术交流区   魔鬼插件建议   忘记密码找回

VIP会员办理QQ: 8643245   
【请先加好友,然后到好友列表双击联系客服,办理VIP会员。】
【基础篇】易语言辅助入门基础教程
VIP模块办理QQ: 7189694 办理正版魔鬼作坊VIP模块 【基础篇】OD与CE入门基础教程
办理【终身VIP会员】“秒杀价” 仅需 RMB278.00元… 【基础篇】零基础绝密汇编语言入门课程 (共26课已完成)…
办理VIP详情…猛击这里查看详情 【基础篇】VIP辅助入门基础教程-新手必学 已发布10课 ……
VIP教程免费试看章节…猛击下载 【第1款】制作“辅助挂”教程目录查看(共107+16_x64下更新课已完成)…
亲爱的VIP学员,请到此写下你学习的感受与发布作品截图… 【第2款】制作“任务挂”教程目录查看(共77+1_x64下更新课已完成)…
卍解吧!不用bp send类封包断点找CALL的各种通杀思路 【第3款】驱动过保护技术课程(共38课已完成)…
【绝密教程】VIP绝密教程系列---注意:随时会更新! 【第4款】VIP邪恶二叉树辅助课程 (共31+17_x64下更新课已完成)…
【精品第13款】3D射击游戏与页游透视 智辅课程 已完成17课… 【第5款】零基础易语言按键辅助教程 (30课已完成)…
【精品第14款】变态功能辅助是如何炼成的 已完成36课… 【第6款】从零开始学习封包辅助技术教程(20课已完成) …
【精品第15款】DNF商业变态辅助的修炼之路 已完成27课… 【第7款】大杀特杀分析来源与CALL吸血鬼课程 (56课已完成)
【精品第16款】中控台多线程多开自动化商业辅助课程 已完成66课… 【第8款】完全零基础网页辅助课程(40课已完成)
【全新精品第17款】检测原理与过游戏内存检测技术课程 已发布9课… 【第9款】自动登录与操控LUA技术课程 (共46+8_x64下更新课已完成)…
【全新精品第18款】手游全自动化任务脚本辅助课程 已发布25课…… 【第10款】网页辅助封包脱机进阶课程 已完成30课…
【全新精品第19款】D3D方框骨骼透视与自瞄辅助课程进阶篇 已发布34课…… 【第11款】VC++ Lua脚本辅助课程 已完成112课…
【全新精品第20款】 X64模拟器吃鸡游戏方框透视自瞄辅助课程 发布中... 【第12款】网游脱机封包智辅课程 已完成35课…
查看: 1351|回复: 0

HOOK键盘注入DLL,F12呼出智辅思路,有源码有真相

[复制链接]

14

主题

3

回帖

23

积分

编程入门

Rank: 1

魔鬼币
9134
发表于 2017-5-29 20:55:06 | 显示全部楼层 |阅读模式
学写智辅有好几天,最近2天一直在找智辅呼出思路,无奈网上的代码的太少,鲜有C++的,只好自己摸索写出了一个DEMO,献给与我一样迷茫的菜鸟.

一.  注入代码常用三种形式

•    Windows 钩子 :将代码放入DLL,然后通过 Windows 钩子映射该DLL到远程进程
•    CreateRemoteThread 和 LoadLibrary , 将代码放入DLL,然后通过CreateRemoteThread,调用 LoadLibrary函数,让远程进程加载DLL
•    CreateRemoteThread 和 WriteProcessMemory, 可以直接将你的代码拷贝到远程进程——通过 WriteProcessMemory——并用 CreateRemoteThread 启动它的执行.   
本文所用的第一种方法,HOOK键盘注入DLL.并在DLL中创建对话框,用于智辅显示

二.    详细过程
第一步,我们需要一个DLL用于注入,这个DLL封装了我们智辅的界面

(1) 建MFC DLL工程
建立新工程
创建MFC(dll),选择
Regular DLL using shared mfc DLL

(2首先,我们导出两个函数,用于HOOK键盘,代码片段如下:
注意,这里的参数是线程ID(不是进程ID,这里要搞清楚),也就是要传入远程进程一个线程ID,理论上任意一个线程ID都可以
WG_HOOK BOOL WINAPI InstallHook(DWORD dwID)
{
    if (g_hhook == NULL)
    {
        g_hhook = ::SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, theApp.m_hInstance, dwID);
        if (g_hhook == NULL)
        {
            return FALSE;
        }     
        MessageBox(NULL,"成功HOOK,请按F12进行测试","提示",MB_OK);
    }
    return TRUE;
}


WG_HOOK BOOL WINAPI UninstallHook()
{
    return ::UnhookWindowsHookEx(g_hhook);
}

(3)在资源中建立一个对话框,设置其类为CWGMainDlg,用于捕捉到键盘F12时显示
HOOK键盘显示代码片段:
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    BOOL bKeyUp = lParam & (1 << 31);
    if (bKeyUp && wParam == VK_F12 && nCode == HC_ACTION)
    {
        if (pMainDlg == NULL)  
        {
            //更改当前有效模块状态到DLL中
            //以便正确的读取对话框的资源
            AFX_MANAGE_STATE(AfxGetStaticModuleState());
            //找到当前的有效激活窗口
            CWnd *pCWnd = CWnd::GetForegroundWindow();
            //生成CS3DHookDlg类的对象实例
            //此处应该生成一个非模态对话框
            pMainDlg = new CWGMainDlg();
            pMainDlg->Create(IDD_DIALOG1, pCWnd);

        }
        else  
        {
            //根据当前呼出窗口的状态来显示或隐藏呼出窗口
            pMainDlg->ShowWindow(pMainDlg->IsWindowVisible() ? SW_HIDE : SW_SHOW);
        }
    }
    return ::CallNextHookEx(g_hhook, nCode, wParam ,lParam);
}

第二步,我们需要一个EXE程序用于挂勾注入DLL.
新建一个MFC对话框程序,添加一个按钮,并添加按钮事件
代码片段:

    char szExeName[MAX_PATH];
    strcpy(szExeName,"ListForCrack.exe");//假定我们注入的目标进程是这个
    DWORD dwProcessId = processNameToId(szExeName);//通过进程名找进程ID
     
    if( 0 == dwProcessId )
    {
        MessageBox("找不到进程");
        return;
    }
     
    DWORD dwThreadID =  GetThreadIDByProcssID(dwProcessId);//通过进程ID找一个线程ID
    InstallHook(dwThreadID);

这里要特别注意的是GetThreadIDByProcssID这个函数,得到进程的一个线程ID进行HOOK

DWORD GetThreadIDByProcssID(DWORD dwProcessID)
{
    DWORD dwThreadID = 0;
    THREADENTRY32 te32 = {sizeof(te32)};
    HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,dwProcessID);
    if( Thread32First( hThreadSnap, &te32) )
    {
        do{
            if( dwProcessID == te32.th32OwnerProcessID )
            {
                dwThreadID = te32.th32ThreadID;
                break;
            }
        }while( Thread32Next( hThreadSnap, &te32) );
    }  
     
    return dwThreadID;
}
您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

魔鬼作坊|易语言教程|易语言源码|易语言论坛|易语言视频教程| 论坛导航|免责申明|手机版||网站地图
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表魔鬼作坊立场!
任何人不得以任何方式翻录、盗版或出售本站视频,一经发现我们将追究其相关责任!
我们一直在努力成为最好的编程论坛!
Copyright© 2010-2019 All Right Reserved.
快速回复 返回顶部 返回列表