样本1
样本为远控木马,本文跟踪了其执行逻辑与通讯协议
package=”com.android.tester”
SHA-1 B21A3447DEC6B1DCC57E47454D5257E8431CC0E6
申请权限如下
![(media/6a0ac9727dcd90b119ba82819edbf2e3.png)
主要逻辑
方法com.android.tester. C11.a,该方法执行一个线程,功能如下
从本地资源或者SharedPreferences取出字段
从本地SharedPreferences存储取出字段,通过socket连接
string:p “2212” (端口号)
string:h “116.255.181.56” (IP地址)
方法com.android.tester. C11.a
设置通讯数据流,执行新线程方法b,该方法将处理指令
com.android.tester.C11.b 可以看到在接收数据
将接收的数据字符串经过处理来到执行分发处:
随意跟进一个分支,将看到类似如下的方法:
com.android.tester.C11.k
可以看到:擦除数据、锁住等功能
通讯流量
追踪tcp流,发现如下流量:
查看app发送数据的方法之一:可以发现写入socket输出流的首字节为数据长度,随后用0分隔,末尾写入要发送的数据。
该方法被调用的某处,发现要发送的字符串
检查其他发送数据的方法:如下某处,读取文件打包发送,要发送的数据依旧为:长度+
分隔符0 + 数据本体
所以:发送数据格式为:长度+ 分隔符0 + 数据本体(明文字符串或者处理过的数据)
服务端响应:5.poing,应为服务器正确接收到数据回复客户端。
另一个会话:
48.10261 10249/storage/emulated/0/Download/work10249
48为长度, 10261 1024应为识别用的符号,中间按字符串为需要处理的目录
我们找到10261对应分支:
开始处理指令
所以:客户端发送数据格式为:长度+ 分隔符0 +
数据本体(明文字符串或者处理过的数据)
客户端接收数据格式为:长度+.+指令+指令参数(明文字符)
样本2
概况
主要分析追踪服务器地址
packagename:com.app
SHA1:44720D7B0B33590FF65984D12147CD1E4517F18B
跟踪代码
接收处理类:com.app.client.RecvService
SettingsInit配置数据,包括服务器地址,是需要AES解密从设置文件里的数据
com.app.client.RecvService.GetTasks处理任务,其中将调用APP_HANDSHAKE和服务器连接:
com.app.client.RecvService.APP_HANDSHAKE
目标地址变量:Setting.TASKS_URL,查找交叉引用,可以发现在方法sendHandshake中也有配置服务器地址:
解密数据,因为要求不运行apk,那么将下面代码抠出来即可