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


目录
相关文章
|
5月前
|
安全 网络协议 算法
Nmap网络扫描工具详细使用教程
Nmap 是一款强大的网络发现与安全审计工具,具备主机发现、端口扫描、服务识别、操作系统检测及脚本扩展等功能。它支持多种扫描技术,如 SYN 扫描、ARP 扫描和全端口扫描,并可通过内置脚本(NSE)进行漏洞检测与服务深度枚举。Nmap 还提供防火墙规避与流量伪装能力,适用于网络管理、渗透测试和安全研究。
867 1
|
5月前
|
编解码 网络协议 安全
Socket-TCP 上位机下位机数据交互框架
Socket-TCP 上位机下位机数据交互框架
277 0
|
6月前
|
Web App开发 API 虚拟化
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
457 15
Cisco Modeling Labs (CML) 2.9.0 - 网络仿真工具
|
7月前
|
监控 安全 网络安全
网络安全工具及其使用方法:保护数字安全的第一道防线
在信息时代,网络攻击变得日益复杂且频繁,保护个人和企业数据安全的重要性日益凸显。幸运的是,各种网络安全工具为用户提供了有效的防护手段。从防火墙到密码管理器,这些工具覆盖了威胁检测、攻击防御和数据保护的方方面面。本文将介绍几款常用的网络安全工具,并提供其使用方法,以帮助您构建强大的网络安全防线。
260 1
|
7月前
|
存储 Android开发 数据安全/隐私保护
Thanox安卓系统增加工具下载,管理、阻止、限制后台每个APP运行情况
Thanox是一款Android系统管理工具,专注于权限、后台启动及运行管理。支持应用冻结、系统优化、UI自定义和模块管理,基于Xposed框架开发,安全可靠且开源免费,兼容Android 6.0及以上版本。
869 4
|
7月前
|
监控 数据可视化 Java
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
160 0
VMware Aria Operations for Networks 6.14 - 网络和应用监控工具
|
8月前
|
Android开发
安卓硬改一键新机工具,一键修改手机型号,串号网卡Imei、sn码【仅供学习参考】
声明部分:仅供学习参考使用,基于Xposed框架实现的设备信息伪装模块的完整代码,包含多个功能模块:
|
7月前
|
监控 Android开发 数据安全/隐私保护
批量发送短信的平台,安卓群发短信工具插件脚本,批量群发短信软件【autojs版】
这个Auto.js脚本实现了完整的批量短信发送功能,包含联系人管理、短信内容编辑、发送状态监控等功能
|
7月前
|
API 开发工具 Android开发
qq虚拟视频插件下载安装手机版, 安卓虚拟视频插件,替换摄像头工具
Xposed入口模块:拦截目标应用的相机调用‌23 Camera1 API处理:通过PreviewCallback替换视频流‌1 Camera2 API适
|
8月前
|
存储 JSON API
安卓ck提取工具,可提取手机cookie插件,AUTOJS即可实现
怎么用autojs提取手机端的CK?其实autojs是支持提取ck的但是他提取的不是浏览器的CK,二十他自身浏览器环境的c