X86逆向8:向程序中插入新区段
本节课我们不去破解程序,本节课学习给应用程序插入一些代码片段,这里我就插入一个弹窗喽,当然你也可以插入一段恶意代码,让使用的人中招, 这里有很多原理性的东西我就不多罗嗦了毕竟是新手入门教程,如果想去了解工具的原理的话可以去系统学习PE文件结构的一些内容,好了废话不多说直接开搞。
------------------------------------------------------------
本章难度:★★★☆☆☆☆☆☆☆
课程课件:CM_01.zip
------------------------------------------------------------
1.直接打开OD,载入这个程序,我们首先来记下【00460FE1】这个OEP地址,后期会用到。

2.关闭OD,打开【Stud_PE_chs.exe】这个PE编辑工具,将CM拖入,然后选择区段,右键,新的区段。

3.选择添加新区段以后,将区段命名为【.hack】,区段的大小为【1000】,最后点击加入按钮,下方则会显示一个.hack新段。

4.然后选择函数,添加新的输入表。

5.选择【添加新的输入表】会弹出以下菜单,直接点击【dll选择】,然后选择【MessageBoxA】,直接加入到清单中,这里为啥是user32.dll学过前面课程的你应该不需要我解释了。

6.然后添加以后,可以在最下方看到【user32.dll】,我们紧接着记下它的RVA地址【000BF123】。

7.一切准备就绪之后,我们关闭这个PE文件编辑器,直接打开OD,然后按下【Alt + M】可以看到我们新加的区段【.hack】,我们直接记下它的地址【004BE000】。

8.接着按下【Alt+C】回到反汇编窗口,然后【Ctrl + G】输入刚才记下的那个区段首地址,【004BE000】,会发现是空的,没错这里就是我们申请的那个1000字节的空间,待会要在这里做文章。

9.接着我们来寻找MessageBox函数的地址位置,先计算一下,然后在数据窗口,按下【Ctrl +G】输入【004BF123】,将里面的地址取出来,这个地址就是MessageBox的地址。

10.接下来就是写入弹窗代码啦,先来看弹窗的调用参数,这里我们直接照样子写就好,只是注意push的地方替换成我们的字符串。

11.先来写入以下代码,用来临时占位置,这里的CALL的地址是【77D507EA】,JMP的地址是程序的原入口地址【00460FE1】

12.接着我们来写入一些字符串内容,直接选中一段空区域,然后按下【Ctrl + E】,输入如下字符串内容,并记下【004BE01C】

13.回到上面的弹窗代码上,依次替换两个push的内容,最终代码如下。

14.直接复制并保存文件

15.最后我们修正以下入口地址,此处的【004BE000】就是我们附加区段的地址,转换后将RVA(相对虚拟地址)复制到入口点上面,直接【储存到文件】

16.运行新的程序会发现,程序先弹出hello lyshark,然后才会载入源程序,如果此时是一段下载后门的代码,那就刺激了。

这里我给大家写了一段可以下载恶意程序的汇编代码片段,你只需要替换里面的网址即可使用,请勿干坏事!!!

写教程不容易,转载请加出处,您添加出处,是我创作的动力!
X86逆向8:向程序中插入新区段的更多相关文章
- X86逆向13:向程序中插入Dll
本章我们将学习Dll的注入技巧,我们将把一个动态链接库永久的插入到目标程序中,让程序在运行后直接执行这个Dll文件,这一章的内容也可以看作是第八课的加强篇,第八课中我们向程序中插入了一个弹窗,有木有发 ...
- SQL语句 在一个表中插入新字段
SQL语句 在一个表中插入新字段: alter table 表名 add 字段名 字段类型 例: alter table OpenCourses add Audio varchar(50)alter ...
- java 数组中插入新的元素
class Demo1 { public static void main(String[] args) { /* 5. 有如下歌曲数组 String[] musics = new String[]{ ...
- mybatis配置文件xml中插入新数据
初用mybatis,发现很好的一个操作数据库的框架,里面有一些小技巧,挺简单,很实用,记录一下: mybatis的插入语句: <insert id="insertAsset" ...
- linux下Java程序中插入DB中国的数据乱码问题
首先,插入到DB数据,在Linux在查询时,现场展示??. 再次,在windows连接到db上,查看的结果并非乱码. 改动Eclipse软件中的编码:如上图:windows菜单->prefere ...
- C# 在Word表格中插入新行(表格含合并行)
public string CreateWordFile(string CheckedInfo) { string message = "" ...
- INSERT INTO 语句用于向表格中插入新的行。
语法 INSERT INTO 表名称 VALUES (值1, 值2,....) 我们也可以指定所要插入数据的列: INSERT INTO table_name (列1, 列2,...) VALUES ...
- 关于在程序中 文件新生成 在用os.system()程序对新生成的文件处理 举个栗子 如下:
print 'save to ',savedir+os.sep+d["FILE_NAME"] ff = open(savedir+os.sep+d[& ...
- ado.net 向sql中插入新数据的同时获取自增重的id值
两种方法都可以实现: 要获取的自增长列为phonebookID 方法一: sql = "insert into phonebook (mobile,peoplename) output in ...
随机推荐
- 使用vim编辑python智能提示
一.vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.p ...
- LeetCode 328. 奇偶链表(Odd Even Linked List)
题目描述 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O ...
- VS2008 Qt Designer 中自定义信号槽
一.Qt Designer自定义槽函数 发现:在VS2008 +Qt4.7 中打开ui文件,所用的英文QT Designer工具,没有转到槽函数的功能,不如QtCreator自带的QtDesigne ...
- laravel-5.3(1) 路由配置
第一步: 按照上一篇搭建好工程后可以看到框架默认的 welcome 默认视图: 一般的web 开发框架是MVC设计模式,那么我们现在创建自己的控制器和视图,CMD 进入到工程根目录执行 php art ...
- 解决 无法启动此程序,因为计算机中丢失opencv_world341.dll。请尝试重新安装改程序已解决此问题
在运行OpenCV程序时报错:“无法启动此程序,因为计算机中丢失opencv_world341.dll.请尝试重新安装改程序已解决此问题”. 解决方法 我的bin目录是 D:\opencv\build ...
- 图解Python 【第八篇】:网络编程-进程、线程和协程
本节内容一览图: 本章内容: 同步和异步 线程(线程锁.threading.Event.queue 队列.生产者消费者模型.自定义线程池) 进程(数据共享.进程池) 协程 一.同步和异步 你叫我去吃饭 ...
- thinkphp5的控制器调用自身模块和调用其他模块的方法
以user为例,调用user.php的get_number()方法 一.不管是调用自身模块还是其他模块app\model\User.php写法不变 <?php namespace app\ind ...
- 自定义zabbix脚本--网卡平均流量
自定义zabbix脚本--网卡平均流量1. 在客户端修改配置文件 /etc/zabbix/zabbix_agentd.conf需要改动两个地方:(1) UnsafeUserParameters=1(2 ...
- openstack思维导图
RABBITMQ memcache keystone glance nova neutron cinder horizon
- server 2008 R2 DHCP服务器部署
安装DHCP服务器 和上一篇文章中安装IIS 7.0一样,我们在安装DHCP服务器的时候也要用到Windows Server 2008的服务器安装器. 首先打开服务器管理器,点击开始菜单——>管 ...