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. 167. Two Sum II - Input array is sorted两数之和

    1. 原始题目 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明 ...

  2. 基于vue框架项目开发过程中遇到的问题总结(一)

    (一)关于computed修改data里变量的值 问题:computed里是不能直接修改data里变量的值,否则在git commit 时会报错 解决:在computed里使用get和set来进行获取 ...

  3. 洛谷P2606 [ZJOI2010]排列计数(数位dp)

    题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Magic的,答案可能很 ...

  4. GET/POST/g和钩子函数(hook)

    GET请求和POST请求: 1. get请求: * 使用场景:如果只对服务器获取数据,并没有对服务器产生任何影响,那么这时候使用get请求. * 传参:get请求传参是放在url中,并且是通过`?`的 ...

  5. vue脚手架的搭建

    另一博客地址:https://segmentfault.com/a/1190000016451376 一.基础的知识 1.html 2.js 3.css二.搭建项目过程--windows系统1.nod ...

  6. P3554 [POI2013]LUK-Triumphal arch

    \(\color{#0066ff}{ 题目描述 }\) 给一颗树,1号节点已经被染黑,其余是白的,两个人轮流操作,一开始B在1号节点,A选择k个点染黑,然后B走一步,如果B能走到A没染的节点则B胜,否 ...

  7. Warning: Static member accessed via instance reference

    Warning: Static member accessed via instance reference Shows references to static methods and fields ...

  8. 7.Palindrome Linked List(回文链表)

    Level: ​  Easy 题目描述: Given a singly linked list, determine if it is a palindrome. Example 1: Input: ...

  9. HDU1253 胜利大逃亡 (BFS)

      胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  10. php字符串中去除html标签

    strip_tags() 函数剥去字符串中的 HTML.XML 以及 PHP 的标签.