1.LoadExe

接python版本

通过调用LoadExe去加载Dll进行注入

所以先看LoadExe 加载器的功能吧

通过python管道接收到  processID,ThreadID,路径 ,然后就开始搞事情了注入了

接收原理 管道具有传递命令行参数专递的作用,利用其进程间通信的功能,通过命令行传进来,不废话 开始了

先调用这几个函数 打开对方的进程,线程空间,

然后把加载Dll LoadLdrDll的函数地址,Dll路径写到对方进程空间

构建ShellCode

为什么要用汇编呢,应该你是在他人的电脑上调用,模块地址什么的都不一样,想实现的功能的从基层自己构建。然后QueueUserAPC

把ShellCode插入到APC队列,使其调用。ShellCode的功能就是LoadLibray(咱的Dll)并执行

Ok,LoadExe完美完成任务,进入Dll注入

2 Dll注入原理

  

  Dll首先隐藏peb  不让对方发现自己

  

  

先说一下得到peb的方法吧

/__readfsdword是按照dword大小返回fs寄存器中指定偏移量的值

所以关键还是看fs寄存器是干什么的

那么现在看这篇博客的介绍

http://blog.csdn.net/misterliwei/article/details/4391580

代码运行在 RING0 (系统地址空间)和 RING3 (用户地址空间)时, FS 段寄存器分别指向 GDT( 全局描述符表 ) 中不同段

不说复杂的  直接windbg看结构就知道了

先看32位的TEB  0x30处就是PEB的地址

    

nt!_TEB
+0x000 NtTib : _NT_TIB
+0x000 ExceptionList : Ptr32
+0x004 StackBase : Ptr32
+0x008 StackLimit : Ptr32
+0x00c SubSystemTib : Ptr32
+0x010 FiberData : Ptr32
+0x010 Version : Uint4B
+0x014 ArbitraryUserPointer : Ptr32
+0x018 Self : Ptr32 <——
+0x01c EnvironmentPointer : Ptr32
+0x020 ClientId : _CLIENT_ID
+0x000 UniqueProcess : Ptr32
+0x004 UniqueThread : Ptr32
+0x028 ActiveRpcHandle : Ptr32
+0x02c ThreadLocalStoragePointer : Ptr32
+0x030 ProcessEnvironmentBlock : Ptr32 < ——
+0x034 LastErrorValue : Uint4B
+0x038 CountOfOwnedCriticalSections : Uint4B
+0x03c CsrClientThread : Ptr32
+0x040 Win32ThreadInfo : Ptr32
……

  

同样 64位的地址为0x60 所以上面代码原因很清楚了

接下来就是注入了

先修改g_Hooks代码属性,等下说

继续看代码,

创建线程快照,将所有的线程挂起,执行注入,因为挂起,sleep这种等待或等待函数

会触发APC队列,进而执行我们的Dll

g_Hooks如下

  

回顾下宏的作用 就是自己定义的东西能代表一个具体的东西

所以这个宏我理解为  使用后面的自己构造的东西 会调用前面的模块和函数

就是两者等价调用

  

接下来 开始注入, 后面一大串相当与自己构造的指令,比如 jmp ,call,push指令

后面根据前面的模块名和函数名得到函数地址开始钩

先遍历地址,把函数调用 调到其他函数的地址部分全都跳过

防止地址调到其他模块去 不易操作

  

然后就是 内存地址属性 申请内存上

CreateHookTrampoline()将原先函数各种直接,间接跳转的指令保存,

先将其跳到我们申请的地址空间,

然后在我们的地址空间 构建要操作 跳转函数的地址 ,并在执行完我们的函数后,回到程序原先调用的地方。Hook链实现的中途插入调用我们注入的函数

  

Dll的其他部分

  

这个宏就是 跟原先函数参数一模一样自己构造的函数,利用宏 把原模块的相应参数传进来

然后实现我们想注入的功能,这里输出通知对方看见也是使用的进程间通信的管道

,Old_NtCreateUserProcess然后调用原先的函数。注入成功

												

