【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )

简介: 【Android 逆向】Android 逆向通用工具开发 ( Android 端远程命令工具 | Android 端可执行程序的 main 函数操作 | TCP 协议服务器建立 | 接收客户端数据 )

文章目录

前言

一、Android 端可执行程序的 main 函数操作

二、Android 端 TCP 协议服务器建立

三、Android 端接收 PC 端传来的数据

四、博客资源

前言

本篇博客重点分析 Android 端 运行的远程命令工具 remote 模块 ;


该 Android 远程端模块 是 Android 平台的可执行程序 , 使用 NDK 进行编译的可执行程序 , 配合 PC 端的工具进行内存修改 ;






一、Android 端可执行程序的 main 函数操作


Android 端可执行程序主函数的主体就是一个死循环 , 在该循环中 , 通过 TCP 协议 , 接收来自 PC 端的指令 , 根据不同的指令 , 执行不同的操作 ;



开始执行后 , 阻塞等待 PC 端连接 , 连接成功后 , 继续向后执行 ;


/* 等待 PC 端连接 , PC 端与 Android 端连接成功后 , 继续向后执行 */
  client.WaitForServer();


之后 , 还是阻塞等待 , 这次是等待 PC 端发送来的命令 ;


/* 等待 PC 端命令 */
client.WaitForCommand(root)


最后 , 根据获取的不同的命令 , 执行不同操作 , 这些操作 , 需要开发者自己进行开发 , 不同的应用 , 对应的操作也是不同的 ;



main 函数代码 :


int main()
{
  /* Android 端可执行程序主函数的主体就是一个死循环 , 
  * 在该循环中 , 通过 TCP 协议 , 接收来自 PC 端的指令 , 
  * 根据不同的指令 , 执行不同的操作
  */
  do {
  Client client;
  char data[] = HELLO_INFO;
  const char* pinfo = "client prepare done! wait for pc!  \n";
  DECRYPT(data, pinfo);
  printf("%s\n", data);
  printf("%s", pinfo);
  /* 等待 PC 端连接 , PC 端与 Android 端连接成功后 , 继续向后执行 */
  client.WaitForServer();
  /* 连接成功提示 */
  printf("get a connection!\n");
  Json::Value root;
  do {
    /* 等待 PC 端命令 */
    if (client.WaitForCommand(root) == 0) {
    switch (root["cmd"].asInt()) {
    case CMD_READ_DATA:
      root.clear();
      client.ReadData(root);
      break;
    case CMD_WRITE_GOLD:
      client.WriteGold(root);
      break;
    case CMD_WRITE_EXP:
      client.WriteExp(root);
      break;
    default:
      break;
    }
    }
    /* 如果连接断开 , 那么重置连接 , 继续等待用户连接 */
    else if (!client.isConnected()) {
    client.Reset();
    printf("connection is lost!\nretry!\n");
    break;
    }
  } while (client.isValid());
  } while (1);
  return 0;
}


Android 端可执行程序的 mian.c 代码位置 :


image.png






二、Android 端 TCP 协议服务器建立


从 TCP 网络协议角度看 , 在 Android 端运行的是 服务器端 , 在 PC 端运行的是 客户端 ;


Android 端的服务器建立 :


① 先绑定服务器 IP 地址 : 端口号

② 监听端口号

③ 阻塞等待客户端连接

PC 端的客户端 : 客户端只需要连接 绑定的服务器 IP 地址 + 端口号即可 ;



服务器建立代码 :


/* 建立服务器 
  * ① 先绑定服务器 IP 地址 : 端口号 
  * ② 监听端口号
  * ③ 阻塞等待客户端连接 
  * 客户端只需要连接 绑定的服务器 IP 地址 + 端口号即可
  */
  bool WaitForServer() {
  int ret = 0;
  struct sockaddr_in addr, client;
  addr.sin_family = AF_INET;
  addr.sin_port = 0x3725;//0x2537=9527
  /* 如果是 模拟器可以设置 127.0.0.1 , 
     如果是真机 , 需要填写局域网内真实 IP 地址 */
  addr.sin_addr.s_addr = inet_addr("127.0.0.1");
  /* 绑定 IP 地址 和 端口号 */
  ret = bind(m_socket, (sockaddr*)&addr, sizeof(sockaddr_in));
  if (ret < 0) {
    printf("error info:%d %s\n", errno, strerror(errno));
    return false;
  }
  /* 监听端口号 */
  ret = listen(m_socket, SOMAXCONN);
  if (ret < 0) {
    printf("error info:%d %s\n", errno, strerror(errno));
    return false;
  }
  char buffer[4096] = "";
  int size = sizeof(client);
  /* 阻塞等待客户端连接 */
  int c = accept(m_socket, (sockaddr*)&client, &size);
  if (c == INVALID_SOCKET) {
    return false;
  }
  m_client = c;
  return ret >= 0;
  }






三、Android 端接收 PC 端传来的数据


调用 recv 方法 , 阻塞接收 PC 端传输来的数据 , 然后解析 json 字符串 , 将解析结果保存到 command 中 ;



代码如下 :


/* 接收 PC 端传输来的数据 
  * 然后解析 json 字符串 
  * 将解析结果保存到 command 中
  */
  int WaitForCommand(Json::Value& command) {
  char buffer[4096] = "";
  int ret = recv(m_client, (void*)buffer, sizeof(buffer), 0);
  if (ret > 0) {
    ret = 0;
    Json::Reader reader;
    if (reader.parse(buffer, buffer + strlen(buffer), command)) {
    ret = 0;
    }
    else {
    ret = -1;
    }
  }
  else {
    close(m_client);
    m_client = INVALID_SOCKET;
  }
  return ret;
  }



目录
相关文章
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
770 18
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
1033 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Go API 定位技术
MCP 实战:用 Go 语言开发一个查询 IP 信息的 MCP 服务器
随着 MCP 的快速普及和广泛应用,MCP 服务器也层出不穷。大多数开发者使用的 MCP 服务器开发库是官方提供的 typescript-sdk,而作为 Go 开发者,我们也可以借助优秀的第三方库去开发 MCP 服务器,例如 ThinkInAIXYZ/go-mcp。 本文将详细介绍如何在 Go 语言中使用 go-mcp 库来开发一个查询 IP 信息的 MCP 服务器。
890 2
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
764 12
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
556 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
3091 16
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
监控 前端开发 应用服务中间件
小游戏源码开发搭建技术栈和服务器配置流程
近些年不同场景游戏层出不穷,现就小游戏开发技术应用及功能详细剖析!
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
675 1
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
缓存 网络协议 Java
【JavaEE】——TCP回显服务器(万字长文超详细)
ServerSocket类,Socket类,PrintWriter缓冲区问题,Socket文件释放问题,多线程问题
|
9月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
775 10