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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【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;
}


目录
相关文章
|
1天前
|
存储 安全 物联网
浅析Kismet:无线网络监测与分析工具
Kismet是一款开源的无线网络监测和入侵检测系统(IDS),支持Wi-Fi、Bluetooth、ZigBee等协议,具备被动监听、实时数据分析、地理定位等功能。广泛应用于安全审计、网络优化和频谱管理。本文介绍其安装配置、基本操作及高级应用技巧,帮助用户掌握这一强大的无线网络安全工具。
21 9
浅析Kismet:无线网络监测与分析工具
|
1月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
70 32
|
1月前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。ACL 可应用于路由器、防火墙等设备,通过设定规则控制访问。其类型包括标准、扩展、基于时间和基于用户的ACL,广泛用于企业网络和互联网安全中,以增强安全性、实现精细管理和灵活调整。然而,ACL 也存在管理复杂和可能影响性能的局限性。未来,ACL 将趋向智能化和自动化,与其他安全技术结合,提供更全面的安全保障。
96 4
|
1月前
|
存储 网络协议 定位技术
OSPF路由汇总:优化网络的强大工具
OSPF路由汇总:优化网络的强大工具
65 1
|
1月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
145 5
|
2月前
|
网络协议 安全 Linux
网络工具ping的使用方式
【10月更文挑战第19天】网络工具ping的使用方式
121 6
|
1月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
36 1
|
2月前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
33 1
|
20天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
40 19
|
20天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
45 14