例如:
    有一个游戏修改器;其中有一个按钮“自动打怪”;点击时游戏会实现相应的功能;
    对于游戏程序来说,自动打怪操作本质上就是call调用一个函数;
    但是修改器和游戏是两个独立的程序,游戏无法直接调用修改器中的函数;
    可以考虑将修改器中的函数封装成一个dll,然后想办法将dll放到游戏的4gb空间,这样就可以了;
    怎么想办法将dll放进目标程序的4gb空间中去,这就是dll注入的本质;
aaarticlea/png;base64,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" alt="" />
    又有一个问题:修改器如何指挥注入到游戏中的dll做哪些操作;
    这涉及到了进程通信;
    需要了解进程相关的api,还需要了解线程的控制;也就是要了解win32的知识;
    比如想实现“自动打怪”,一般怪物相关的数据会存放在数组、链表、二叉树等数据结构中;需要遍历相关的数据结构;因此需要了解数据结构相关知识;
    
1.dll的入口函数
可以在dll中添加一个入口函数;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
Init(); //自定义的函数,在dll被加载前执行
break;
case DLL_PROCESS_DETACH:
Destroy(); //自定义的函数,在dll被移出时执行
break;
}
return TRUE;
}
当dll在被加载时或被移除时会执行入口函数,并根据switch语句的case对应的阶段来决定执行相关语句;
利用入口函数,可以检测是否将dll注入成功;
 
创建一个用来注入的dll
头文件:
MyDll.h
#if !defined(AFX_MYDLL_H__A5631B62_A8CF_4C84_B164_75BDD6108880__INCLUDED_)
#define AFX_MYDLL_H__A5631B62_A8CF_4C84_B164_75BDD6108880__INCLUDED_ #if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000 void Init();
void Destroy();
extern "C" _declspec(dllexport) void ExportFunction(); #endif // !defined(AFX_MYDLL_H__A5631B62_A8CF_4C84_B164_75BDD6108880__INCLUDED_)
Stdafx.h
#if !defined(AFX_STDAFX_H__77F350E0_A16A_4DEF_ACEE_3955B97E200C__INCLUDED_)
#define AFX_STDAFX_H__77F350E0_A16A_4DEF_ACEE_3955B97E200C__INCLUDED_ #if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000 // Insert your headers here
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #include <windows.h> // TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__77F350E0_A16A_4DEF_ACEE_3955B97E200C__INCLUDED_)
实现:
MyDll.cpp
#include "stdafx.h"
#include "MyDll.h" //////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
void Init()
{
MessageBox(,"Dll加载前:我从未见过有如此厚颜无耻之人","Init",MB_OK);
}
void Destroy()
{
MessageBox(,"Dll销毁时:诸葛村夫,你敢","Destroy",MB_OK);
}
void ExportFunction()
{
MessageBox(,"不能打架,不能打架金坷垃好处都有啥,谁说对了就给他","ExportFunction",MB_OK);
}
入口主函数:
#include "stdafx.h"
#include "MyDll.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
Init(); //DLL被加载的时候会调用;HINSTANCE hModule = LoadLibrary("InjectDll.dll");
break;
case DLL_PROCESS_DETACH:
Destroy(); // DLL被销毁的时候;FreeLibrary(hModule);
break;
}
return TRUE;
}
该dll只有一个导出函数,作用是弹一个标题为ExportFunction的框;
有两个不导出的函数,Init()和Destory();在dll入口函数的加载和销毁阶段调用,用来提示dll是否成功注入;
如果dll注入成功,则在启动目标程序前会弹init框;
 
2.关于dll注入
1)常见的3环dll注入种类
    注册表注入                                        
    导入表注入                                        
    特洛伊注入                                        
    远程线程注入                    
    无DLL注入
    Apc 注入
    Windows挂钩注入DLL
    输入法注入
 
特洛伊注入的原理:
    exe根据导入表来加载dll,一个exe加载dll时首先要找到这个dll;
    例如:如果一个程序要加载kernel32.dll,首先会在exe所在目录去找该dll,如果找不到就去系统目录找;
    根据这个特点,可以自己发布一个dll,也叫kernel32,并且该dll的导出表导出的函数和kernel32一样,并放到exe所在目录;
    为了防止程序崩溃,在自己的dll的导出函数中执行自己的操作后转发kernel32函数;相当于在执行真正的kernel32函数前先
    
 
3.导入表注入
1)原理:    
    当Exe被加载时,系统会根据Exe导入表信息来加载需要用到的DLL,
    导入表注入的原理就是修改exe导入表,将自己的DLL添加到exe的导入表中,
    这样exe运行时可以将自己的DLL加载到exe的进程空间.    
 
