【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )

简介: 【Android 逆向】Android 逆向通用工具开发 ( PC 端工程分析 | 网络初始化操作 | PC 端工程核心业务逻辑 )

文章目录

前言

一、网络初始化操作

二、PC 端工程核心业务逻辑

三、博客资源

前言

本篇博客重点分析 PC 端 hacktool 模块 ;






一、网络初始化操作


HackCommand::Prepare() 方法主要是进行网络初始化操作 ;


在 HackCommand::Prepare() 方法 中 调用了 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 ) 一、SOCKET 网络套接字初始化 博客章节介绍的 CNetwork::WaitClientOnline() 方法 , 进行网络初始化操作 ;


bool HackCommand::Prepare()
{
  std::cout << "正在连接客户端..." << std::endl;
  if (m_network.WaitClientOnline()) {
  std::cout << "连接成功\n";
  return true;
  }
  std::cout << "连接失败:" << m_network.GetErrorString() << std::endl;
  return false;
}





二、PC 端工程核心业务逻辑


HackCommand::Run() 方法是核心的业务逻辑 , 这是一个循环执行的函数体 ;


执行 HackCommand::Run() 方法后 , 初始化相关变量 ,




然后直接进入一个 do{}while() 循环 , 每次循环时都先显示提示信息 :


 /* 网络初始化完毕 , 开始执行之后 , 先展示命令信息 , 提示用户如何操作 */

/* 网络初始化完毕 , 开始执行之后 , 先展示命令信息 , 提示用户如何操作 */
  ShowInfo();

 

对应的命令行输出方法如下 :


void HackCommand::ShowInfo()
{
  std::cout << "请选择命令:" << std::endl;
  std::cout << "1 读取数据" << std::endl;
  std::cout << "2 写入金币" << std::endl;
  std::cout << "3 写入经验" << std::endl;
  std::cout << "4 退出程序" << std::endl;
}


然后等待用户输入 1 , 2, 3, 4 中的一个字符 ,


/* 等待用户输入 */
  std::cin >> cmd;


根据用户输入的字符 , 判定用户的操作意图 , 这些都定义在枚举中 , 如果需要增加其它命令 , 直接增加该枚举变量值即可 ;


/* 如果需要增加其它命令 , 直接增加该枚举变量值即可 */
enum {
  CMD_READ_DATA = 1,
  CMD_WRITE_GOLD,
  CMD_WRITE_EXP
};


完整代码 :


void HackCommand::Run()
{
  bool iscontinue = true;
  int cmd = 0;
  int exp = 0;
  double gold = 0.0;
  Json::Value root;
  do {
  /* 网络初始化完毕 , 开始执行之后 , 先展示命令信息 , 提示用户如何操作 */
  ShowInfo();
  /* 等待用户输入 */
  std::cin >> cmd;
  /* 判定用户输入的字符串 */
  switch (cmd) {
  case CMD_READ_DATA:  // 1 读取数据
    std::cout << "获取到的数据为:" << std::endl;
    if (m_network.ReadData(root)) {
    std::cout << "金币:" << (int)root["playerMoney"].asDouble() << std::endl;
    std::cout << "经验:" << root["playerExpPoints"].asUInt() << std::endl;
    }
    break;
  case CMD_WRITE_GOLD:  // 2 写入金币
    std::cout << "请输入金币值:" << std::endl;
    /* 用户补充输入金币信息 */
    std::cin >> gold;
    m_network.WriteGold(gold);
    break;
  case CMD_WRITE_EXP:  // 3 写入经验
    std::cout << "请输入经验值:" << std::endl;
    /* 用户补充输入经验值信息 */
    std::cin >> exp;
    m_network.WriteExp(exp);
    break;
  case 4:     // 4 退出程序
    iscontinue = false;
    break;
  }
  } while (iscontinue);
}


目录
相关文章
|
19天前
|
安全 Shell Android开发
Android系统 init.rc sys/class系统节点写不进解决方案和原理分析
Android系统 init.rc sys/class系统节点写不进解决方案和原理分析
30 0
|
4天前
|
Java Linux API
统计android设备的网络数据使用量
统计android设备的网络数据使用量
14 0
|
19天前
|
存储 Java Android开发
Android系统 设置第三方应用为默认Launcher实现和原理分析
Android系统 设置第三方应用为默认Launcher实现和原理分析
40 0
|
2天前
|
Android开发
Android网络访问超时
Android网络访问超时
10 2
|
2天前
|
Android开发
android检测网络连接是否存在(一)
android检测网络连接是否存在(一)
|
2天前
|
存储 Android开发
android launcher总体分析
android launcher总体分析
|
4天前
|
编解码 缓存 安全
Android SELinux 参数语法介绍及基础分析
Android SELinux 参数语法介绍及基础分析
10 0
|
5天前
|
Java Android开发
Android 反编译工具的使用
Android 反编译工具的使用
14 0
|
18天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
19天前
|
存储 安全 文件存储
Android OTA升级后输入法异常和应用丢失的分析
Android OTA升级后输入法异常和应用丢失的分析
20 1