IDA反汇编EXE添加一个启动时的消息框

上一篇文章介绍了用OD反汇编EXE添加一个启动时的消息框,这篇文章也是实现同样的效果,这边主要的思路还是将其反汇编得到汇编代码后,然后手动修改他的逻辑首先跳转到弹框区域再跳转回来去执行原来的代码,相关的工具有IDA,以及要修改的一个xp系统自带的扫雷软件。本来想着用OD做就可以了,然后同学告诉我IDA功能更多一些,我了解了一下确实更加方便我完成需求,但是网络上关于IDA相关的教程还是比较少,我也是折腾了好一阵子才完成了修改,而且我也觉得有必要记录一下对于IDA的相关操作。

描述

首先准备好要用到的软件也就是IDA和扫雷这个软件,特别建议使用IDA Pro 7.5版本,在细节方面尤其是返回和前进也就是Ctrl + ZCtrl + Y用起来很舒服,当然其他版本主要功能都是有的。

首先用IDA打开扫雷,一切以默认设置即可,然后进入就是代码的函数执行流程了。

此时按空格就能够切换到代码,按Ctrl + E进入入口点。

我们复制一下01003E23地址的push offset stru_1001390,找个地方存起来,后边会用得到。

然后我们将鼠标光标移动到01003E28也就是下一行,然后点击键盘n,为其起一个本地的名字loc_01003E28

我们转移到Hex View-1窗口,然后往下找到一块00的位置,都是在文件的末尾区域,我们右击有一个与IDA -ViewA同步的选项也要勾上,这样我们就可以在打开IDA代码窗口的区域同步到这块地址了。

我们要从01004A71开始写,我们可以按G键,进行跳转,要跳转到01004A71位置。

可以看到这个位置是被折叠的,我们选中后可以按D键将其展开,然后我们再次跳转到01004A71位置。

此时我们开始编写字符串,我们首先需要将字符串转成HEX,直接搜索HEX在线转换即可找到,我们将Title进行转换即可看到54 69 74 6C 65

我们选中好01004A71行后,点击edit - Patch program - Change byte

在这里我们输入刚才转换的HEX编码,注意MessageBoxW是使用两个字节的UTF-8编码的,不能直接使用一个字节的ASCII编码值,所以刚才我们编写的54 69 74 6C 65要写成54 00 69 00 74 00 6C 00 65 00,当然在Hex View1里直接右击修改也是可以的。

我们再空出来几行,在01004A80这边再写一个,我们转换Hello WorldHEX编码48 65 6c 6c 6f 20 57 6f 72 6c 64

我们自行加入00,这便成了48 00 65 00 6c 00 6c 00 6f 00 20 00 57 00 6f 00 72 00 6c 00 64,当然这边太长了,不够的位置我们需要重新输入,当然如果直接使用Hex View1就直接输入就可以了。



此时我们需要为这个字符串起名字,光标定位到01004A71N键,为其起一个名字,同样光标定位到01004A80,同样点N键为其起名,我为其分别起了个titlecontent

然后我们再空几行,我们将鼠标定位到01004A9A这个位置,然后点击edit - Patch program - Assemble,为其输入命令,我们按序输入以下的命令。

push 0
push title
push content
push 0
CALL DWORD PTR DS:[MessageBoxW]

还记得之前在一开始就复制的01003E23地址的push offset stru_1001390,我们在这里将代码复制下来push stru_1001390,注意没有offset,我们在这边继续追加这行,另外在最初我们还添加了一个本地的名字loc_01003E28,我们还需要追加一个jmp loc_01003E28

此时我们选中这块位置,按P键来创建函数。

我们选中这个sub_1004A9A,点击N键为这个函数重新起个名字message_box

我们按Ctrl + E跳转到入口点,我们选中01003E23这一行,我们修改这个汇编代码为jmp message_box

现在我们已经完成了操作,思路就是从入口开始执行我们自己的代码,然后执行完了再跳转回去继续执行原来的代码,现在我们将所做修改保存到源文件Edit - Patch program - Apply patches to input file,选择要注入的文件以及是否需要备份即可。

保存过后,运行该文件即可看到效果。

Blog

https://blog.touchczy.top/#/

参考

https://tool.lu/hexstr/
http://www.downcc.com/soft/24420.html
http://www.xz7.com/downinfo/347986.html

