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 ...
随机推荐
- SSH工具--FinalShell
FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发,运维需求.特色功能:免费海外服务器远程桌面加速,ssh加速,双边tcp加速,内网穿 ...
- deep sort
目录 1. 准备代码与数据 deep_sort开源代码 克隆到本地服务器 git clone https://github.com/nwojke/deep_sort.git 下载MOT16数据集( ...
- 预处理、const、static与sizeof-static全局变量与普通的全局变量有什么区别
1:全局变量的说明之前再加上static就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别在于,非静态全局变量的作用域是整 ...
- Java后端开发规范
基于阿里巴巴JAVA开发规范整理 一.命名风格 [强制]类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO 正例:Marco ...
- Nginx数据结构之散列表
1. 散列表(即哈希表概念) 散列表是根据元素的关键码值而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录, 以加快查找速度.这个映射函数 f 叫做散列方法,存放记录的数 ...
- Flume-Spooling Directory Source 监控目录下多个新文件
使用 Flume 监听整个目录的文件,并上传至 HDFS. 一.创建配置文件 flume-dir-hdfs.conf https://flume.apache.org/FlumeUserGuide.h ...
- vue 动态组件,传递参数
<template> <div class="top"> <div class='nav'> <ul class='navHader'&g ...
- Jsp +Js + Jquery + EasyUI + Servlet + Lucene,完成分页
package loaderman.fy.action; import java.io.IOException; import java.io.PrintWriter; import java.uti ...
- rally使用tempest进行测试
安装 通过Rally进行Tempest测试,执行如下命令创建tempest实例,Rally会自动同步tempest代码至本地: rally verify create-verifier --name ...
- vlc的流输出功能
vlc的流输出功能 流输出功能,可以将vlc读取到的流,输出到文件或者通过网络发送,客户端可以使用http.rtp.rtsp等协议访问,还可以进行转码等操作. 参考http://wiki.videol ...