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

2023-03-29 20:38:07 浏览数 (1)

文章目录

  • 前言
  • 一、网络初始化操作
  • 二、PC 端工程核心业务逻辑
  • 三、博客资源

前言

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

一、网络初始化操作


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

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

代码语言:javascript复制
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() 方法后 , 初始化相关变量 ,

代码语言:javascript复制

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

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

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

代码语言:javascript复制
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 中的一个字符 ,

代码语言:javascript复制
		/* 等待用户输入 */
		std::cin >> cmd;

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

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

完整代码 :

代码语言:javascript复制
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);
}

三、博客资源


源码地址 : https://download.csdn.net/download/han1202012/38479962

0 人点赞