IDA反汇编EXE添加一个启动时的消息框的更多相关文章

  1. 反汇编EXE添加一个启动时的消息框

    反汇编EXE添加一个启动时的消息框 最近有一个要修改PE文件的需求,就先从EXE文件下手吧,我也是初学一个小时而已,不过之前接触过一点汇编罢了,这篇文章算是个DEMO,主要的思路是将其反汇编得到汇编代 ...

  2. windows下,给golang编译的exe添加一个图标

    通过go build生成的exe文件,通常是一个默认的图标,发给别人的时候,总觉得像病毒,下面我们来给他加一个好看的图标,让他看起来正经一些. 1.找到一个喜欢的图片. 2.通过工具或是在线工具生成. ...

  3. Yii 设置 flash消息 创建一个渐隐形式的消息框

    /*适用情况:比如提交一个表单,提交完成之后在页面展示一条提示消息. 控制器里面这样写: 单条消息: */ \Yii::$app->getSession()->setFlash('erro ...

  4. (转)让一个进程启动时Windbg自动Attach上去

    如何让一个进程启动时Windbg自动Attach上去 以IE为例:需要在注册表中创建一项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\Current ...

  5. Linux secure boot(安全启动)时添加Nvidia显卡驱动

    开启Secure boot情况下,在Fedora 21下安装Nvidia 显卡驱动的方法. Nvidia显卡驱动可以从官网上下载最新版>> 点击进入 下载后添加可执行权限: #chmod ...

  6. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  7. vs2010旗舰版后,运行调试一个项目时调试不了,提示的是:无法使用“pc”附加到应用程序“webdev.webserver40.exe(PID:2260”

    具体问题描述: vs2010旗舰版后,运行调试一个项目时调试不了,能编译,按ctrl+f5 可以运行,但是就是调试就不行,提示的是:无法使用“pc”附加到应用程序“webdev.webserver40 ...

  8. 如何在tomcat启动时自动加载一个类

    有时候在开发web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

  9. worker 启动时向 etcd 注册自己的信息,并设置一个带 TTL 的租约,每隔一段时间更新这个 TTL,如果该 worker 挂掉了,这个 TTL 就会 expire 并删除相应的 key。

    1.通过etcd中的选主机制,我们实现了服务的高可用.同时利用systemd对etcd本身进行了保活,只要etcd服务所在的机器没有宕机,进程就具备了容灾性. https://mp.weixin.qq ...

随机推荐

  1. Android学习之TTS踩坑笔记

    •前言 最近在做一款英文词典的 APP,做到语音模块的时候,我裂开,从网上搜索了各种博客,各种瞎捣鼓,模拟器就是不发音: 辗转反侧数日,终于让我找到解决之法,接下来就本次测试列出一些需要(必须)解决的 ...

  2. Pytest自动化测试-简易入门教程(01)

    我们今天主讲的内容,就是测试框架Pytest,讲到这个测试框架对于没有做过Web自动化的伙伴来说,会觉得这个东西是陌生的,那么到底什么是框架呢?什么又是自动化呢?自动化为什么又要用框架呢? 难道我学自 ...

  3. PowerBI开发 第十九篇:基于Page创建Tooltip

    在PowerBI 报表中,常规的Tooltip是一段文本,当光标悬停在Visual上,Visual上方会自动显示Tooltip的文本.PowerBI 支持用户自定义内容丰富的Tooltip,用户通过创 ...

  4. Nifi:初识nifi

    写在前面: 第一次接触这一系统的时候,只有github上的一坨源码和官方的英文文档,用起来只能说是一步一个坑,一踩一个脚印,现在回想那段血泪史,只想 ***,现在用起来算是有了一些经验和总结,这里就做 ...

  5. Logstash 的命令行入门 ( 附上相关实验步骤 )

    Logstash 的命令行入门 ( 附上相关实验步骤 ) 在之前的博客中,我们已经在 Macbook Big Sur 环境下安装了 ELK 的相关软件,并且已经可以成功运行对应的模块: 如果没有安装的 ...

  6. mybatis-plus批量插入saveBatch太慢?我愿意称rewriteBatchedStatements为神

    最近在做项目优化,代码优化之后,测试接口,好家伙.一个定时任务接口执行要10秒左右. 一点点追踪,给每个方法打上执行时间,一点点缩小范围.好家伙,终于让我锁定了目标. 这是mybatis-plus的批 ...

  7. [Java] SpringBoot

    背景 简化SSM(H)中大量的配置工作,开发人员只关心提供业务功能 可以看成简化了的.按照约定开发的SSM(H) 概念 JavaBean:满足规范的Java类(属性private+默认构造方法+get ...

  8. [刷题] PTA 03-树3 Tree Traversals Again

    用栈实现树遍历 1 #include<stdio.h> 2 #include<string.h> 3 #define MAXSIZE 30 4 5 int Pre[MAXSIZ ...

  9. 在python的class中的,self到底是什么?

    答案:self可以理解为一个字典变量,内部存的就是对象的数据属性.如:{'name':'zhang','age':'18'}就是这些. 注意只有数据属性,并没有创建新的类的方法.  类-----> ...

  10. 使用ps、top、ps_mem命令找出Linux中的最大内存消耗过程

    使用ps.top.ps_mem命令找出Linux中的最大内存消耗过程 2020-02-08 16:06:59作者:自力稿源:云网牛站 您可能已经看到Linux系统多次消耗过多的内存,如果是这种情况,那 ...