外挂、破解软件理论与实战

news2024/11/27 14:46:03

外挂、破解软件理论与实战

1 理论

1.1 不同操作系统下的可执行文件

  1. Windows【PE】

PE 格式,可移植可执行格式(Portable Executable),
是 Windows 下的主要可执行文件格式。别被名字迷惑了,PE 文件必须是 Windows 下的文件。

  1. Linux【ELF】

在Linux系统的可执行文件(ELF文件,Executable and Linkable Format,可执行链接格式)中,开头是一个文件头,用来描述程序的布局,整个文件的属性等信息,包括文件是否可执行、静态还是动态链接及入口地址等信息;生成的文件不是纯碎的二进制可执行文件了,因为包含的程序头不是可执行代码;将这种包含程序头的文件读入到内存后,从程序头中读取入口地址,跳转到入口地址执行;

  1. Mac【Mach-O】

Mach-O为Mach Object文件格式的缩写,它是一种用于可执行文件,目标代码,动态库,内核转储的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性,并提升了符号表中信息的访问速度。

1.2 Windows下软件破解知识

◼ Windows平台软件破解必备知识
文件格式:PE文件
汇编语言:x86、x64汇编
工具:Ollydbg
Windows API

◼ OD常用快捷键
F2:切换断点
F9:运行程序
F7:Step Into
F8:Step Over
Ctrl + G:搜索代码

1.3 加壳与脱壳

  • 一般的软件破解思路
    在这里插入图片描述

  • 加壳后的软件破解思路(在普通软件上多了一层)
    在这里插入图片描述

1.4 外挂的本质

常见的外挂有2种做法:

  • 修改内存中的数据
    在这里插入图片描述

  • 修改内存中的代码
    在这里插入图片描述

通过OD软件修改汇编代码,然后重新保存为新的.exe文件

其实,数据和代码并没有本质区别,在内存中都是01

在这里插入图片描述

2 实战步骤

软件地址:

链接:https://pan.baidu.com/s/1pIogCuXPR87p91og09zZZQ?pwd=zj8k 
提取码:zj8k

2.1 环境准备

visual studio 2022:c++桌面开发(MFC)、visual studio扩展开发

在这里插入图片描述
扩展开发:
在这里插入图片描述

2.2 OD汇编(Ollydbg)

将.exe文件转化为汇编

2.4 cheaterEngines

用于检测内存中数值变化

在这里插入图片描述

2.5 大体步骤

此处以植物大战僵尸为例

  1. 打开visual studio,创建MFC项目(类似于java中的swing)
    在这里插入图片描述
- 自定义log宏,简化打印
- 事件注册(手动、自动)
- 绑定变量(手动、自动)
- 单选框状态读取(勾选、不勾选)
  1. 将植物大战僵尸的运行文件(.exe文件)拖动到OD中,观察汇编
  • 修改汇编逻辑
    在这里插入图片描述
前后修改尽量不动字节数,比如:前面一行代码占字节,我们修改后的代码占2字节,
那么我们就需要使用NOP填充,相当于是空,当cpu执行到nop时,会直接跳过,nop
只起到一个占用位置的作用

思路:

①秒杀僵尸:直接用僵尸的原有血量 - 僵尸的血量
②无限阳光:阳光存在一个struct中,通过地址找到值,然后使用API修改内存中的值
  • 导出破解后的exe文件
    在这里插入图片描述
  1. 使用spy++查找窗口

windows外挂桌面开发可能需要获取到运行文件的句柄(ID),然后控制

在这里插入图片描述
4. 修改visual studio中的代码【部分】

秒杀僵尸、无限阳光

