我想捕获由安装在AVD上的Android应用程序(文件.apk)的GUI上激活的事件(例如,按下的按钮)生成的网络流量。首先,我使用adb shell中的strace命令捕获了进程的系统调用(我使用ps命令获取了进程的PID):
strace -f -tt -s 200 -p 27707 -o syscallcap.txt
然后我分析了txt文件,但主线程(27707)接收数据(或发送数据) - 系统调用recvfrom(sendto或sendmsg) - 来自未知进程;最后两个字段是NULL):
27707 19:06:29.441356 recvfrom(72, “nysv \ 0 \ 0 \ 0 \ 0} \ 323 \ 33 {\ 370 \ r \ 0 \ 0W \ 36 \ 1 \ 0 \ 0 \ 0 \ 0 \ 0”,2400,MSG_DONTWAIT, NULL,NULL)= 24
我如何理解哪些系统调用对我的目的很重要? 如何从系统调用开始捕获模拟器上安装的Android应用程序的http / tcp / udp网络流量? 任何建议或想法都是受欢迎的,因为这是一个论文项目。
答案 0 :(得分:0)
嗯,我知道有两种方法可以记录设备的网络流量。
IPTables是linux Netfilter模块的防火墙应用程序,用于配置链和规则。我们使用iptables来拦截流量并将流量重定向到我们的内部代理服务器,然后内部代理服务器将流量中继到配置的代理服务器。
需要 ROOT
Android firewall with VpnService
使用此方法,您可以在应用程序中实施隧道,这将记录所有网络流量。
所提供的链接应该为您提供方向
现在,为了映射来自前台应用的流量,所有应用都有一个唯一的应用ID,可用于设置/监控链以记录其流量。