【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )

简介: 【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )

文章目录

前言

一、SOCKET 网络套接字初始化

二、SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息

三、SOCKET 网络套接 向远程端 ( Android 模拟器 ) 写出数据

前言

本篇博客重点分析 CNetwork 网络模块 ;






一、SOCKET 网络套接字初始化


在 CNetwork::CNetwork() 构造函数中 , 初始化套接字 , 初始化时设置 无效套接字 INVALID_SOCKET ;


CNetwork::CNetwork()
{
  // 初始化套接字 , 初始化时设置 无效套接字 INVALID_SOCKET
  m_server = INVALID_SOCKET;
}
1
2
3
4
5
在初次连接时 , 判断当前套接字是否是无效的 ,
如果当前套接字是无效的 , 则初始化网络 , 建立网络连接 ;
如果当前套接字不是无效的 , 则关闭当前套接字 , 然后设置为无效套接字 ;
bool CNetwork::WaitClientOnline()
{
  /* 等待客户端联网时 , 判断当前套接字是否是无效的 ,
    如果当前套接字是无效的 , 则初始化网络 , 建立网络连接
    如果当前套接字不是无效的 , 则关闭当前套接字 , 然后设置为无效套接字
  */
  if (m_server != INVALID_SOCKET) {
  closesocket(m_server);
  m_server = INVALID_SOCKET;
  }
  int ret = 0;
  sockaddr_in server;
  BOOL bsocket;
  m_server = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED);
  bsocket = TRUE;
  server.sin_family = AF_INET;
  /* 连接本机 IP 地址 , 如果是与真机连接 , 这里设置手机在局域网的 IP 地址 */
  server.sin_addr.s_addr = inet_addr("127.0.0.1");
  /* 自定义端口 , 手机端 与 PC 端约定一致即可 , 1024 ~ 65535 范围 , 1024 以下是系统使用的端口 */
  server.sin_port = htons(9527);
  /* 正式连接的方法 */
  ret = connect(m_server, (const struct sockaddr*)&server, sizeof(server));
  if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
  }
  return true;
}






二、SOCKET 网络套接 读取远程端 ( Android 模拟器 ) 信息


从 Android 模拟器端获取数据 , 先准备发送的命令 , 将命令拼接成 json 字符串 ;


Json::Value cmd;
  cmd["cmd"] = CMD_READ_DATA;
  std::string s = cmd.toStyledString();


通过 SOCKET 网络通信 , 将数据传递到 Android 模拟器端 ;


/* 通过网络通信 , 将数据传递到远程端 */
  int ret = send(m_server, s.c_str(), s.size(), 0);


之后 , 调用 recv 方法 , 开始阻塞 , 等待远程端返回数据 , 如果接收数据出错 , 返回值小于 0 , 打印出错信息 ;


/* 阻塞 , 等待接收远程反馈信息 */
  char buffer[4096]="";
  ret = recv(m_server, buffer, sizeof buffer, 0);
  /* 如果接收失败 , 打印错误信息 */
  if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
  }


接收到数据后 , 解析该数据 ;


/* 解析接收到的远程数据信息 */
  Json::Reader reader;
  if (reader.parse(buffer, root)) {
  printf("解析数据成功!\n");
  return true;
  }


完整代码 :


/* 读取远程端 ( Android 模拟器 ) 信息 */
bool CNetwork::ReadData(Json::Value& root)
{
  if (m_server == INVALID_SOCKET) {
  printf("客户端没有连接\n");
  return false;
  }
  Json::Value cmd;
  cmd["cmd"] = CMD_READ_DATA;
  std::string s = cmd.toStyledString();
  /* 通过网络通信 , 将数据传递到远程端 */
  int ret = send(m_server, s.c_str(), s.size(), 0);
  /* 发送完成后 , 进行错误判断 */
  if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
  }
  /* 阻塞 , 等待接收远程反馈信息 */
  char buffer[4096]="";
  ret = recv(m_server, buffer, sizeof buffer, 0);
  /* 如果接收失败 , 打印错误信息 */
  if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
  }
  /* 解析接收到的远程数据信息 */
  Json::Reader reader;
  if (reader.parse(buffer, root)) {
  printf("解析数据成功!\n");
  return true;
  }
  printf("解析数据失败:%s\n", buffer);
  return false;
}





三、SOCKET 网络套接 向远程端 ( Android 模拟器 ) 写出数据


写出数据比较简单 , 直接将要写出的数据拼接成 json 指令 , 然后直接发送到 Android 模拟器端即可 ;


完整代码实现 :


/* 向远程端 ( Android 模拟器 ) 写出数据 */
bool CNetwork::WriteGold(double gold)
{
  if (m_server == INVALID_SOCKET) {
  printf("客户端没有连接\n");
  return false;
  }
  /* 拼接要发送的数据信息 */
  Json::Value root;
  root["cmd"] = CMD_WRITE_GOLD;
  root["data"] = gold;
  /* 将 json 数据转为字符串 */
  std::string s = root.toStyledString();
  /* 将转换的字符串发送到 Android 模拟器端 */
  int ret = send(m_server, s.c_str(), s.size(), 0);
  /* 如果发送出错 , 则打印报错信息 */
  if (ret < 0) {
  printf("错误信息:%s\n", (LPCSTR)GetErrorString());
  return false;
  }
  return true;
}


目录
相关文章
|
7月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
529 0
|
8月前
|
机器学习/深度学习 数据采集 传感器
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
【故障诊断】基于matlab BP神经网络电机数据特征提取与故障诊断研究(Matlab代码实现)
261 0
|
9月前
|
数据采集 存储 算法
MyEMS 开源能源管理系统:基于 4G 无线传感网络的能源数据闭环管理方案
MyEMS 是开源能源管理领域的标杆解决方案,采用 Python、Django 与 React 技术栈,具备模块化架构与跨平台兼容性。系统涵盖能源数据治理、设备管理、工单流转与智能控制四大核心功能,结合高精度 4G 无线计量仪表,实现高效数据采集与边缘计算。方案部署灵活、安全性高,助力企业实现能源数字化与碳减排目标。
293 0
|
10月前
|
Python
LBA-ECO CD-32 通量塔网络数据汇编,巴西亚马逊:1999-2006,V2
该数据集汇集了1999年至2006年间巴西亚马逊地区九座观测塔的碳和能量通量、气象、辐射等多类数据,涵盖小时至月度时间步长。作为第二版汇编,数据经过协调与质量控制,扩展了第一版内容,并新增生态系统呼吸等相关计算数据,支持综合研究与模型合成。数据以36个制表符分隔文本文件形式提供,配套PDF说明文件,适用于生态与气候研究。引用来源为Restrepo-Coupe等人(2021)。
440 1
|
7月前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
619 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
6月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
266 0
|
7月前
|
机器学习/深度学习 数据采集 运维
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
改进的遗传算法优化的BP神经网络用于电厂数据的异常检测和故障诊断
|
9月前
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
228 4
|
10月前
|
开发者
鸿蒙仓颉语言开发教程:网络请求和数据解析
本文介绍了在仓颉开发语言中实现网络请求的方法,以购物应用的分类列表为例,详细讲解了从权限配置、发起请求到数据解析的全过程。通过示例代码,帮助开发者快速掌握如何在网络请求中处理数据并展示到页面上,减少开发中的摸索成本。
鸿蒙仓颉语言开发教程:网络请求和数据解析
|
安全 网络安全 定位技术
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
343 22