04 编写自己的破解补丁

news2024/12/24 21:23:58

本章摘要:

1、提高od当中汇编可读性

当我们遇到push offset Console.dasgasuigicashi这种阅读性不高的汇编代码的时候

在od当中,点击:选项》调试设置

逆向微软提供的内核dll也会出现阅读性不高的情况出现

跳转到这个地址

2、为什么写成全局字符数组就不能隐藏字符串了?

》编译器的原因:你本质还是编译器怎么看待你写的数据,应当以什么形式处理

你要是写成局部变量,他就给你写到代码节里面和16进制的代码融为一体,如果是全局的字符数组就给你写到数据节里面,那自然就以字符串的形式存储在数据节的内存里面了

局部:编译成代码 全局:编译成字符串存储

3、壳技术

3.1 壳的基本概念

壳就是把你真实的代码吞到他的肚子里面了(放到他自己的PE文件当中,还是在当前的exe当中),当你真正需要运行代码的时候再吐出来,他是一个字节一个字节地吐出来

3.2 如何判断软件有没有加壳?

把程序拖入od当中,如果提示如下内容,则是加了壳的:

当然还可以通过DIE等查壳工具来判断是加的什么壳

3.3 著名的强壳

比如safeengine(se壳),他还会对API进行移位操作,比如messagebox函数,给你移位之后,你再去下断点,他就断不下来了

3.5 加了壳的软件应该如何修改他的代码?

对于加了壳子的软件,你想要修改他的内存,时机就非常重要了!你需要等壳子把原始的代码吐出来之后再区别修改关键位置的代码,那么怎么卡这个时机呢?

思路一:我可不可以让程序sleep几秒之后再调用API?

》不行。你dll是先加载的,之后才会执行exe的源代码,你不加载完,让人家怎么还原+执行?

思路二:在dll attach的时候启动一个线程,然后就循环判断有没有解码就🆗了,你在dll里面启动一个线程,其实也就相当于在exe当中启动了一个线程,自然他也具备和exe一样抢占处理机的能力,他和你exe当中的线程没有什么区别,而且他还不影响主线程的执行,他也可以直接修改主线程当中的内容!!!

常见的处理方式有两种:

1. 通过inline hook api来打补丁

2. 判断解密操作是否执行完毕(上面使用的方法)

插曲:易语言的代码崩溃了怎么办?如果是别人写的模板的问题,就去网上找他的源码来看,易语言的代码都是可以完全反编译成为C语言的源码的,这样你自己慢慢地调就可以了

4、使用c语言写内存注册机

52:00 易语言的模块

4.1 内存注册机 VS Dll劫持补丁 

内存注册机是当软件已经运行起来之后,使用另外一个exe通过openprocess+writeprocessmem函数来修改软件的内存数据的(打内存补丁)

dll劫持补丁是通过dll劫持技术来把我们的dll加载到exe文件当中,然后通过dll文件来修改我们关键位置的代码,实现破解

4.2 dll劫持技术

dll劫持说白了就是本身我这个exe查导出表,发现需要加载系统的dll文件,但是当你当前文件夹下有同样名称的dll的时候,系统会优先加载当前目录下的dll文件

注意:其实最后exe相当于是加载了2份同名的dll文件,只不过二者的路径不同

但是万一exe需要调用系统dll当中的函数怎么办呢?

》使用API转发技术,通过loadlibrary加载原始的dll文件(所以说是两份),然后我这个dll收到的消息就原封不动地转发给系统的dll文件(通过loadlibrary+getproprocess)

 

5、加壳软件的dll劫持补丁的编写

1、打开winspool.sln,把报错全部修改之后,重新生成一下

2、按下ctrl+f搜索:今天的作业,以此来找到dllmain的入口点,当然也可以直接搜索dllmain

3、点击,配置属性》高级,修改为生成.drv文件

4、然后把调试命令修改为我们需要附加的exe的文件路径

这样我们遇到问题的时候,就可以直接使用vs来调试dll文件了

5、编写dll劫持代码

对于加壳软件,无非就是等待他解密的时机问题

dllmain函数:

// 入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		::MessageBoxA(0, "今天的作业来了\n\n根据我提供的劫持补丁模板\n\n给此模板增加代码,实现劫持补丁\n\n", "恭喜你领到作业一份", 0);
		CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
		DisableThreadLibraryCalls(hModule);

		return Load();
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		Free();
	}

	return TRUE;
}

线程处理函数:

DWORD WINAPI ThreadProc(LPVOID lpParam) {

	DWORD detectAddr = 0x4010f0;
	char byteRead = 0;
	char writeBuf[] = { 0x90,0x90,0x90,0x90,0x90,0x90 };
	while (true)
	{
		ReadProcessMemory((HANDLE)-1, (LPVOID)detectAddr, &byteRead, 1, NULL);
		if (byteRead == 0x53) {
			WriteProcessMemory((HANDLE)-1, (char*)0x4010fd, writeBuf, sizeof(writeBuf), NULL);
			break;
		}
	}
	return 0;
}

6、把exe放到同一目录之下

至此我们已经完成了对CM的dll劫持补丁的编写

 

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

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

相关文章

【暑期每日一练】 day11

目录 选择题 (1) 解析: (2) 解析: (3) 解析: (4) 解析: (5) 解析: 编程题 题一 描…

使用curl和postman调用Azure OpenAI Restful API

使用curl在cmd中调用时,注意:json大括号内的每一个双引号前需要加上\ curl https://xxxopenai.openai.azure.com/openai/deployments/Your_deployid/chat/completions?api-version2023-05-15 -H "Content-Type: application/json" -H "…

C++ 对象的生存期详解

1.局部对象 &#xff08;1&#xff09;对于局部定义的对象&#xff0c;每当程序控制流到达该对象定义处时&#xff0c;定义构造函数。当程序走出该局部域时&#xff0c;调用析构函数。 这种普通的局部对象具有动态生存期。 #include<iostream> using namespace std;cl…

学习C#编写上位机的基础知识和入门步骤:

00001. 掌握C#编程语言基础和.NET框架的使用。 00002. 学习WinForm窗体应用程序开发技术&#xff0c;包括控件的使用和事件驱动编程。 00003. 熟悉基本的数据结构和算法知识&#xff0c;如链表、栈、队列等。 00004. 理解串口通信协议和通信方法&#xff0c;用于与底层硬件设…

增强for循环原理详解

增强for循环 本质是采用了迭代器&#xff0c;并使用局部变量指向迭代器当前遍历到的元素&#xff0c;使用增强for循环时&#xff0c;无法修改集合当前索引位置的引用&#xff0c;但是如果元素是引用数据类型&#xff0c;那么是可以修改这个元素的信息的&#xff08;String除外…

PSP - HHblits 算法搜索 BFD 与 UniRef30 的结果分析 (bfd_uniref_hits.a3m)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132047940 MMseqs2 与 HHblits 的算法比较&#xff1a; 蛋白质序列搜索算法 MMseqs2 与 HHblits 的搜索结果差异HHblits 算法搜索 BFD 与 UniRef…

Vulnhub: Wayne Manor:1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.172 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.172 根据提示修改hosts文件 访问目标80&#xff0c;在主页发现三组数字&#xff0c;结合端口扫描的结果中21端口被过滤&am…

Java 线程的多种状态

前言 在前文中详细介绍了线程的启动、中断、休眠、等待。本文详细介绍线程的多种状态。 获取线程的当前状态代码是&#xff1a; 线程对象.getState(); 目录 前言 一、NEW 二、RUNNABLE 三、BLOCKED 四、WAITNG 五、TIMED_WAITNG 六、TERMINATED 结语 一、NEW Thread 对…

Your local changes to the following files would be overwritten by checkout

Git 之 Your local changes to the following files would be overwritten by checkout 今天在切换分支时遇到了这样一个问题&#xff1a; 首先翻译下&#xff1a; Your local changes to the following files would be overwritten by checkout 大致意思就是&#xff1a; 当…

中海油集团,建设与中国特色国际一流能源公司相匹配的供应管理体系

近日&#xff0c;由中国物流与采购联合会主办、北京筑龙承办的主题为“数智赋能创新发展”的“第四届国有企业数智化采购与智慧供应链论坛”在北京盛大举行。中国海油工程与物装部供应商管理处处长张彬出席论坛并发表讲话。 张彬处长出席在国有企业数字化采购与供应链论坛&…

