引言:

一个礼拜没有更新这个主题文章了,这周三看到一个微信推送。某某某博士由于写外挂被抓。当时心里那是一个崩溃,不过之前写了这个主题,还是会继续写完,不能半途而废。不过了解这本技术的千万不要拿去捞偏门。我刚写这篇文章的时候在想这个主题要不要改一改。叫《我们一起写外挂吧,会被抓那种》,^ - ^,玩笑了。开始我们今天的内容吧,我们还是继续讲内存挂,不过我们今天的主题是讲注入。

文中介绍的注入形式都会有一个小例子。

代码地址:

https://github.com/Diamonds-ZhaoYu/hz_example

开篇

所谓的dll注入,其实就是在dll注入到另外一个程序地址空间。然后该程序会把这个dll作为动态链接库调用,视为程序的一部分。

dll注入有很多种形式可以注入:apc注入、message注入、注册列表注入、远程线程注入、输入法注入、LSP劫持注入。

(一)apc注入:

在一个进程执行过程中、调用SleepEx或者WaitForSingleObjectEx函数时、系统会产生软中断。这时候线程在次被唤醒时、此线程会首先执行apc队列中被注册的函数、利用QueueUserAPC这个函数、并且去执行我们的dll加载代码 ,进而完成我们注入dll的目的。 (二)message注入: message注入其实就是windows消息钩子钩子注入、SetWindowsHook函数是windows消息处理机制的一个平台、应用程序可以指定监视指定窗口的某种消息。它可以拦截进程的消息到指定的dll中导出函数、这个特性我们就可以将dll注入到程序中。

(三)注册列表注入:

在进程中每一个进程加载user32.dll时、会受到DLL_PROCESS_ATTACH通知。在进行处理时、会取到注册列表键值HKEY_LOCAL_MACHINE\Software\Microsoft\windowsNT\CurrentVresion\Windows\AppInit_Dlls,并且会调用LoadLibrary去加载dll、若将参数值fdwReason设置为DLL_PROCESS_ATTACH时对自己会初始化。这样我们去加键值就会加载我们的dll、实现注入。

(四)远程线程注入 远程线程注入是window病毒用的广泛的一种、远程线程注入其实比较简单其实就是利用CreateRemoteThread函数创建远程线程调用LoadLibrary去加载我们我们的dll,实现注入。远程线程注入在之前的QQ尾巴病毒就是利用这个,还有多,如果有兴趣我们可以写一个类似的小程序。

(五)输入法注入:

输入法注入原理是利用系统切换输入法时、需要输入字符。系统会把这个输入法所需要的ime文件加载到进程中、而且利用ime文件只存放在C:盘window目录中的system32目录中的特殊dll、因此我们可以利用这个特性调用LoadLibrary加载自己的dll文件、实现注入。

(六)LSP劫持注入

其实这个是利用windows程序加载自己目录的dll特性,伪造系统的dll,然后在我们的dll内去调用系统原来的函数。进而实现劫持注入到程序,这样我们就可以为所欲为。

源码解析:

注入程序:

注入程序主要目的就是远程注入DLL到被注入进程中,被注入进程在这里可以是我们的游戏。

注入DLL:

注入DLL中,可以开发一个窗口资源。被注入到游戏中后,这个窗口资源可以通过比如说home键直接唤出窗口,该窗口被系统认定为被注入程序的子程序。

被注入程序:

被注入程序这里,其实就是我们的游戏,或者如果是小病毒,则是我们病毒的宿主。

启动窗口

唤出窗口

启动窗口主要代码:

注入程序触发段:

    case WM_COMMAND:if( !g_bSubclassed) {InjectDll( hStart );if( g_bSubclassed ) ::SetDlgItemText( hDlg, IDC_BUTTON, "卸载" );}else {UnmapDll();if( !g_bSubclassed ) ::SetDlgItemText( hDlg, IDC_BUTTON, "插入" );}break;

注入程序:

int InjectDll( HWND hWnd )
{   g_hWnd = hWnd;// Hook "*.exe"g_hHook = SetWindowsHookEx( WH_CALLWNDPROC,(HOOKPROC)HookProc,hDll, GetWindowThreadProcessId(hWnd,NULL) );if( g_hHook==NULL )return 0;// By the time SendMessage returns, // the START button has already been subclassedSendMessage( hWnd,WM_HOOKEX,0,1 );return g_bSubclassed;
}

