【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月前
|
API 数据处理 Android开发
Android网络请求演变:从Retrofit到Flow的转变过程。
通过这个比喻,我们解释了 Android 网络请求从 Retrofit 到 Flow 的转变过程。这不仅是技术升级的体现,更是反映出开发者在面对并发编程问题时,持续探索和迭求更好地解决方案的精神。未来,还会有更多新的技术和工具出现,我们期待一同 witness 这一切的发展。
198 36
|
5月前
|
Web App开发 缓存 JavaScript
Android网络小说阅读器的实现
小说阅读Demo,。此Demo使用Jsoup解析HTML,实现小说数据抓取(数据源自网络),并包含自定义View、六章小说缓存等功能,但未实现下载。项目还包括屏幕适配、字体设置等,借助第三方框架完成优化。以下是主页、详情页、阅读页等界面展示。
|
7月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
174 15
|
12月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
196 3
|
11月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
162 1
|
12月前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
888 3
|
12月前
|
网络协议 Linux 应用服务中间件
Socket通信之网络协议基本原理
【10月更文挑战第10天】网络协议定义了机器间通信的标准格式,确保信息准确无损地传输。主要分为两种模型:OSI七层模型与TCP/IP模型。
|
12月前
|
网络协议 测试技术 网络安全
Python编程-Socket网络编程
Python编程-Socket网络编程
115 0
|
10月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
225 17
|
10月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
178 10

热门文章

最新文章