日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2025/6/17 Android 28 豆豆

文章目錄

  • 前言
  • 一、SOCKET 網絡套接字初始化
  • 二、SOCKET 網絡套接 讀取遠程端 ( Android 模擬器 ) 信息
  • 三、SOCKET 網絡套接 向遠程端 ( Android 模擬器 ) 寫出數據

前言

本篇博客重點分析 CNetwork 網絡模塊 ;





一、SOCKET 網絡套接字初始化



在 CNetwork::CNetwork() 構造函數中 , 初始化套接字 , 初始化時設置 無效套接字 INVALID_SOCKET ;

CNetwork::CNetwork() {// 初始化套接字 , 初始化時設置 無效套接字 INVALID_SOCKETm_server = INVALID_SOCKET; }

在初次連接時 , 判斷當前套接字是否是無效的 ,

  • 如果當前套接字是無效的 , 則初始化網絡 , 建立網絡連接 ;
  • 如果當前套接字不是無效的 , 則關閉當前套接字 , 然后設置為無效套接字 ;
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; }

總結

以上是生活随笔為你收集整理的【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。