【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);
}


目录
相关文章
|
1月前
|
Linux 开发工具 Android开发
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
ijkplayer是由Bilibili基于FFmpeg3.4研发并开源的播放器,适用于Android和iOS,支持本地视频及网络流媒体播放。本文详细介绍如何在新版Android Studio中导入并使用ijkplayer库,包括Gradle版本及配置更新、导入编译好的so文件以及添加直播链接播放代码等步骤,帮助开发者顺利进行App调试与开发。更多FFmpeg开发知识可参考《FFmpeg开发实战:从零基础到短视频上线》。
111 2
FFmpeg开发笔记(六十)使用国产的ijkplayer播放器观看网络视频
|
1月前
|
网络协议 网络架构
|
3月前
|
Java
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
【思维导图】JAVA网络编程思维升级:URL与URLConnection的逻辑梳理,助你一臂之力!
57 1
|
15天前
|
监控 安全
公司上网监控:Mercury 在网络监控高级逻辑编程中的应用
在数字化办公环境中,公司对员工上网行为的监控至关重要。Mercury 作为一种强大的编程工具,展示了在公司上网监控领域的独特优势。本文介绍了使用 Mercury 实现网络连接监听、数据解析和日志记录的功能,帮助公司确保信息安全和工作效率。
85 51
|
9天前
|
API
鸿蒙开发:切换至基于rcp的网络请求
本文的内容主要是把之前基于http封装的库,修改为当前的Remote Communication Kit(远场通信服务),无非就是通信的方式变了,其他都大差不差。
鸿蒙开发:切换至基于rcp的网络请求
|
15天前
|
消息中间件
由于网络延迟造成逻辑锁失败的问题
【11月更文挑战第5天】本文介绍了网络延迟对逻辑锁的影响及其解决方法。逻辑锁用于控制并发访问共享资源,但在高网络延迟下,可能会导致多个客户端同时获取锁,引发数据不一致等问题。文章详细分析了锁获取、持有和释放阶段的网络延迟影响,并提出了优化网络环境、采用异步通信、使用冗余和重试机制以及调整超时设置等解决方案。
|
1月前
|
XML 开发工具 Android开发
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
ExoPlayer最初是为了解决Android早期MediaPlayer控件对网络视频兼容性差的问题而推出的。现在,Android官方已将其升级并纳入Jetpack的Media3库,使其成为音视频操作的统一引擎。新版ExoPlayer支持多种协议,解决了设备和系统碎片化问题,可在整个Android生态中一致运行。通过修改`build.gradle`文件、布局文件及Activity代码,并添加必要的权限,即可集成并使用ExoPlayer进行网络视频播放。具体步骤包括引入依赖库、配置播放界面、编写播放逻辑以及添加互联网访问权限。
141 1
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
|
28天前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
23 3
|
1月前
|
存储 分布式计算 负载均衡
|
1月前
|
安全 区块链 数据库
下一篇
无影云桌面