// 用来监控游戏的线程
DWORD monitorThreadFunc(LPVOID lpThreadParameter) {
	while (1) {
		// 获得植物大战僵尸窗口的句柄
		HWND windowHandle = FindWindow(CString("MainWindow"), CString("植物大战僵尸中文版"));

		if (windowHandle == NULL) {
			g_dlg->m_bnKill.SetCheck(FALSE);
			g_dlg->m_bnSun.SetCheck(FALSE);
			g_dlg->m_bnKill.EnableWindow(FALSE);
			g_dlg->m_bnSun.EnableWindow(FALSE);

			g_processHandle = NULL;
		} else if (g_processHandle == NULL) {
			g_dlg->m_bnKill.EnableWindow(TRUE);
			g_dlg->m_bnSun.EnableWindow(TRUE);

			// 获得植物大战僵尸的进程ID
			DWORD processPid;
			GetWindowThreadProcessId(windowHandle, &processPid);
			// 获得植物大战僵尸的进程句柄
			g_processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processPid);
		}

		if (g_dlg->m_bnSun.GetCheck()) { // 需要无限阳光
			DWORD value = 9990;
			WriteMemory(&value, sizeof(value), 0x6A9EC0, 0x320, 0x8, 0x0, 0x8, 0x144, 0x2c, 0x5560, -1);
		}

		// 休息睡眠
		Sleep(1000);
	}
	return NULL;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180598.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第四十六章 动态规划——状态机模型

第四十六章 动态规划——状态机模型一、通俗理解状态机DP1、什么是状态机2、什么是状态机DP二、例题1、AcWing 1049. 大盗阿福(1)问题(2)分析a.状态定义b.状态转移c.循环设计d.初末状态(3)代码2、AcWing 10…

C++学习/温习:新型源码学编程(三)

写在前面(祝各位新春大吉!兔年如意!) 【本文持续更新中】面向初学者撰写专栏,个人原创的学习C/C笔记(干货)所作源代码输出内容为中文,便于理解如有错误之处请各位读者指正请读者评论回复、参与投票&#xf…

01 课程简介、HTML标签【尚硅谷JavaWeb教程】

1. 课程体系设计 2. HTML标签 服务器—浏览器&#xff08;字符串"" &#xff09; demo01.html 1&#xff09;html语言是解释型语言&#xff0c;不是编译型 浏览器是容错的 2&#xff09;html页面中由一对标签组成&#xff1a; < html>称为 开始标签 < /htm…

Java基础语法——数组概念、数组内存图解(一个数组、二个数组)及二元数组的应用

目录 数组概述 数组定义格式 数组概念 数组的定义格式 数组的初始化 数组初始化概述 数组的初始化方式 Java中的内存分配 Java中一个数组的内存图解 Java中二个数组的内存图解 两个数组指向同一个地址的内存图解 数组操作中两个常见的小问题 二维数组 二维数组概述…

c++11 标准模板(STL)(std::forward_list)(十一)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

前端架构处理Cookie、Session、Token

1. Cookie Cookie 总是保存在客户端中。按在客户端中的存储位置&#xff0c;可分为内存 Cookie 和硬盘 Cookie。 内存 Cookie 由浏览器维护&#xff0c;保存在内存中&#xff0c;浏览器关闭后就消失了&#xff0c;其存在时间是短暂的。硬盘 Cookie 保存在硬盘里&#xff0c;…

Spring Boot、Spring MVC热部署

一、相关概述 JVM能够识别的是字节码.class文件每次重新运行都是一个重新编译的过程&#xff0c;也就是说会生成新的target字节码文件&#xff1b;但是每次修改了代码之后也必须要重新运行&#xff0c;这样比较麻烦。热部署就能较好地解决该问题&#xff0c;直接刷新页面就可以…

(22)go-micro微服务kibana使用

文章目录一 kibana介绍二 Kibana主要功能三 Kibana侧边栏四 Kibana安装1.拉取镜像2.运行命令3.查看是否运行五 Kibana使用六 Kibana图形化界面七 最后一 kibana介绍 Kibana &#xff1a;是一个开源的分析和可视化平台&#xff0c;旨在与 Elasticsearch 合作。Kibana 提供搜索、…

初识Nonebot2

文章目录什么是nonebot2&#xff1f;机器人工作流程WebSocket协议OneBot标准Nonebot2框架工作路径什么是nonebot2&#xff1f; 关于NoneBot2&#xff0c;我们先来引用一下官方文档的描述 NoneBot2是一个可扩展的 Python 异步机器人框架&#xff0c;它会对机器人收到的事件进行…