DLL唤出窗口主要代码:

读取金币方法:

/**
* 读取金币方法
*/
void ReadMoney(HWND hwnd)
{HWND wgHwnd =  ::FindWindow(NULL,TEXT("植物大战僵尸中文版"));if (wgHwnd ==NULL){           return ;}DWORD procid;::GetWindowThreadProcessId(wgHwnd,&procid);//获得进程IDHANDLE prochandle=::OpenProcess(PROCESS_ALL_ACCESS,false,procid);//打开进程DWORD sunny; DWORD baseAddr = SUNNY_NUMBER_ADDR;DWORD stackAddr;DWORD dataAdrr;阳光基址读取读基地址ReadProcessMemory (prochandle,(void *)baseAddr,&stackAddr,4,0);          //阳光基址 + 一级偏移 = 一级基址stackAddr = stackAddr + 0x768 ;//读二级偏移基地址ReadProcessMemory(prochandle,(void *)stackAddr,&dataAdrr,4,0);     //二级偏移 + 二级偏移 = 阳光地址dataAdrr = dataAdrr + 0x5560 ;//读取阳光数据ReadProcessMemory(prochandle,(void *)dataAdrr,&sunny,4,0);    TCHAR szText1[MAX_PATH] = {0};sprintf(szText1,TEXT("%d"),sunny);SetDlgItemText(hwnd,IDC_EDIT1,szText1);::CloseHandle(prochandle);
}

修改金币方法:

/**
* 修改阳光
*/
void ChangeSunny(HWND hwnd)
{HWND wgHwnd =  ::FindWindow(NULL,TEXT("植物大战僵尸中文版"));if (wgHwnd ==NULL){           return ;}DWORD procid;::GetWindowThreadProcessId(wgHwnd,&procid);//获得进程IDHANDLE prochandle = ::OpenProcess(PROCESS_ALL_ACCESS,false,procid);//打开进程DWORD sunny; DWORD baseAddr = SUNNY_NUMBER_ADDR;DWORD stackAddr;DWORD dataAdrr;阳光基址读取读基地址ReadProcessMemory (prochandle,(void *)baseAddr,&stackAddr,4,0);        //阳光基址 + 一级偏移 = 一级基址stackAddr = stackAddr + 0x768 ;//读二级偏移基地址ReadProcessMemory(prochandle,(void *)stackAddr,&dataAdrr,4,0);     //二级偏移 + 二级偏移 = 阳光地址dataAdrr = dataAdrr + 0x5560 ;//获取文本框输入TCHAR szText1[MAX_PATH] = {0};GetDlgItemText(hwnd,IDC_EDIT1,szText1,MAX_PATH);sunny = (DWORD)atoi(szText1);//写入数据WriteProcessMemory(prochandle, (void *)dataAdrr, &sunny, 4, 0);   CloseHandle(prochandle);
}

其余部分大家可以看github上源代码,有完成源代码。

结尾:

虽然我们学会了如何注入程序到dll,但是离真正的高级编程还远。注入dll其实是一种反查杀策略。就好比把dll看成我们是一伙的不排斥你。

后面章节我们会讲外挂的反游戏保护驱动。谢谢~

