X86逆向13:向程序中插入Dll
本章我们将学习Dll的注入技巧,我们将把一个动态链接库永久的插入到目标程序中,让程序在运行后直接执行这个Dll文件,这一章的内容也可以看作是第八课的加强篇,第八课中我们向程序中插入了一个弹窗,有木有发现一个问题?单单是一个弹窗我们就需要经历这么多的步骤,那如果你要调用几十个API函数估计早就疯透了,这里我们其实可以直接编写一些能够完成特殊功能的Dll文件,然后让程序通过LoadLibraryA函数动态的加载执行,LoadLibrary这个函数是在Kernel32.dll这个库中保存的,庆幸的是这个动态链接库99%的程序都必须加载,这就为我们动态加载Dll提供了有效的支持。
------------------------------------------------------------
本章难度:★★★★★☆☆☆☆☆
课程课件:CM_13.zip
------------------------------------------------------------
1.首先我们需要编写一个Dll动态链接库,其内部的内容就自由发挥吧,比如写一个后门下载程序,哈哈。这里我就用易语言写一个简单的弹窗,然后让Dll只要被加载就默认执行。

代码很简单,我们直接编译生成一个动态链接库,这里我就生成一个名叫【lyshark.dll】的动态链接库文件啦,当然你也可以用C/C++或Win32汇编来写这个Dll,都可。
2.接下来我们就找到【CM_01.exe】直接用【Stud_PE工具】打开,找到kernel模块中的【LoadLibraryA】这个函数,并记录下它的偏移地址【000812AC】。

3.OD直接载入【CM_01.exe】,然后按下【Alt+E】,看程序的基地址是多少,嗯!此处是【00400000】,加上【000812AC】就等于【004812AC】,记下这个相加的结果。

4.然后去数据窗口,按下【Ctrl + G】,输入刚才的地址【004812AC】,然后会看到有一段地址【7C801D7B】,这里我们记下这个地址,这个地址就是程序加载动态链接库的函数地址。

5.去反汇编窗口,按下【Ctrl + B】输入一大堆0,这里任意输入即可,目的是跳转到一片空旷的区域中去。

6.然后开始写加载dll的代码片段,最后的代码格式如下所示,这里的push地址先暂时用【00401000】代替,然后我们记下入口地址【0048011C】。

7.回到OD点击EIP地址,回到程序的OEP位置,去到这个程序的段首,然后我们记下以下几条汇编指令。

此处我们暂时先用NOP指令填充,防止后期写代码时会乱。

8.然后在NOP的最上方写上一条JMP指令,跳转到我们刚才布局好的代码位置处。

10.然后在popad指令的下方接着写上刚才我们填充NOP的那些指令,保证程序完整性。

11.在最下方写上跳转到【push 00460FEB】的无条件跳转指令。

12.最后在下方写上dll的名字,并记下地址【0048013A】

13.替换上方字符串,最后代码如下。


到此我们直接保存全部修改内容就好了,然后我们运行修改后的程序,程序会弹出我们的窗体,然后才会加载原来的窗体

写教程不容易,转载请加出处,您添加出处,是我创作的动力!
X86逆向13:向程序中插入Dll的更多相关文章
- X86逆向8:向程序中插入新区段
本节课我们不去破解程序,本节课学习给应用程序插入一些代码片段,这里我就插入一个弹窗喽,当然你也可以插入一段恶意代码,让使用的人中招, 这里有很多原理性的东西我就不多罗嗦了毕竟是新手入门教程,如果想去了 ...
- Delphi之DLL知识学习5---在Delphi应用程序中使用DLL
首先说明一下:同一个动态库(DLL)被多个的程序加载的话,那么将会在每次加载的时候都会重新分配新的独立的内存空间,绝对不是共用一个,所以当一个DLL被多次加载的时候,其会在内存中“复制”多份,不会互相 ...
- linux下Java程序中插入DB中国的数据乱码问题
首先,插入到DB数据,在Linux在查询时,现场展示??. 再次,在windows连接到db上,查看的结果并非乱码. 改动Eclipse软件中的编码:如上图:windows菜单->prefere ...
- 如何向VS2010中插入ActiveX控件并且附带相应的类
上两篇文章中我们已经讲述了ActiveX控件的一些相关知识,本文中,简单说明一下如何在我们自己的程序中使用ActiveX控件.(仍以我们上节课的例子为例) 我们打开VS2010编辑器,新建一个基于对话 ...
- C#中使用DLL文件
首先,我们需要在C++程序中导出DLL文件.我使用的是Visual Studio开发,把项目"属性"中的“配置类型”改为"动态库dll",然后添加如下导出代码: ...
- java中调用dll文件的两种方法
一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676 JNativ ...
- Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)
文章目录: 1. 引子: 2. Native Application Demo 展示: 3. Native Application 简介: 4. Native Ap ...
- C#将dll打包到程序中
最近比较懒,加上内容也不多就懒得排版了,字放大了,看起来应该方便一点 直接进入主题 先来看一个栗子,假设现在有一个第三方dll namespace TestLibrary1 { public clas ...
- 在程序中使用geos.dll
1 在项目->property->configuration properties->c/c++->general->additional include directo ...
随机推荐
- Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000794500000, 576716800, 0)
linux基于tomcat部署的web应用程序报 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000 ...
- LeetCode 25. k个一组翻转链表(Reverse Nodes in k-Group)
题目描述 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序. 示例 : 给定 ...
- css3弹性盒子display:flex
先看上面的代码,解释一下意思,看你能认识多少(后面有注释): .container { display: flex; //弹性布局 flex-direction: column; //容器内项目的排列 ...
- selenium死活定位不到元素以及radio单选框点击不生效
今天操作一个单选框浪费太多时间,现在其实很简单得东西,记录一下: 1,问题一,定位不到 如图,使用selenium IDE和xpath helper都试过,无法成功定位到这个单选框,实际上是因为,这个 ...
- Kettle源码学习(一)——把Kettle项目跑起来
kettle(pentaho data integration),是一款开源的C/S版的ETL工具,最近打算学习一下kettle源码,并自己写一个mini kettle,并改造成基于事件触发的流处理模 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-2.使用Mybatis注解开发视频列表增删改查
笔记 2.使用Mybatis注解开发视频列表增删改查 讲解:使用Mybatis3.x注解方式 增删改查实操, 控制台打印sql语句 1.控制台打印sql语句 ...
- Vim的强大配置文件
我的vim配置主要有以下优点: 1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2.自动插入文件头 ,新建C.C++源文件时自动插入表 ...
- c语言数组类型默认值(c99)
#include <stdio.h> #include <stdlib.h> int main() { ] = {}; //每个值默认0 ; i < len; i ++) ...
- Product - 产品经理 - 内容
特别说明 本文是已读书籍的学习笔记和内容摘要,原文内容有少部分改动,并添加一些相关信息,但总体不影响原文表达. - ISBN: 9787568041591 - https://book.douban. ...
- springboot-定时任务-单线程
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annot ...