创建进度条 tqdm模块

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 创建进度条 tqdm模块 选择题 以下python代码最后输出错误的一项是? from tqdm import tqdm import time text{loss:0.2,learn:0.8} print(【开始执行】) for i in tqdm(range(50)…

python图像处理(图像缩放)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 图像缩放也是isp处理的一个基本功能。现在的camera像素越来越大,但是显示设备的分辨率是一定的,如果想把图像显示在显示器或者lcd上面,那就要符合对应显示设备的分辨率。一般来说…

【数据结构与算法理论知识点】5、图与贪心算法

5、图与贪心算法 逻辑结构 5.1、图的定义和术语 图&#xff1a;Graph(V,E) V:顶点&#xff08;数据元素&#xff09;的有穷非空集合&#xff1b; E:边的有穷集合。 **无向图:**每条边都是无方向的 有向图:每条边都是有方向的 完全图:任意两个点都有一条边相连 稀疏图:有很…

SSM 农产品销售管理系统

SSM 农产品销售管理系统 SSM 农产品销售管理系统 功能介绍 首页 用户登录注册 图片轮播 最新上架 农产资讯 产品商城 产品详情 在线留言 加入购物车 提交购买 评论 收藏 系统简介 系统公告 关于我们 友情链接 后台管理 登录 系统用户管理 修改密码 用户权限管理 产品信息管理…

Hadoop基础之《(4)—Yarn概述》

一、什么是Yarn YARN&#xff08;Yet Another Resource Negotiator&#xff09;&#xff0c;简称YARN&#xff0c;另一种资源协调者&#xff0c;是Hadoop的资源管理器。 二、Yarn的组成 Yarn有两个核心组件&#xff0c;ResourceManager和NodeManager。 1、ResourceManager&am…

UE Operation File [ Read / Write ] DTOperateFile 插件说明

蓝图直接操作文件的功能节点 可以获取文件基本信息以及读写文件 目录 1. File Exists 2. File Size 3. File Delete 4. File Is Read Only 5. File Move 6. File Save By String 7. File Save By Array String 8. File Save By Array Binary 9. File Append By Strin…

Jenkins(一):什么是Jenkins?

目录 一、Jenkins是什么&#xff1f; 二、安装步骤 1.访问官网&#xff0c;下载安装包 2.解锁Jenkins 3.设置Jenkins的工作目录&#xff08;可选&#xff09; 总结 前言 近期在研究自动化部署&#xff0c;在这里对Jenkins做个笔记。 一、Jenkins是什么&#xff1f; Jenk…

数据挖掘,计算机网络、操作系统刷题笔记36

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记36 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

泊松过程与排队论

全国同理:随机过程随机会过 ......唉 你说热统,他为什么要搭配着随机过程一起学 ......唉 你说数模比赛 为什么不能白送一个奖牌小摘要泊松过程泊松过程来到间隔与等待时间的分布来到时刻的条件分布M/G/1 忙期非齐次泊松过程复合泊松过程条件泊松过程排队系统输入常见的输入分布…

Python eval()和exec()函数详解

eval() 和 exec() 函数都属于 Python 的内置函数&#xff0c;由于这两个函数在功能和用法方面都有相似之处&#xff0c;所以将它们放到一节进行介绍。eval() 和 exec() 函数的功能是相似的&#xff0c;都可以执行一个字符串形式的 Python 代码&#xff08;代码以字符串的形式提…

Elasticsearch:深入理解 Elasticsearch 查询:过滤器查询 vs 全文搜索

如果我必须用一句话来描述 Elasticsearch&#xff0c;我会这样说&#xff1a; 当搜索遇到大规模分析时&#xff08;近乎实时&#xff09; Elasticsearch 是目前最受欢迎的 10 大开源技术之一。 公平地说&#xff0c;它包含许多本身并不独特的关键功能&#xff0c;但是&#xff…