当前位置: 首页 > 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

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

方法三、当然是写代码啦

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

相关附件下载

http://www.lryc.cn/news/515269.html

相关文章:

  • Vulnhub靶场(Earth)
  • CSP初赛知识学习计划
  • 信息科技伦理与道德1:研究方法
  • 高中数学部分基础知识
  • 机器人领域的一些仿真器
  • 5大常见高并发限流算法选型浅析
  • 深入刨析数据结构之排序(下)
  • 特殊数据类型的深度分析:JSON、数组和 HSTORE 的实用价值
  • PCA降维算法详细推导
  • NS4861 单灯指示独立耳锂电池充放电管理 IC
  • 编写可复用性的模块
  • 2025年1月4日CSDN的Markdown编辑器
  • 广域网连接PPP
  • 【pyqt】(四)Designer布局
  • 【从零开始入门unity游戏开发之——C#篇40】C#特性(Attributes)和自定义特性
  • DES密码的安全性分析(简化版本)
  • 引入三方jar包命令
  • 机器学习基础-机器学习的常用学习方法
  • 在控制领域中如何区分有效性、优越性、稳定性和鲁棒性?
  • 美国宏观经济基础框架梳理
  • 装饰器模式详解
  • [最新] SIM卡取出后还能找到我的iPhone吗?
  • 数据分析思维(六):分析方法——相关分析方法
  • 谷歌2025年AI战略与产品线布局
  • 登录的几种方式
  • Scala_【5】函数式编程
  • 解析 World Football Cup 问题及其 Python 实现
  • 9.系统学习-卷积神经网络
  • 基于FPGA的出租车里程时间计费器
  • 三甲医院等级评审八维数据分析应用(五)--数据集成与共享篇