2)主要步骤
1】根据目录项(第二个就是导入表)得到导入表信息
数据目录结构:                
typedef struct _IMAGE_DATA_DIRECTORY {
DWORD VirtualAddress;
DWORD Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
VirtualAddress :指向导入表结构            
Size:导入表的总大小            
 
2】计算插入新导入表所需要的空间
导入表结构:
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
union {
DWORD Characteristics;
DWORD OriginalFirstThunk;
};
DWORD TimeDateStamp;
DWORD ForwarderChain;
DWORD Name;
DWORD FirstThunk;
} IMAGE_IMPORT_DESCRIPTOR;
typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
INT表和IAT表中以名字导出的函数rva指向的结构:
typedef struct _IMAGE_IMPORT_BY_NAME {
WORD Hint;
BYTE Name[];
} IMAGE_IMPORT_BY_NAME, *PIMAGE_IMPORT_BY_NAME;
新增一个导入表所需的空间如图:
aaarticlea/png;base64,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ZXhrolpt/9ZjR+tbtewaAPsa+tbt/QVvzZXxngDAo4nOPn0uRmekHte8uZaek5kfidZ69dZjeuPRGm+8h7fO1jKPkRmrzSnsHG9NZh8Ac0351s38go8eBNG60f0A4MxqZ2IZ09eaHte8uVbZs2RUtNar61p2PFoj1yUjvHW2Vu5rj5EZa82pjReZOQDmm/LNs19g7wu990EQrd2yJwCcVetMtD81XYuuI73zI9FaqXsp9HURjZfrVq2Ht87WvMezao+fWV9sHQewj83fPO/LW6vJz9HUROOtdQBwRa0z0f7UpKZT2LmtOXZ+j2itV289ZjRerlvjPbw1tib3Op6oLjLrtWhOZi2AfWz69vV8qbccEhk9zwUArq51JtqfRe3ejonW+lHRPq3n0DNerlvjPbw1tT2jx8jWo3maNyezDsB+hr+BtS/v6Jd9y4Gg15brLfsBwJlF5589H+08b52utea31mdFa1r7947LfWu8hze/tr/I1sSM/aO9ARxn6FvY+wXPftm3HAq1xweARxOdgaVufxbeOl1rzW+tz4rWtPbvHZf71niP1npvv2xNtOba8da98GoA9jX0rZMvqxcrqkd65lpb1gLAVZRzV6fQ9/qnvS73IlsTuq7TK1rr1Vu1qK6Veztu71v0fG+dV8/WhFfP1go9pgPgWEt868qXf8shwAECAACAM1ima93aQNOAA8Da5JyuZXXec9YBgCxODAAAAOBANOAAAADAgWjAAQAAgAPRgAMAAAAHogEHAAAADkQDDgAAABzm6en/A0md13W66hRqAAAAAElFTkSuQmCC" alt="" />
A:20字节    ->导入表占20个字节                                                        
B:16字节    ->INT表每一项是一个4字节的结构,再加上结尾的全0的一项共需8字节,IAT表和IAT表在文件镜像中一样也要8字节;                                                        
C:取决于DLL名串的长度+1    ->Dll的名字符串,加1字节的表示字符串结尾的0                                                        
D:取决于函数名的长度+1+2    ->函数名字符串 + 1字节的字符串结尾符0 + 2字节的Hint                            
                                                        
判断哪一个节的空白区 > Size(原导入表的大小) + 20 + A + B + C + D                                                        
如果空间不够:可以将C/D 存储在其他的空白区                                                        
也就是,只要空白区 > Size + 0x20就可以了                                                        
如果仍然不够,就需要扩大最后一个节,或者新增节来解决.    
 
3】将原导入表全部Copy到空白区            
                        
4】在新的导入表后面,追加一个导入表.            
 
5】追加8个字节的INT表  8个字节的IAT表            
 
6】追加一个IMAGE_IMPORT_BY_NAME 结构,前2个字节是0 后面是函数名称字符串                            
 
7】将IMAGE_IMPORT_BY_NAME结构的RVA赋值给INT和IAT表中的第一项                        
 
8】分配空间存储DLL名称字符串 并将该字符串的RVA赋值给Name属性                        
 
9】修正IMAGE_DATA_DIRECTORY结构的VirtualAddress和Size                    
 
 
 
 

