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 ...
随机推荐
- IDEA个人常用配置记录
原文 一.常用快捷键 编辑 ⇧ + ↩:开始新的一行 ⌘ + ⇧ + ↩:行内任意位置进行换行,并自动补齐“;”.“{}” ⌘ + ⇧ + U:大小写切换 ⌥ + ⌦:删除到单词的末尾(⌦键为Fn+D ...
- ORACLE数据库黑/白名单
编辑sqlnet.ora文件 #开启ip限制功能tcp.validnode_checking=yes#允许访问数据库的IP地址列表,多个IP地址使用逗号分开tcp.invited_nodes=(10. ...
- 真正解决方案:phpMyAdmin #1089 - Incorrect prefix key; the storage engine doesn't support unique prefix key
先直接给解决方案: 点击A_I后,不要输入大小,直接点击执行!!! 分析 当你在使用phpMyAdmin 创建数据库表的时候,一般我们需要设置一个主键,然后让其自增长,但是有时候当你设置完成后,你可能 ...
- IDEA类和方法注释模板设置(非常详细)
一.首先我们来设置IDEA中类的模板:(IDEA中在创建类时会自动给添加注释) 1.File-->settings-->Editor-->File and Code Template ...
- go 语言 interface{} 的易错点
一,interface 介绍 如果说 goroutine 和 channel 是 go 语言并发的两大基石,那 interface 就是 go 语言类型抽象的关键.在实际项目中,几乎所有的数据结构最底 ...
- 1. hadoop使用启动命令时报错之分析解决
今天在学习hadoop启动命令的时候,先jps看了下,发现namenode.datanode都开着,所以想要先停止这些服务,结果输入命令后报错:“WARN util.NativeCodeLoader: ...
- 手机通过fiddler调试页面
fiddler设置 首先我们打开Fiddler->Tools->Fiddler Options在Connection面板里将Allow remote computers to connec ...
- JavaScript(9)—— CSS定位综合练习
画布上画矩形 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- spring-boot结合maven配置不同环境的profile
1.在spring-boot中新建配置文件 spring-boot不同环境配置文件格式为application-{profile}.yml 说明: 如果application.yml中的配置和appl ...
- 【Hadoop】Hadoop的数据压缩方式
概述 压缩技术能够有效减少底层存储系统(HDFS)读写字节数.压缩提高了网络带宽和磁盘空间的效率.在Hadoop下,尤其是数据规模很大和工作负载密集的情况下,使用数据压缩显得非常重要.在这种情况下 ...