系列文章目录


我的外挂之路一按键精灵

我的外挂之路二读取内存

我的外挂之路三远程调用


前言

在前面两篇博客中,都是借助系统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,还是非常复杂的,涉及到的领域非常多,反汇编,汇编,注入执行,看着东西不多但也花了半年,实际上研究和分析一款游戏的运行,对程序员来说还是大有裨益的,它能帮助我们看到代码是如何在计算机中运行的,不得不感叹计算机先辈们的智慧!

我的外挂之路【三】远程调用相关推荐

  1. 我的外挂之路【一】按键精灵

    系列文章目录 我的外挂之路一按键精灵 我的外挂之路二读取内存 我的外挂之路三远程调用 前言 本文记录了在过去一段时间,对制作外挂的研发经历,从利用按键精灵模拟键盘鼠标到读取内存远程调call的开发之路 ...

  2. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

  3. 提交响应后无法调用sendredirect_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP...

    2.远程调用方式 无论是微服务还是SOA,都面临着服务间的远程调用.那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下几种: RPC:Remote Produce Call远程过程调用,类似 ...

  4. 实现远程调用_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP

    2.远程调用方式 无论是微服务还是SOA,都面临着服务间的远程调用.那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下几种: RPC:Remote Produce Call远程过程调用,类似 ...

  5. 【远程调用返回400问题排查(已解决)】

    远程调用返回400问题排查 前言 发生问题由来 问题排查 1. 参数400 2. 请求头过大导致400 3. header异常400 总结 前言 我最近给公司一个两年前开发的项目售后,帮助客户验视功能 ...

  6. Dubbo远程调用找不到服务异常

    Dubbo远程调用找不到服务异常 1. 问题描述 2. 问题分析 3. 问题排查 3.1 服务提供者消费者是否正常 3.2 注册中心是否注册成功, 2.3 分别验证服务提供者与消费者 2.4 消费者和 ...

  7. 徒手撸框架--实现 RPC 远程调用

    微服务,已经是每个互联网开发者必须掌握的一项技术.而 RPC 框架,是构成微服务最重要的组成部分之一.趁最近有时间.又看了看 dubbo 的源码.dubbo 为了做到灵活和解耦,使用了大量的设计模式和 ...

  8. controller调用controller的方法_SpringCloud Alibaba微服务实战三 - 服务调用

    导读:通过前面两篇文章我们准备好了微服务的基础环境并让accout-service 和 product-service对外提供了增删改查的能力,本篇我们的内容是让order-service作为消费者远 ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )

    文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...

最新文章

  1. maven 内置参数
  2. mysql索引背后的数据结构及算法
  3. android recyclerview gradle,Android RecyclerView 的简单使用
  4. Linux获取本机hostname函数,Linux下获得主机与域名-gethostbyname和gethostbyaddr
  5. 安装python缺少dll_python报错DLL load failed:找不到模块怎么解决?
  6. 基于JAVA+SpringMVC+MYSQL的酒店旅游管理系统
  7. Shader中求一个以原点为起点的向量与x正方向的夹角的一个方法
  8. 企业局域网——论文开题报告
  9. Android自定义百分数进度条
  10. 3至六年级计算机知识,小学三至六年级下册信息技术教学计划范文
  11. AD9361_AD9371_AD9363_AD9364 对比
  12. mysql的update条件语句_MySQL UPDATE语句介绍
  13. 【数据可视化】第五章—— 基于PyEcharts的数据可视化
  14. 策略路由 本地策略+接口策略
  15. Linux 静态库和动态库的生成及使用
  16. Typora:明明保存了,但是却内容丢失了
  17. Tomb.finance每周更新(11.29-12.5)
  18. 洛谷入门篇的相关题解
  19. Docker、Docker、Docker
  20. Euclidean division

热门文章

  1. iOS备忘录之Xcode折叠代码
  2. TechSmith Camtasia Studio 9录屏软件提示video codec open failed 错误的解决方案
  3. mysql na加外键,mysql添加外键
  4. 金山烈火工作室并入西山居 五大产品关停并转
  5. CSS — 导航栏篇(二)
  6. mysql delayed_Mysql INSERT DELAYED语法
  7. Pycharm小技巧(一) 快速删除空白行
  8. c#学习笔记05-treeview中添加图标
  9. 美国低速自动驾驶应用案例 | 自动驾驶系列
  10. 预备队训练第二次双周赛(搜索+图)