本节课我们不去破解程序,本节课学习给应用程序插入一些代码片段,这里我就插入一个弹窗喽,当然你也可以插入一段恶意代码,让使用的人中招, 这里有很多原理性的东西我就不多罗嗦了毕竟是新手入门教程,如果想去了解工具的原理的话可以去系统学习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. JavaWeb_(Hibernate框架)Hibernate中数据查询语句SQL基本用法

    本文展示三种在Hibernate中使用SQL语句进行数据查询基本用法 1.基本查询 2.条件查询 3.分页查询 package com.Gary.dao; import java.util.List; ...

  2. Dubbo API 笔记——配置参考

    版权声明:欢迎转载,请注明出处,谢谢! https://blog.csdn.net/benhuo931115/article/details/78457391 schema 配置参考 所有配置项分为三 ...

  3. 预处理、const、static、sizeof-说明内联函数使用的场合

    1:首先使用inline函数可以完全取代表达式形式的宏定义. 内联函数在C++类中的应用最广的应该是用来定义存取函数.我们定义的类中一般会把数据成员定义成私有的或者保护的,这样,外界就不能直接读写我们 ...

  4. 20175329&20175313&20175318 2019-2020 《信息安全系统设计基础》实验二

    我们一个小组都在实验前40mins提前做完但是因为队员截图发的迟没能及时提交上蓝墨云班课的任务超时 希望老师能看见将我的经验改正,谢谢老师 https://www.cnblogs.com/xiannv ...

  5. backbone之collection

    最近要用到backbone.js,网上也找了些资料,但是就看到一个开头还可以,往下看基本就看不下去了,幸好有这本书[LeanpubRead] Backbone.Marionette.js A Gent ...

  6. virtualbox迁移虚拟机

    我用的Ubuntu16.04,下图为装好virtualbox时安装好系统后默认的存储位置. 促使我想迁移的原因是我的/home下因为虚拟机的存储原因导致/home下还剩1.5M可用空间..... 该目 ...

  7. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-1.数据信息安全--微信授权一键登录功能介绍

    笔记 1.数据信息安全--微信授权一键登录功能介绍 简介:讲解登录方式优缺点和微信授权一键登录功能介绍         1.手机号或者邮箱注册             优点:              ...

  8. delphi设置鼠标图形

    //Screen.Cursor := crHourGlass;//忙 //Screen.Cursor := crDefault;//不忙时

  9. SafeVarargs的用法

    转载自:http://softlab.sdut.edu.cn/blog/subaochen/2017/04/safevarargs%E7%9A%84%E7%94%A8%E6%B3%95/ @SafeV ...

  10. H5 拖拽操作

    H5 拖拽操作 前言 在原生H5中,可以通过提供的api实现在网页内元素的拖拽操作.相对于传统的写法更加的简单. 而想要实现拖拽,主要需要进行两个方面的工作,第一是给元素设置draggable='tr ...