关于dll注入的更多相关文章

  1. Ring3下的DLL注入(NtCreateThreadEx + LdrLoadDll方式实现,可以注入系统进程)

    工具介绍及使用请移步:http://blog.csdn.net/sunflover454/article/details/50441014 本文首发在零日安全论坛:http://www.jmpoep. ...

  2. DLL注入

    最近的项目涉及了软件破解方面的知识,记录一下. 将dll注入另一个进程. // Inject.cpp : Defines the exported functions for the DLL appl ...

  3. [转]Dll注入经典方法完整版

    Pnig0s1992:算是复习了,最经典的教科书式的Dll注入. 总结一下基本的注入过程,分注入和卸载 注入Dll: 1,OpenProcess获得要注入进程的句柄 2,VirtualAllocEx在 ...

  4. 第22章 DLL注入和API拦截(2)

    22.4 使用远程线程来注入DLL 22.4.1 概述 (1)远程线程注入是指一个进程在另一个进程中创建线程,然后载入我们编写的DLL,并执行该DLL代码的技术.其基本思路是通过CreateRemot ...

  5. 第22章 DLL注入和API拦截(1)

    22.1 注入的一个例子(跨进程子类化窗口) ①子类化窗口可以改变窗口的行为,让发往该窗口的消息重新发到我们指定的过程来处理.但这种行为只能在本进程中(如A),对于从一个进程(如B)去子类化另一个进程 ...

  6. DLL注入之注册表

    0x00 唠叨 编写本系列文章纯属为了系统学习DLL注入的方法,所以很多方法可能已经过时,希望各位看官勿喷.当然若有更好的方法,希望不腻赐教.若本文有任何错的地方,也希望各位指正.谢谢! 0x01 适 ...

  7. c++实现dll注入其它进程

    DLL注入技术才具有强大的功能和使用性,同时简单易用,因为DLL中可以实现复杂的功能和很多的技术. 技术要点: 1.宿主进程调用LoadLibrary,就可以完成DLL的远程注入.可以通过Create ...

  8. DLL注入_拦截技术之Hook方式

    后卫大师教你进程注入 首先提一下,由于文章完全是我手写,所以打不了太多,请包含,由于我已经提供了源代码,所以我在这里详细讲一下理论,至于想看代码的下载代码就可以了.代码中关于注入的部分做了详细的注释. ...

  9. 反射Dll注入分析

    (源码作者:(HarmanySecurity)Stephen Fewer) 0x01  反射Dll注入的优点  1.反射Dll注入的主要优点是它没有以主机系统的任何方式(例如LoadLibrary和L ...

  10. dll注入遇到CreateRemoteThread()返回错误代码5

    在进行dll注入的时候,发现触发了CreateRemoteThread()的错误并返回错误代码5,刚开始以为权限不够,用了管理员权限和加了SetPrivilege()函数提权和用NtCreateThr ...

随机推荐

  1. springboot问题

    1.导入数据库jar包后,配置好,发现报错 数据库连接不成功  加上@SpringBootApplication(exclude = DataSourceAutoConfiguration.class ...

  2. # localhost 、217.0.0.1 、本机IP

    localhost .217.0.0.1 .本机IP localhost是一个域名,性质跟 "www.baidu.com" 差不多,指向127.0.0.1这个IP地址,在windo ...

  3. 关于DB2的使用(DB2数据命令)

           公司所用的数据库有金仓和DB2 首先要用命令窗口直接打开db2需要在cmd中输入:db2cmd 1:启动DB2数据库:db2start 2:连接数据库:db2 connect to  数 ...

  4. MySQL - 性能优化 & MySQL常见SQL错误用法(转载)

    1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如: , ; 一般DBA想到的办法是在type, name, create_time字段上加组合索引.这样条件排序 ...

  5. 12-MySQL DBA笔记-MySQL复制

    第12章 MySQL复制 本章将为读者讲述MySQL的复制技术,首先,介绍最基础的主从复制,它是其他所有复制技术的基础,接着再为读者讲述各种复制架构的搭建,最后,列举了一些常见的复制问题及处理方式.复 ...

  6. JDK + Tomcat 安装 + 制作自定义镜像【第 2 篇 Tomcat】

    [第 1 篇 JDK]:https://www.cnblogs.com/del88/p/11842387.html[第 2 篇 Tomcat]:https://www.cnblogs.com/del8 ...

  7. Spark机器学习API之特征处理(一)

    Spark机器学习库中包含了两种实现方式,一种是spark.mllib,这种是基础的API,基于RDDs之上构建,另一种是spark.ml,这种是higher-level API,基于DataFram ...

  8. css 对div用hover设置border,出现抖动和div走位问题,解决方法

    样式设置 : div:hover { border:1px solid red;} 当鼠标移动到div时,产生抖动和偏移. 产生的原因: 是因为设置border时设置了1px边框,多出的这1px,与其 ...

  9. 浏览器本质上是解析器javascript

    浏览器本质上是解析器.用于将符合W3C的标记序列解析并还原到编码人员希望用户看到的呈现状态.实际上,Word本身也可以看作是一个文档文件浏览器,acdsee是一个图像文件解析器(浏览器).HTML文件 ...

  10. java代码实现mock数据

    废话不多说,直接上代码. /** * 发get请求,获取文本 * * @param getUrl * @return 网页context */ public static String sendGet ...