【外挂编程】外挂编程技术揭秘(三)DLL注入相关推荐

  1. BIM用C语言编程,实现BIM技术的三个重要方面是()。A.BIM的建立B.BIM的应用C.BIM的管理D.BIM的粒度E.BIM的概念...

    实现BIM技术的三个重要方面是().A.BIM的建立B.BIM的应用C.BIM的管理D.BIM的粒度E.BIM的概念 更多相关问题 科学家已经揭示,视觉功能归因于对光特别敏感的蛋白质-视觉素. 科学性 ...

  2. Windows核心编程_远线程方式实现Dll注入

    之前有介绍过HOOK的方式注入,这次介绍以其它方式注入,而无须HOOK,要知道在Windows这个浩荡的海洋里,API就是宝藏,找到足够多的宝藏那么你就是海贼王~! 实现思路如下: 首先打开一个进程的 ...

  3. 地图定位技术揭秘(三)

    个人博客:xiuxiuing.gitee.io/blog 室内定位技术原理揭秘 地图软件已经成为我们日常出行必不可少的工具之一,在导航和搜索上带来了很多便捷的帮助.而定位技术在地图软件里的应用可谓无法 ...

  4. 【外挂编程】外挂编程技术揭秘(二)

    引言: 经过上一篇文章大家可能对外挂有了一个初步的认识,之前的内容比较简单,应该大家很容易掌握.我写作过程中我发现三个篇幅可能写不完,后续还可能要多加几个篇幅,这篇我们就先以内存挂为主吧.话不多说了, ...

  5. C语言游戏外挂:C++简单 DLL 注入超级玛丽!

    通过C语言编写一个DLL文件和一个EXE文件,其中DLL包含作弊功能,运行EXE后将DLL注入游戏,使得游戏仅靠自身进程便可以实现作弊功能. 下面是小编整理好的一套C/C++资料,加小编C/C++编程 ...

  6. 学编程当中最重要的三点,一些很正经的建议

    来源 | 沉默王二(ID:cmower) 今天不聊别的,给大家聊一下我认为学编程当中最重要的三点,尤其是针对新人来说. 热爱 努力 解决问题的能力 先说热爱. 有的同学是一开始就热爱,所以选专业的时候 ...

  7. VC++动态链接库(DLL)编程(四)――MFC扩展 DLL

    VC++动态链接库(DLL)编程(四) ――MFC扩展 DLL 作者:宋宝华  e-mail:21cnbao@21cn.com   前文我们对非MFC DLL和MFC规则DLL进行了介绍,现在开始详细 ...

  8. Qt:Windows编程—DLL注入与卸载

    前言 这里说的DLL注入 是将我们指定的DLL注入到指定的进程中,DLL卸载也就是将指定进程中的DLL卸载下来.在Windows提供的API中有 CreateRemoteThread函数 见名知意 创 ...

  9. android xml java混合编程_Java学习中注解与多线程,网络编程与XML技术

    本部分内容主要有集合框架及泛型,实用类,输入和输出处理,注解与多线程,网络编程与XML技术.初次学习这部分会感觉很难,主要是概念难于理解,最好是多看看例子,多练习.下面是个人的总结 拉勾IT课小编为大 ...

最新文章

  1. python合并word内容相同单元格_python:怎样合并文档中有重复部分的行?
  2. html5倒计时秒杀怎么做,vue 设计一个倒计时秒杀的组件
  3. 从简单到高并发服务器(一)
  4. 从B站到咪咕圈圈,看汉服「出圈」与年轻人「入圈」
  5. 动态折线图 python_python 怎么做个动态折线
  6. 汇编写java模块_java – maven汇编插件moduleset源指令不包括任何文件,不符合附带的模块...
  7. vuebaidumap 删除覆盖物_VUE BAIDU MAP覆盖物 - 自定义覆盖物手记
  8. 在北上广,年薪不到40W意味着什么?
  9. 20X05 FCPX插件磨皮润肤美容插件 beautybox 4.2.3
  10. zencart模板列表下载地址
  11. 为表的添加中文属性时出现的Incorrect string value: '\xE7\x9A\x84\xE6\xB1\xEA...
  12. 王者荣耀战力在线查询小程序源码
  13. SS14、SS24、SS34 区别
  14. springboot多数据源配置导致mybatis的下划线转驼峰命名不起作用
  15. python----列表 例题 创建一个列表,命名为foods, 在列表中保存5个食物士豆,西红柿面条,苹果,披萨并打印出每一个食物的名字
  16. 麻雀虽小,五脏俱全——由C语言小程序深入学习软件工程和设计开发规范
  17. Ubuntu 16.04 如何安装Fcitx五笔拼音输入法
  18. 苏上海市计算机1级考试,苏省一级计算机考试题目判断1
  19. 天下熙熙,皆为利来;天下攘攘,皆为利往。—第三十八天
  20. C++实例:定义Circle类,计算圆的面积

热门文章

  1. 数据中台即服务——数据中台的四大支柱
  2. 读 wav 音频画 mel 频谱图(python)
  3. 如何让多个版本的Python和谐共处
  4. error LNK2019, LNK1120
  5. Python之实例(一)
  6. git的安装与基础操作
  7. 面板JPanel,滚动面板JScrollPane,文本域JTextArea
  8. 推荐一个截图工具fscapture
  9. 美国的华人码农,正在成为IT届的吠舍?
  10. 【蓝桥杯单片机组】客观题(赛前必看)