当前位置: 首页 > news >正文

逆向入门(6)汇编篇-外挂初体验

代码分析部分

游戏里面还是体验了不少自己CV来的外挂的,自己编写的程序还是头一次体验,程序源码如下

void startAcctack() {printf("开始攻击\n");// 获取当前系统时间time_t now = time(0); // 获取当前时间的时间戳struct tm *local_time = localtime(&now); // 转换为本地时间// 使用 printf 输出当前时间printf("Current time: %d-%02d-%02d %02d:%02d:%02d\n",local_time->tm_year + 1900, // 年local_time->tm_mon + 1,      // 月local_time->tm_mday,         // 日local_time->tm_hour,         // 时local_time->tm_min,          // 分local_time->tm_sec);         // 秒}int main(int argc, char* argv[]) {while (true) {startAcctack();Sleep(3000); // 每秒输出一次 (3000 毫秒)}return 0; // 这个不会被执行到,但可以保留
}

运行效果大概就是这样的
在这里插入图片描述
接下来编译成exe文件后,用debug软件打开,接下来就是找函数入口了,暂时没有什么经验,与是想了一个办法,在vc6中进入debug模式,鼠标放在函数入口那,就可以看到入口地址了。
在这里插入图片描述
接着在dtdebug中输入ctrl+g跳转到函数处。
在这里插入图片描述
这里就就是入口了,还贴心的告诉了我们有个sleep 3000,准没错了。
然后还有一个办法,打开软件后,一直后F8,最后EIP会停在401b44这里,然后去401b44看一眼。
在这里插入图片描述
发现是call401014这个地方,再接着去401014
在这里插入图片描述
这里有个JMP指令,跳到了401310处,这里也就是main的入口了。
在这里插入图片描述

那先把代码看明白了:

push EBP  //将EBP指针存入栈中,应该这里会使用ebp进行寻址了,所以先push ebp
mov ebp,esp  //将esp的值存入到ebp上,此时esp和ebp是一样的
sub esp,40  //将esp的值减少40,也就是将栈提高40,单位应该是字节吧,记不清楚了。。。
push ebx
push esi
push edi  //这3个应该是为了存储原有的3个寄存器的值,方便后面函数使用
lea edi, dword ptr ss:[ebp-40]  //lea没学,lea 是 "Load Effective Address" 的缩写。它的作用是将一个有效地址加载到寄存器中,而不是加载该地址所指向的内存内容。所以此时edi上存了ebp-40的地址,暂时没想明白为什么要把这个值存在edi上,这个值不就是刚刚sub esp,40的所在的地址吗
mov ecx,10 //10放入到ecx上
mov aex,cccccccc //ccccccccc存入到eax上
rep stos dword ptr es:[edi]  //重复执行16次stos(ecx是10,所以是16次),即将edi开始的64个字节大小处全部填满为eax也就是cccccccc
mov eax,1
test eax,eax // test 是一种按位与(AND)操作,但其结果不存储。它只会影响标志寄存器(Flags Register),用于后续的条件跳转。test eax, eax 实际上检查 eax 的值是否为零。如果 eax 中的值为零,结果为零,零标志位(ZF)会被设置为 1。如果 eax 中的值非零,结果为非零,零标志位(ZF)会被设置为 0。这里面eax不为0,所以ZF位为0
JE short test.0040134c  //je 指令是 "Jump if Equal" 的缩写,只有在零标志位(ZF)为 1 时才会跳转。所以此时不会跳转,接着往下看
CALL test1.00401005  //继续跟

在这里插入图片描述
跟到这个401250里面以后就调用了很多系统相关的汇编了,看不太懂了,不过不重要了,因为这里就是我们要找到的攻击函数所在的地址了。
在这里插入图片描述
好,回来再接着看

mov esi,esp //将esp的值存到esi上。
push 0bb8 //这里push的就是3000,
call near dowrd ptr ds:[43d17c]  

这里追进去就看到了就调用了sleepex函数了
在这里插入图片描述
-号回到之前的call near dowrd ptr ds:[43d17c] 这里面来
在这里插入图片描述
再接着看

