【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )
生活随笔
收集整理的這篇文章主要介紹了
【Android 逆向】Android 逆向通用工具开发 ( 网络模块开发 | SOCKET 网络套接字初始化 | 读取远程端 “Android 模拟器“ 信息 | 向远程端写出数据 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、SOCKET 網絡套接字初始化
- 二、SOCKET 網絡套接 讀取遠程端 ( Android 模擬器 ) 信息
- 三、SOCKET 網絡套接 向遠程端 ( Android 模擬器 ) 寫出數據
前言
本篇博客重點分析 CNetwork 網絡模塊 ;
一、SOCKET 網絡套接字初始化
在 CNetwork::CNetwork() 構造函數中 , 初始化套接字 , 初始化時設置 無效套接字 INVALID_SOCKET ;
CNetwork::CNetwork() {// 初始化套接字 , 初始化時設置 無效套接字 INVALID_SOCKETm_server = INVALID_SOCKET; }在初次連接時 , 判斷當前套接字是否是無效的 ,
- 如果當前套接字是無效的 , 則初始化網絡 , 建立網絡連接 ;
- 如果當前套接字不是無效的 , 則關閉當前套接字 , 然后設置為無效套接字 ;
二、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 模拟器“ 信息 | 向远程端写出数据 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】Android
- 下一篇: 【错误记录】Windows 控制台程序编