[Cuckoo SandBox]注入原理篇的更多相关文章

  1. 讲sql注入原理的 这篇不错(有空可以看看)

    我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  2. 【串线篇】spring泛型依赖注入原理

    spring泛型依赖注入原理 不管三七二十一 servlet :加注解@servlet service:加注解@service dao:加注解@Repository 这相当于在容器中注册这些个类

  3. 十种MYSQL显错注入原理讲解(二)

    上一篇讲过,三种MYSQL显错注入原理.下面我继续讲解. 1.geometrycollection() and geometrycollection((select * from(select * f ...

  4. SQL注入原理

    随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一 部分程序员在编写代码的时候,没有对用户输入数据的合法性 ...

  5. sql注入--双查询报错注入原理探索

    目录 双查询报错注入原理探索 part 1 场景复现 part 2 形成原因 part 3 报错原理 part 4 探索小结 双查询报错注入原理探索 上一篇讲了双查询报错查询注入,后又参考了一些博客, ...

  6. 管中窥豹——框架下的SQL注入 Java篇

    管中窥豹--框架下的SQL注入 Java篇 背景 SQL注入漏洞应该算是很有年代感的漏洞了,但是现在依然活跃在各大漏洞榜单中,究其原因还是数据和代码的问题. SQL 语句在DBMS系统中作为表达式被解 ...

  7. SQL注入原理及代码分析(一)

    前言 我们都知道,学安全,懂SQL注入是重中之重,因为即使是现在SQL注入漏洞依然存在,只是相对于之前现在挖SQL注入变的困难了.而且知识点比较多,所以在这里总结一下.通过构造有缺陷的代码,来理解常见 ...

  8. SQL注入原理及代码分析(二)

    前言 上一篇文章中,对union注入.报错注入.布尔盲注等进行了分析,接下来这篇文章,会对堆叠注入.宽字节注入.cookie注入等进行分析.第一篇文章地址:SQL注入原理及代码分析(一) 如果想要了解 ...

  9. Cesium原理篇:5最长的一帧之影像

    如果把地球比做一个人,地形就相当于这个人的骨骼,而影像就相当于这个人的外表了.之前的几个系列,我们全面的介绍了Cesium的地形内容,详见: Cesium原理篇:1最长的一帧之渲染调度 Cesium原 ...

随机推荐

  1. Go语言学习教程:管理员登录功能开发

    学习完了数据库操作的知识以后.本节内容,我们将实现管理员登陆功能,涉及到多个模块的代码实现和逻辑处理,以及数据库表的操作,都将在本节内容中进行实现. 管理员结构体定义 首先我们要定义管理员这个实体的结 ...

  2. Linux之杀掉进程

    pkill命令可以按照进程名杀死进程.pkill和killall应用方法差不多,也是直接杀死运行中的程序:如果您想杀掉单个进程,请用kill来杀掉. 语法 pkill(选项)(参数) 选项 -o:仅向 ...

  3. Python循环加强版——列表生成式

    记得我们在其他语言中都学到过循环,尤其是对for循环是再熟悉不过了 比如我有一个数组  a[10]={1,2,3,4,5,6,7,8,9,10} 下面需要依次循环打印出来,C语言首先想到的是 for( ...

  4. loj#6229. 这是一道简单的数学题 (??反演+杜教筛)

    题目链接 题意:给定\(n\le 10^9\),求:\(F(n)=\sum_{i=1}^n\sum_{j=1}^i\frac{\mathrm{lcm}(i,j)}{\mathrm{gcd}(i,j)} ...

  5. 9.27下午考试(Nescafé 29杯模拟赛)

    140pts(100+30+10)Rank3 前几天还考了一场,AK,没什么好总结的,所以就没写博客. 炸: T2,模拟退火突然不会了,写个状压dp,排序边的时候sort的N而不是M. 这个坑经常出! ...

  6. Hadoop源码分析之产生InputSplit文件过程

        用户提交 MapReduce 作业后,JobClient 会调用 InputFormat 的 getSplit方法 生成 InputSplit 的信息.     一个 MapReduce 任务 ...

  7. kuangbin专题十六 KMP&&扩展KMP HDU2087 剪花布条

    一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和小 ...

  8. 【STL基础】deque

    deque (double-ended queue) 构造函数: //default: deque<T> d; //空的vector //fill: deque<T> d(n) ...

  9. SQL-Error-1

    错误描述:String   or   binary   data   would   be   truncated. 原因:字段长度不够

  10. N - 嘤嘤嘤 (并查集+枚举)

    Our lovely KK has a difficult Social problem. A big earthquake happened in his area. N(2≤N≤2000)N(2≤ ...