我的外挂之路【三】远程调用
系列文章目录
我的外挂之路一按键精灵
我的外挂之路二读取内存
我的外挂之路三远程调用
前言
在前面两篇博客中,都是借助系统api实现了模拟按键来达到一个简单的自动加血的操作,但是在实际的开发中,往往需求的功能都是非常复杂的,简单的按键模拟已经不能够满足需要,因此,本篇博客将会从一个外挂制作的角度,分析游戏源码和call,并使用C#开发语言来远程调用call,进而实现复杂的功能制作
正文开始
本篇记录了使用 Ollydbg调试分析找到地图传送Call, 并使用C#语言远程调用传送Call实现一个地图传送的功能
具体步骤为:
- 找到地图传送call
- 在pbsend下断,目的是在使用游戏中的传送功能时,能够断点
- 使用地图传送功能,断点后,向上追踪传送call
- 验证传送call是否正确
- 使用C#注入相关汇编代码,远程调用
- 使用构建汇编方法,压入正确的堆栈数据(堆栈平衡)
- C#注入汇编方法到指定进程并调用
1.Ollydbg
Ollydbg 是一款非常常用的反汇编工具,可能调试目标程序汇编代码,从而实现对一个软件的破解解密工作,本博客不会对ollydbg的相关功能和调试过程做过多描述和教学,感兴趣的可以自行学习。
1.1 对bp seng断点
游戏中任何一个操作,基本都会向服务器发送相应的数据包,因此只要在系统的发包方法send中下断,就能捕获需要的传送包
下断后,会发现send方法不断被命中,因为客户端不断的在向服务器发送数据包,如ping包,请求相关数据包等,此时,可以按空格键,禁用断点,然后在使用翅膀的瞬间,放开断点,这样命中的包就是需要的传送的数据包了,可以多次尝试
1.2 向上追踪分析源码
这个步骤非常枯燥和繁琐,需要极大的耐心,并小心地求证,一步一步直到找到正确的call为止
1.3 验证call
当锁定一个call之后,可以在此call调用call下断点,并返回游戏,看看使用相关的功能,看看是否会命中,来确定call的正确性
2.远程调用
这里使用C#来远程调用call,由于c#是高级语言,因此,需要借助asm工具类,来将汇编代码转换成相应的字节码,再将字节码注入到目标进程,才能在游戏环境正常成功的调用call
2.1 编写汇编代码
AsmTool asm = new AsmTool();asm.Mov_EDX(0x453028);asm.Mov_EAX(0x456d68);asm.Mov_EAX_DWORD_Ptr_EAX();asm.Mov_ECX(0x452E98);asm.Call_ECX();asm.Popad();asm.Ret();asm.RunAsm(mProcessId);
2.2 注入到目标进程
具体流程为:
将汇编代码转换成相应的字节码数组
然后打开进程句柄
在目标进程中开辟相应大小的内存空间
将字节码数组写入到该空间
远程执行
具体代码为:
int addre, threadhwnd;// 将汇编代码转换成字节码数组
byte[] buffer = AsmWriteBytes(asmcode);
if (pid != 0)
{//打开一个已存在的进程对象 0x1F0FFF 最高权限 WM_SUPERIntPtr hwnd = WinAPI.OpenProcess(0x1F0FFF, false, pid);if (hwnd != IntPtr.Zero){// 开辟内存addre = VirtualAllocEx(hwnd, 0, buffer.Length, MEM_COMMIT, PAGE_EXECUTE_READWRITE);if (addre != 0){//在指定内存中写入字节集数据int result = WriteProcessMemory(hwnd, (IntPtr)addre, buffer, buffer.Length, IntPtr.Zero);if (result != 0){ uint dwThreadId;// Create a thread in the first process.IntPtr hThread = CreateRemoteThread(hwnd, IntPtr.Zero, 0, (IntPtr)addre, IntPtr.Zero, 0, out dwThreadId);// 释放内存VirtualFreeEx(hwnd, addre, buffer.Length, MEM_RELEASE);CloseHandle(hThread);CloseHandle(hwnd);}}}
}
4.最终效果
总结
以上就是本篇博客讲述的内容了,本文简单的讲解了使用od反汇编游戏程序,断点分析找call,使用C#程序远程注入并执行call,还是非常复杂的,涉及到的领域非常多,反汇编,汇编,注入执行,看着东西不多但也花了半年,实际上研究和分析一款游戏的运行,对程序员来说还是大有裨益的,它能帮助我们看到代码是如何在计算机中运行的,不得不感叹计算机先辈们的智慧!
我的外挂之路【三】远程调用相关推荐
- 我的外挂之路【一】按键精灵
系列文章目录 我的外挂之路一按键精灵 我的外挂之路二读取内存 我的外挂之路三远程调用 前言 本文记录了在过去一段时间,对制作外挂的研发经历,从利用按键精灵模拟键盘鼠标到读取内存远程调call的开发之路 ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )
文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...
- 提交响应后无法调用sendredirect_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP...
2.远程调用方式 无论是微服务还是SOA,都面临着服务间的远程调用.那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下几种: RPC:Remote Produce Call远程过程调用,类似 ...
- 实现远程调用_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP
2.远程调用方式 无论是微服务还是SOA,都面临着服务间的远程调用.那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下几种: RPC:Remote Produce Call远程过程调用,类似 ...
- 【远程调用返回400问题排查(已解决)】
远程调用返回400问题排查 前言 发生问题由来 问题排查 1. 参数400 2. 请求头过大导致400 3. header异常400 总结 前言 我最近给公司一个两年前开发的项目售后,帮助客户验视功能 ...
- Dubbo远程调用找不到服务异常
Dubbo远程调用找不到服务异常 1. 问题描述 2. 问题分析 3. 问题排查 3.1 服务提供者消费者是否正常 3.2 注册中心是否注册成功, 2.3 分别验证服务提供者与消费者 2.4 消费者和 ...
- 徒手撸框架--实现 RPC 远程调用
微服务,已经是每个互联网开发者必须掌握的一项技术.而 RPC 框架,是构成微服务最重要的组成部分之一.趁最近有时间.又看了看 dubbo 的源码.dubbo 为了做到灵活和解耦,使用了大量的设计模式和 ...
- controller调用controller的方法_SpringCloud Alibaba微服务实战三 - 服务调用
导读:通过前面两篇文章我们准备好了微服务的基础环境并让accout-service 和 product-service对外提供了增删改查的能力,本篇我们的内容是让order-service作为消费者远 ...
- 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )
文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...
最新文章
- maven 内置参数
- mysql索引背后的数据结构及算法
- android recyclerview gradle,Android RecyclerView 的简单使用
- Linux获取本机hostname函数,Linux下获得主机与域名-gethostbyname和gethostbyaddr
- 安装python缺少dll_python报错DLL load failed:找不到模块怎么解决?
- 基于JAVA+SpringMVC+MYSQL的酒店旅游管理系统
- Shader中求一个以原点为起点的向量与x正方向的夹角的一个方法
- 企业局域网——论文开题报告
- Android自定义百分数进度条
- 3至六年级计算机知识,小学三至六年级下册信息技术教学计划范文
- AD9361_AD9371_AD9363_AD9364 对比
- mysql的update条件语句_MySQL UPDATE语句介绍
- 【数据可视化】第五章—— 基于PyEcharts的数据可视化
- 策略路由 本地策略+接口策略
- Linux 静态库和动态库的生成及使用
- Typora:明明保存了,但是却内容丢失了
- Tomb.finance每周更新(11.29-12.5)
- 洛谷入门篇的相关题解
- Docker、Docker、Docker
- Euclidean division