电子邮件模板?如何做EDM邮件营销模板?

制作EDM电子邮件推广模板的方法&#xff1f;怎么写EDM电子邮件推销模板&#xff1f; 随着数字化时代的来临&#xff0c;EDM邮件营销模板已成为企业推广和客户沟通的重要工具。在本文中&#xff0c;我将分享一些关于如何制作高效的EDM邮件营销模板的技巧和建议&#xff0c;希望…

Kafka的安装和使用(Windows中)

1.安装Kafka 1.1下载安装包 通过百度网盘分享的文件&#xff1a;复制链接打开「百度网盘APP 即可获取」 链接&#xff1a;https://pan.baidu.com/s/1vC6Di3Pml6k1KMbnK0OE1Q?pwdhuan 提取码&#xff1a;huan 也可以访问官网&#xff0c;下载kafka2.4.0的安装文件 1.2解压…

Linux:shell脚本:基础使用(1)

Shell的作用 命令解释器&#xff0c;“翻译官”&#xff0c;介于系统内核与用户之间&#xff0c;负责解释命令行 用户的登录Shell 登录后默认使用的Shell程序&#xff0c;一般为 /bin/bash 不同Shell的内部指令、运行环境等会有所区别 cat /etc/shells 编写第一个Shell脚本 …

装饰器模式(Decorator)

装饰器模式是一种结构型设计模式&#xff0c;用来动态地给一个对象增加一些额外的职责。就增加对象功能来说&#xff0c;装饰器模式比生成子类实现更为灵活。装饰器模式的别名为包装器(Wrapper)&#xff0c;与适配器模式的别名相同&#xff0c;但它们适用于不同的场合。 Decor…

P1219 [USACO1.5] 八皇后 Checker Challenge

题目 思路 非常经典的dfs题&#xff0c;需要一点点的剪枝 剪枝①&#xff1a;行、列&#xff0c;对角线的标记 剪枝②&#xff1a;记录每个皇后位置 代码 #include<bits/stdc.h> using namespace std; const int maxn105; int a[maxn];int n,ans; bool vis1[maxn],vis…

如何使用无线通信设备实现室内外精准定位管理?

巡更功能的意义 电子巡更系统的建立&#xff0c;使巡逻安防工作更加科学合理&#xff0c;使安全管理更加规范化、标准化制度化。例如&#xff0c;当管理人员设置巡更线路&#xff0c;在巡更线路上设置巡更点&#xff0c;通过巡更管理系为巡更人员排班在巡更区域内形成了一张防范…

《Java-SE-第二十三章》之单例模式

文章目录 单例模式概述饿汉模式懒汉模式单线程版懒汉单例多线程版枚举实现单例 单例模式概述 单例模式是设计模式中的一种,其作用能保证某个类在程序中只存在唯一一份实例,而不会创建多份实例。单例模式具体的实现方式, 分成 “饿汉” 和 “懒汉” 两种.。饿汉模式中的饿不并不…

R语言【Tidyverse、Tidymodel】的机器学习方法

机器学习已经成为继理论、实验和数值计算之后的科研“第四范式”&#xff0c;是发现新规律&#xff0c;总结和分析实验结果的利器。机器学习涉及的理论和方法繁多&#xff0c;编程相当复杂&#xff0c;一直是阻碍机器学习大范围应用的主要困难之一&#xff0c;由此诞生了Python…

深入浅出对话系统——大规模开放域对话模型PLATO

引言 今天主要介绍百度退出的大模型开放领域对话模型PLATO的三篇论文&#xff0c;分别对应三个模型。 PLATO 132M parameters8M samples问题&#xff1a;训练稳定性和效率 PLATO-2 1.6B, 314M and 93M parameters684M samples PLATO-XL 11B parameters811M samples for en1.2…

JavaWeb(8)——前端综合案例2(节流和防抖)

目录 一、节流和防抖概念 二、实例演示 三、需要注意的 一、节流和防抖概念 二、实例演示 Lodash 简介 | Lodash中文文档 | Lodash中文网 (lodashjs.com) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…