cmp esi,esp //cmp 是比较指令(compare),用于比较两个操作数。它会计算两个操作数的差值,但不会改变它们的值。这里面的话,esi之前存一次esp的值了,由于Push了一个0bb8,所以此时esp应该会小一些。
call test1.00401490  //又call了,继续看,其余的都不继续写了,里面太多了,直接回来
JMP SHORT test1.00401328  //直接又回到了401328处

在这里插入图片描述
看来这里就是写的死循环了,自己写的代码到这里面就分析的差不多了,第一次这么分析自己写的代码,感觉还挺不一样,虽然有点慢,但是感觉收获还是有不少的。(自己又动态跟了一遍,太麻烦了,就不写了)

攻击实施

此时,已经找到了攻击的call了,我们想要改变攻击的频率,只要把sleep 3000的这个值给修改掉就好了。

方法一、CE直接改内存

在这里插入图片描述
这个地方要填401339,而不是之前3000所对应位置的401338,因为前面还有一个68多占了一个字节
在这里插入图片描述
接着双击改成1000
在这里插入图片描述
在这里插入图片描述
攻击此时就变成一秒一次了

方法二、代码注入器直接调用call

这种方法想攻击多快就攻击多快,自定义攻击
在这里插入图片描述

方法三、当然是写代码啦

不过这种还是等到以后再说吧,虽然已经会写了,但是还是一知半解的,以后再说,先体验一把,快乐快乐再说

相关附件下载

相关文章:

逆向入门(6)汇编篇-外挂初体验

