文章目录

  • 前言
  • 一、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 代码位置 :

二、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;}

四、博客资源


下载地址 : https://download.csdn.net/download/han1202012/38499199

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

  1. 深入浅出 - Android系统移植与平台开发(六)- 为Android启动加速【转】

    本文转载自:http://blog.csdn.net/mr_raptor/article/details/8006721 Android的启动速度一直以来是他的诟病,虽然现在Android设备的硬件速 ...

  2. Android之在window下面开发常用的adb命令(不断更新)

    window下面开发常用的adb命令 1.查看设备 adb devices 2.安装APK adb install -r 安卓apk的路径 3.查看日志E等级以上 adb logcat  *:E; 4 ...

  3. 【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )

    文章目录 一.JNI 中 main 函数声明 二.命令字符串切割并传入 main 函数 三.完整代码示例 1.完整 jni 代码 2.完整 java 代码 3.执行结果 四.参考资料 前置博客 : [ ...

  4. android不同机型编译不同so,如何使用adb命令查看android中的数据库

    1,进入到控制台中,输入adb shell,进入到命令模式的环境中 2,输入:cd /data/data/ 3, 选择你所在的数据库文件,比如我的com.android.homework, 输入命令: ...

  5. 一个C#开发的Windows远程桌面工具

    作为一名程序员,日常远程到服务器再正常不过了,在Windows环境,我们一般是通过操作系统自带.或者第三方工具.今天给你推荐一个开源的Windows远程桌面工具. 项目简介 这是一个基于 MSTSC ...

  6. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划

    2020最新超详细的Android 百度地图开发讲解(3) 路线规划步行骑行驾车路线规划 开发前配置,显示基本地图,实时定位等查看之前代码,此博客紧接上一博客:https://blog.csdn.ne ...

  7. Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(6) POI检索, 根据地址输入提示检索 Sug

    POI检索, 根据地址输入提示检索 Sug 参考百度地图官方文档:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/search/sug ...

  8. android studio百度地图教程,Android studio百度地图SDK开发 2020最新超详细的Android 百度地图开发讲解(4) 路线规划之起始点地址输入实现规划...

    实现起始点输入的路线规划 要实现输入起始点的路线规划,需要两个输入框,可以将两个输入框设置在和地图同一个Activity中,也可以新建一个Activity,来实现地址的输入,然后通过页面之间的跳转来传 ...

  9. sketch生成android代码,Android资源、点九图和 XML Sketch导出工具Android Res Export

    功能 导出多分辨率 PNG 资源 预览和导出多分辨率点九资源 导出矢量(Vector Drawable)资源 导出 Android 8 的自适应图标,圆形图标及旧版应用图标 查看和导出形状图层的 XM ...

最新文章

  1. 29个你必须知道的Linux命令
  2. 收到几本书,顺便热热身
  3. tail将输出的日志放到文件中_如何将Spring Boot应用中日志输出格式改为JSON?
  4. HTTP性能测试工具wrk安装及使用
  5. windows下通过adb shell进入data目录
  6. 2020年,哪些行业涨工资最多?
  7. c++检测固定usb端口有无设备接入_电脑USB技术白皮书
  8. Security+ 学习笔记49 事件调查
  9. Vector, ArrayList, LinkedList分析
  10. opencv打开双目,采集标定双目的图片
  11. 科罗拉多州立大学计算机科学专业,科罗拉多州立大学有哪些专业_专业排名(QS世界排名)...
  12. vtkdelaunay3d的参数设置_VTK 渲染体数据并加方位标注
  13. curl源码编译安装
  14. Git 提交大文件提示 fatal: The remote end hung up unexpectedly
  15. 汇编基础2:看懂汇编
  16. 《Machine Learning in Action》—— 浅谈线性回归的那些事
  17. 微信公众号访问 ssm框架根目录下MP_verify_xxxxxx.txt的解决方法
  18. 106短信发送失败的原因
  19. java开发五子棋程序
  20. 三链列 Swordfish 和 四链列 Jellyfish

热门文章

  1. 4路外线(NAT+PBR真实案例)
  2. C语言笔记系列文章 索引目录表(持续更新中......)
  3. java BlockingQueue 用法
  4. sass 插值语句的使用
  5. layui进度条bug
  6. Swig在Mac OS X上的安装
  7. Linux:运行级别,root密码重置,救援模式,安装图形化界面
  8. 基于吉日嘎拉的通用权限管理WebForm版扩展:字典选项管理和缓存管理
  9. poj1192 最优连通子集(树形dp)
  10. 【高斯消元】[HDU 3359][POJ3999][UVALive4741]Kind of a Blur