安卓逆向分析遇到加密算法放在native层或者算法过于隐蔽还原不出来时,只能采用hook的形式来调用了。在电脑端,可以采用Frida+RPC+虚拟机来实现,不过电脑上安装安卓虚拟机实在是太吃力了,于是考虑在手机端搭建签名服务器。
接口请求通过HTTP协议来的,因此在安卓端搭建的服务器收发数据按照HTTP协议来完成就行了。

需要建立4个类:
- SocketServer:socket服务类
- Http:http请求数据封装
- HttpUtil:http请求数据解析工具
- HttpServer:http服务类
1.SocketServer
回调基本满足一般需求了,可以自己根据需要增删。
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Enumeration;
import java.util.HashMap;
public class SocketServer {
int DEFAULT_PORT = 8888;
private boolean isRunning;
HashMap<String, Socket> socketHashMap;
ServerSocket serverSocket;
ServerInterface serverInterface;
public SocketServer() {
socketHashMap = new HashMap<>();
}
public SocketServer(int port) {
DEFAULT_PORT = port;
socketHashMap = new HashMap<>();
}
/**
* 开启端口监听
*/
public void start() {
new Thread(new Runnable() {
@Override
public void run() {
try {
serverSocket = new ServerSocket(DEFAULT_PORT);
serverInterface.onServerReady(getIP(), DEFAULT_PORT);
isRunning = true;
while (isRunning) {
Socket socket = serverSocket.accept();
socketHashMap.put(socket.toString(), socket);
serverInterface.onSessionConnect(socket.toString(), socket.getLocalAddress().getHostName());
onSession(socket);
}
} catch (Exception e) {
serverInterface.onServerClose(e.getLocalizedMessage());
isRunning = false;
}
}
}).start();
}
/**
* 对指定会话发送信息,发送完成后自动关闭该会话
*
* @param session 会话ID
* @param message 发送的内容
*/
public void send(String session, String message) {
Socket socket = socketHashMap.get(session);
if (socket != null && socket.isConnected())

本文介绍了如何在安卓设备上通过Frida+RPC搭建签名服务器,处理加密算法隐藏或在native层的挑战,并利用HTTP协议实现接口调用,包括SocketServer、Http、HttpUtil和HttpServer类的详细实现。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



