逆向工程核心原理 Chapter20 | “内嵌补丁”练习

2024-08-31 13:52

本文主要是介绍逆向工程核心原理 Chapter20 | “内嵌补丁”练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

自己学《逆向工程核心原理》一书的记录,只记录自己觉得重要/有用的一些点。

知识点学习

很实用的一个逆向技术。
原理:
在这里插入图片描述

“壳”的逻辑也是这样的。EP处先解密OEP代码,再跳转到洞穴代码,恢复IAT之类的,然后跳回OEP执行源程序代码。

代码补丁与内嵌补丁的区别:

在这里插入图片描述

PatchMe练习

记得上次寒假学过一次,现在再练/学一次。

IDA看可以很清晰的看到解密逻辑。

流程:

0x4010F5~0x401249:xor 0x44

0x401007~0x401086:xor 0x7

0x4010F5~0x401249:xor 0x11

这三个完了后,会call loc_401039

动调看看loc_401039

可以看到一个大循环:

在这里插入图片描述

而且ebx++,再累加[ebx],猜测是在计算checksum。

中间填充了很多垃圾代码,各种奇奇怪怪的跳转。。

会跳到这里来:

在这里插入图片描述

用x32来看会好一点。

跟到刚刚那个call,确实是在算CRC

在这里插入图片描述

算的是0x4010F5~0x401249的

注意到这里还有一个call,

在这里插入图片描述

跟进去看看。

发现又有一层xor 0x17

在这里插入图片描述

所以这里是对:

0x40124A~0x401280作了xor 0x17

ret后就跳转到OEP了:

在这里插入图片描述

在这里插入图片描述

所以整个流程:

0x4010F5~0x401249:xor 0x44

0x401007~0x401086:xor 0x7

0x4010F5~0x401249:xor 0x11

0x40124A~0x401280:xor 0x17

JMP OEP

在OEP的代码貌似有反调试?(INT 3)

但是可以看到字符串在这里插入图片描述

看下这字符串在哪个区域。

0x4010F5~0x401249

按照教程的流程图:

在这里插入图片描述

那就是[B]区的数据。

由于[B]区有checksum,所以不大可能直接修改,所以要洞穴代码修改。

思路:

在这里插入图片描述

补丁代码设置地方:

在这里插入图片描述

对应的就是设置在这个部分:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

但这里手写汇编还是有一点点难。。。

教程用的简洁的REP MOVSB指令

REP MOVSB 是一个在 x86 汇编语言中使用的字符串操作指令。这个指令组合用于在内存中从一个位置复制字节数据到另一个位置。具体来说:

  • REP: 代表 “Repeat”(重复),它会重复执行后面的指令,直到寄存器 ECXRCX 中的计数值减为零。
  • MOVSB: 代表 “Move String Byte”(移动字符串字节),它将源操作数所在位置的一个字节(通常由 DS:SIRSI 指向)复制到目的地位置(通常由 ES:DIRDI 指向)。

是一个很简洁高效的将ESI复制到EDI的指令。用之前需要设置好ECX(记得+1,'\x00'结尾),ESIEDI

对于我们这个patch,两个字符串的位置:

004011230040110A

MOV ECX,0xC
MOV ESI,0x4012A9
MOV EDI,0x401123
REP MOVSB
MOV ECX,0x9
MOV ESI,0x4012B9
MOV EDI,0x40110A
REP MOVSB

然后JMP到OEP

JMP 0x40121E

后面对应填修改后的字符串

在这里插入图片描述

把这段洞穴补丁写在00401280开始。(空格即可编辑汇编)

在这里插入图片描述

保存补丁很简单,x32有"补丁"选项,点击后“修补文件”即可。

在这里插入图片描述

洞穴补丁打好后,还要在前面找一处跳转到洞穴补丁处的代码。

前面分析过这里,CRC校验完后跳转到OEP,

在这里插入图片描述

那我们把这个JMP patch为JMP 0x401280即可。

但这里要注意,这个区域属于[A]区域,需要xor 0x7,所以我们把指令xor 0x7后保存。

E9 F8 01 => EE FF 06

Ctrl+P打补丁后保存,尝试运行:

在这里插入图片描述

在这里插入图片描述

成功。

总结

这种技术提供了一个很不错的思路:对于加密,CRC校验防范的资源,我们可以等它解密后,写内嵌补丁来patch。

这篇关于逆向工程核心原理 Chapter20 | “内嵌补丁”练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124092

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等