代码分析部分 游戏里面还是体验了不少自己CV来的外挂的,自己编写的程序还是头一次体验,程序源码如下 void startAcctack() {printf("开始攻击\n");// 获取当前系统时间time_t now time(0); // 获取当前时间的时间戳struct tm *local_time …...

Vulnhub靶场(Earth)

项目地址 https://download.vulnhub.com/theplanets/Earth.ova.torrent 搭建靶机 官网下载.ova文件双击vm打开导入 获取靶机IP kail终端输入 arp-scan -l 获取靶机 IP 192.168.131.184 信息收集 端口扫描 sudo nmap -sC -sV -p- 192.168.131.184 可以看到开启22端口&…...

CSP初赛知识学习计划

CSP初赛知识学习计划 学习目标 在20天内系统掌握CSP初赛所需的计算机基础知识、编程概念、数据结构、算法等内容,为初赛取得优异成绩奠定坚实基础。 资料收集 整理的CSP知识点文档。相关教材,如《信息学奥赛一本通》等。在线编程学习平台&#xff0c…...

信息科技伦理与道德1:研究方法

1 问题描述 1.1 讨论? 请挑一项信息技术,谈一谈为什么认为他是道德的/不道德的,或者根据使用场景才能判断是否道德。判断的依据是什么(自身的道德准则)?为什么你觉得你的道德准则是合理的,其他…...

高中数学部分基础知识

文章目录 一、集合二、一元二次方程三、函数四、指数函数五、对数函数六、三角函数1、角度和弧度2、三角函数 高中知识体系丰富,虽然毕业后再也没用过,但是很多数学逻辑还是非常经典的,能够启发我们如何制作逻辑工具去解决现实问题。以下做出…...

机器人领域的一些仿真器

模拟工具和环境对于开发、测试和验证可变形物体操作策略至关重要。这些工具提供了一个受控的虚拟环境,用于评估各种算法和模型的性能,并生成用于训练和测试数据驱动模型的合成数据。 Bullet Physics Library 用于可变形物体模拟的一个流行的物理引擎是 B…...

5大常见高并发限流算法选型浅析

高并发场景下,如何确保系统稳定运行,成为了每一个开发工程师必须面对的挑战。**你是否曾因系统崩溃、请求超时或资源耗尽而头疼不已?**高并发限流算法或许能帮你解决这些难题。 在处理高并发请求时,应该如何选择合适的限流算法呢…...

深入刨析数据结构之排序(下)

目录 1.内部排序 1.5选择排序 1.5.1简单选择排序 1.5.2树形选择排序 1.6堆排序 1.7归并排序 1.7.1递归归并 1.7.2非递归归并 1.8计数排序 1.9基数排序 常见内部排序的总结: 1.内部排序 1.5选择排序 选择排序(Selection Sort)的基…...

特殊数据类型的深度分析:JSON、数组和 HSTORE 的实用价值

title: 特殊数据类型的深度分析:JSON、数组和 HSTORE 的实用价值 date: 2025/1/4 updated: 2025/1/4 author: cmdragon excerpt: 随着数据管理需求的多样化,许多现代数据库系统开始支持特殊数据类型,以满足更多复杂应用场景的需求。在 PostgreSQL 中,JSON、数组和 HSTOR…...

PCA降维算法详细推导

关于一个小小的PCA的推导 文章目录 关于一个小小的PCA的推导1 谱分解 (spectral decomposition)2 奇异矩阵(singular matrix)3 酉相似(unitary similarity)4 酉矩阵5 共轭变换6 酉等价7 矩阵的迹的计算以及PCA算法推导8 幂等矩阵(idempotent matrix)9 Von Neumanns 迹不等式 [w…...

NS4861 单灯指示独立耳锂电池充放电管理 IC

1 特性  最大 500mA 线性充电电流,外部可调节  内部预设 4.2V 充电浮充电压  支持 0V 电池充电激活  支持充满 / 再充功能  内置同步升压放电模块,输出电压 5.1V  同步升压 VOUT 最大输出电流 500mA  VOL/OR 独…...

编写可复用性的模块

在生活中,重复的机械劳动会消耗我们的时间和精力,提高生产成本,降低工作效率。同样,在代码世界中,编写重复的代码会导致代码的冗余,页面性能的下降以及后期维护成本的增加。由此可见将重复的事情复用起来是…...

2025年1月4日CSDN的Markdown编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...

广域网连接PPP

广域网连接PPP PPP协议是一种应用广泛的点到点链路协议,主要用于点到点连接的路由器间的通信。PPP协议既可以用于同步通信,也可以用于异步通信,本部分只讨论同步接口上的PPP配置。 锐捷路由器的同步串行口默认封装Cisco HDLC,所…...

【pyqt】(四)Designer布局

布局 之前我们利用鼠标拖动的控件的时候,发现一些部件很难完成对齐这些工作,pyqt为我们提供的多种布局功能不仅可以让排版更加美观,还能够让界面自适应窗口大小的变化,使得布局美观合理。最常使用的三种布局就是垂直河子布局、水…...

【从零开始入门unity游戏开发之——C#篇40】C#特性(Attributes)和自定义特性

文章目录 前言一、特性(Attributes)基本概念二、自定义特性1、自定义特性代码示例:2、应用自定义特性:3、解释3.1 **AttributeUsage 特性**3.2 特性的命名3.3 **构造函数**:3.4 **属性**: 4、使用反射获取特…...

DES密码的安全性分析(简化版本)

DES仍是世界上使用最广的(DES发行后20年,互联网的兴起,人们开始觉得DES不安全了,但DES的实现成本也越来越低) 宏观分析: 密钥空间方面: 密钥长度:DES 算法使用 56 位的密钥对数据…...

引入三方jar包命令

mvn install:install-file \ -Dfile本地磁盘路径 \ -DgroupId组织名称 \ -DartifactId项目名称 \ -Dversion版本号 \ -Dpackagingjar 例如 假设你的 JAR 文件路径是 /home/user/common-pojo-1.0-SNAPSHOT.jar,组织名称是 com.example,项目名…...

机器学习基础-机器学习的常用学习方法

半监督学习的概念 少量有标签样本和大量有标签样本进行学习;这种方法旨在利用未标注数据中的结构信息来提高模型性能,尤其是在标注数据获取成本高昂或困难的情况下。 规则学习的概念 基本概念 机器学习里的规则 若......则...... 解释:如果…...

在控制领域中如何区分有效性、优越性、稳定性和鲁棒性?

在控制领域中,区分有效性、优越性、稳定性和鲁棒性可以通过具体的控制器设计实例来更好地理解。以下以经典的质量-弹簧-阻尼系统的PID控制器设计为例,展示如何区分这四个性能指标。 经典质量-弹簧-阻尼系统的PID控制器设计 质量-弹簧-阻尼系统模型 考…...

GitLab中文版在Windows Docker部署后,解决‘git clone’和‘git push’失败的几个关键检查点

GitLab中文版Windows Docker部署后git clone和git push故障排查指南 当你终于完成了GitLab中文版在Windows Docker上的部署,准备大展拳脚时,却发现git clone和git push命令频频报错,这种挫败感我深有体会。本文将带你系统排查四个关键环节&am…...

百考通:AI全流程智能化驱动数据分析,让数据价值高效落地

在数字化浪潮席卷各行各业的今天,数据已成为核心生产要素,但如何从海量数据中挖掘价值、辅助决策,始终是企业与个人面临的核心难题。传统数据分析流程繁琐、技术门槛高、周期漫长,让许多非专业人士望而却步。百考通(ht…...

JavaScript基础课程三十三、性能优化与工程化高级

本课是前端从入门到高级开发的核心进阶课,聚焦性能优化与高级工程化两大核心能力。性能优化以用户体验为核心,覆盖渲染、构建、网络全链路,从指标检测到落地优化,形成完整的优化方法论;高级工程化则是企业级项目开发的…...

Python F1数据分析终极指南:5个高级技巧掌握赛车性能可视化

Python F1数据分析终极指南:5个高级技巧掌握赛车性能可视化 【免费下载链接】Fast-F1 FastF1 is a python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry 项目地址: https://gitcode.com/GitHub_Trending/fa/Fas…...

【效率翻倍】不止是安装:用Apache 2.4 + Win10快速搭建本地PHP/WordPress测试环境

效率翻倍:Apache 2.4 Win10 构建全功能PHP/WordPress开发环境实战指南 在本地开发环境中快速搭建Web服务器是每个PHP开发者或WordPress站长的必备技能。传统教程往往止步于Apache的基础安装,却忽略了实际开发中需要的完整工具链——从PHP解释器集成到虚…...

拆解 OpenHands(11)--- Runtime主要组件

本篇继续对 runtime 的解读,主要介绍 插件、执行系统和环境这三个组件。因为本系列借鉴的文章过多,可能在参考文献中有遗漏的文章,如果有,还请大家指出。0x01 三大组件本篇要介绍的几个组件如下:ActionExecutor&#x…...

PX4飞控实战:为纳雷NRA12激光雷达手搓一个串口驱动(附完整源码)

PX4飞控实战:为纳雷NRA12激光雷达手搓一个串口驱动(附完整源码) 去年夏天,我在调试一台农业植保无人机时遇到了一个棘手的问题——现有的激光雷达在强光环境下表现不稳定。经过多次测试对比,最终选定了纳雷NRA12这款抗…...

零宽度字符隐写术全解析:从Unicode原理到实战检测工具推荐

零宽度字符隐写术全解析:从Unicode原理到实战检测工具推荐 在数字信息安全的隐秘角落,有一种几乎不可见的通信方式正在被安全研究人员和渗透测试工程师频繁使用——零宽度字符隐写术。这种技术允许我们将秘密信息嵌入普通文本中,肉眼无法察觉…...

OpenClaw与Qwen3-VL:30B:高效个人AI办公助手实战

OpenClaw与Qwen3-VL:30B:高效个人AI办公助手实战 1. 为什么选择OpenClawQwen3-VL组合 去年冬天,当我第5次因为会议记录整理到凌晨两点时,终于决定寻找自动化解决方案。在尝试了市面上各种RPA工具后,偶然发现了OpenClaw这个开源框…...

Lingbot-Depth-Pretrain-ViTL-14 实战:Python爬虫获取图像数据并生成深度图

Lingbot-Depth-Pretrain-ViTL-14 实战:Python爬虫获取图像数据并生成深度图 你是不是也遇到过这样的场景:手头有一个很棒的深度估计模型,比如 Lingbot-Depth-Pretrain-ViTL-14,想用它来为自己的项目生成深度图,却发现…...