本节课我们不去破解程序,本节课学习给应用程序插入一些代码片段,这里我就插入一个弹窗喽,当然你也可以插入一段恶意代码,让使用的人中招, 这里有很多原理性的东西我就不多罗嗦了毕竟是新手入门教程,如果想去了解工具的原理的话可以去系统学习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:向程序中插入新区段的更多相关文章

  1. X86逆向13:向程序中插入Dll

    本章我们将学习Dll的注入技巧,我们将把一个动态链接库永久的插入到目标程序中,让程序在运行后直接执行这个Dll文件,这一章的内容也可以看作是第八课的加强篇,第八课中我们向程序中插入了一个弹窗,有木有发 ...

  2. SQL语句 在一个表中插入新字段

    SQL语句 在一个表中插入新字段: alter table 表名 add 字段名 字段类型 例: alter table OpenCourses add Audio varchar(50)alter ...

  3. java 数组中插入新的元素

    class Demo1 { public static void main(String[] args) { /* 5. 有如下歌曲数组 String[] musics = new String[]{ ...

  4. mybatis配置文件xml中插入新数据

    初用mybatis,发现很好的一个操作数据库的框架,里面有一些小技巧,挺简单,很实用,记录一下: mybatis的插入语句: <insert id="insertAsset" ...

  5. linux下Java程序中插入DB中国的数据乱码问题

    首先,插入到DB数据,在Linux在查询时,现场展示??. 再次,在windows连接到db上,查看的结果并非乱码. 改动Eclipse软件中的编码:如上图:windows菜单->prefere ...

  6. C# 在Word表格中插入新行(表格含合并行)

    public string CreateWordFile(string CheckedInfo)         {             string message = "" ...

  7. INSERT INTO 语句用于向表格中插入新的行。

    语法 INSERT INTO 表名称 VALUES (值1, 值2,....) 我们也可以指定所要插入数据的列: INSERT INTO table_name (列1, 列2,...) VALUES ...

  8. 关于在程序中 文件新生成 在用os.system()程序对新生成的文件处理 举个栗子 如下:

    print 'save to ',savedir+os.sep+d["FILE_NAME"]                ff = open(savedir+os.sep+d[& ...

  9. ado.net 向sql中插入新数据的同时获取自增重的id值

    两种方法都可以实现: 要获取的自增长列为phonebookID 方法一: sql = "insert into phonebook (mobile,peoplename) output in ...

随机推荐

  1. 2016"百度之星" - 初赛(Astar Round2A)1006 Gym Class(HDU5695)——贪心+拓扑排序

    分析:首先,利用贪心可知,如果要所有人的分数和最高,需要把序号大的优先放在前面.其次,对于a的前面不能为b,那么只能a在b前面了,那么就建立一条从a到b的边,并且b的入度加1.然后就是拓扑排序了.要分 ...

  2. LeetCode109----链表转为二叉搜索树

    给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例:给定的有序链表: [-10, ...

  3. Final——PowerShell Empire

    一.介绍 Empire是一款针对Windows平台的.使用PowerShell脚本作为攻击载荷的渗透攻击框架工具,具有从stager生成.提权到渗透维持的一系列功能.Empire实现了无需powers ...

  4. HTTP之缓存技术

    1. 缓存简介 缓存是位于服务器和客户端的中间单元,主要根据用户代理发送过来的请求,向服务器请求相关内容后提供给用户,并保存内容副本,例如 HTML 页面.图片.文本文件或者流媒体文件.然后,当下一个 ...

  5. Golang语言快速上手到综合实战高并发聊天室

    需要的联系我:QQ:1844912514 Go是Google开发的一种编译型,可并行化,并具有垃圾回收功能的编程语言.2015,Go迎来了全迸发的一年.时隔一年,回头再看,Go已跻身主流编程语言行列. ...

  6. 带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变

    带你体验Android自定义圆形刻度罗盘 仪表盘 实现指针动态改变 转 https://blog.csdn.net/qq_30993595/article/details/78915115   近期有 ...

  7. 机器学习之DBSCAN聚类算法

    可以看该博客:https://www.cnblogs.com/aijianiula/p/4339960.html 1.知识点 """ 基本概念: 1.核心对象:某个点的密 ...

  8. python同时执行两个函数

    使用两个线程同时执行两个函数, def fun1(): while True: time.sleep(2) print("fun1") def fun2(): while True ...

  9. gdb调试caffe工程

    环境:UBUNTU 16.04 CMake caffe 1.0.0-rc3 1.首先编译caffe为debug版本: 在caffe根目录下编辑CMakeFileList.txt,加入如下几行: SET ...

  10. 【Linux】CentOS7安装mysql5.7

    官网下载地址 ​ https://dev.mysql.com/downloads/file/?id=471503 ​ 本文所用MySQL版本为5.7.19; 上传包 ​ 将mysql-5.7.19-1 ...