-
-
[原创]某虚假交友APP(信息窃取)逆向分析
-
2024-3-20 19:09
20909
-
应用初探
在群里水群的时候 群u发了一个交友APP 于是拿来分析一下
![图片描述](upload/attach/202403/946278_GJ4Z6RSYQJ3FG26.webp)
可以看到应用打开后又一个登录的界面
需要用户输入手机号与验证码进行登录
#在线云沙箱分析
将APK放入某安信云沙箱中分析 提示应用请求了过多的敏感权限
![图片描述](upload/attach/202403/946278_RTP6QCSSK2F7RFR.webp)
逆向分析
直接拖入Jadx分析 好在程序没有加固 也没有任何混淆
![图片描述](upload/attach/202403/946278_H5FQ537FZJVPCWH.webp)
若直接点击注册会弹出以下窗口
![图片描述](upload/attach/202403/946278_YXY56RME2NMTDUP.webp)
直接利用搜索大法定位到关键的位置
![图片描述](upload/attach/202403/946278_9F4S8WPS4BKVGYC.webp)
![图片描述](upload/attach/202403/946278_73WZY9VPST9Z8DZ.webp)
沿着调用链向上回溯
![图片描述](upload/attach/202403/946278_UFSY99TBDE9TT2N.webp)
可以发现调用了startTimer 和 toLogin函数
进入startTimer函数分析
![图片描述](upload/attach/202403/946278_6VCNWKNWHRNHYRY.webp)
发现程序APP进行一个90s的循环后就自动退出了 并不会启动其他什么奇奇怪怪的Activity(我有个朋友听到这个消息后特别失望)
然后分析toLogin
![图片描述](upload/attach/202403/946278_79EHUBQQR9N9475.webp)
发现程序会创建一个 RxHttpJsonParam 对象并且请求的目标IP在Urls类中
双机进入类可以看到相关的接口地址
![图片描述](upload/attach/202403/946278_A6PCUKRDKAS9MBH.webp)
如果访问Reg接口成功的话 会进入一个匿名函数
![图片描述](upload/attach/202403/946278_NH7HR2D5TP9WGVZ.webp)
分析代码可以看到开发者编译的时候并没有把日志打印的函数給注释掉
所以这样能很方便咱们进行分析
其中调用的函数包括获取短信内容,获取联系人信息,获取图片...
![图片描述](upload/attach/202403/946278_A8KPGWB6V5KC3EB.webp)
抓包分析
首先在断网情况下测试
![图片描述](upload/attach/202403/946278_8WVYXM4ZE27XCV4.webp)
在这里我尝试去利用Frida去hook okhttp3 中的 connect函数
发现hook不到 但是在smail层面位置设置断电调试却可以断下来
这里不明白是为什么 懂的大佬可以解释一下...
![图片描述](upload/attach/202403/946278_8QEMQVUMJE8TJ9N.webp)
![图片描述](upload/attach/202403/946278_9VTFB2BTPV8P7SE.webp)
日志中打印出来这些内容
![图片描述](upload/attach/202403/946278_RGYXP92EERC5F72.webp)
接下将电脑和手机连接在同一网络中 配置手机的代理后直接用BP抓包分析
点击注册后 程序会发送目标Reg接口发送用户填写的手机号 验证码 当前时间 当前时间加盐后的hash值 手机型号
利用Repeat模块连续发了几次包之后 发现自己的IP被ban了 再次访问总是500
![图片描述](upload/attach/202403/946278_GU7RYT99PJQEA6J.webp)
主动调用
此时我的IP已经不可以注册 (这里考虑用梯子挂了全局代理 但是没有用)
肯定无法触发后续的恶意操作了 此时想到了利用Frida主动调用其中的恶意函数
首先通过创建一个新的类去调用
1 2 3 4 5 6 7 8 | let LoginActivity = Java.use( "com.qinyue.vmain.activity.LoginActivity" );
var obj = LoginActivity.$new();
console.log( "getContacts()" )
obj.getContacts();
LoginActivity[ "getContactsSms" ].implementation = function () {
console.log(`LoginActivity.getContactsSms is called`);
this[ "getContactsSms" ]();
}
|
出现以下的错误
![图片描述](upload/attach/202403/946278_SPFG7DHNNASPUFU.webp)
考虑直接从堆栈中调用已经初始化过的类
1 2 3 4 5 6 7 8 9 10 11 12 | Java.choose( "com.qinyue.vmain.activity.LoginActivity" ,{ / / 要hook的类
onMatch:function(instance){
console.log( "onMatch " );
let ret = instance.getContacts(); / / 要hook的方法
instance.getContactsSms();
instance.getPhoto();
},
onComplete:function(){
console.log( "result: " );
}
});
|
此时抓包分析
![图片描述](upload/attach/202403/946278_7XUUVKMQPV83KTA.webp)
可以看到此时向目标接口上传了一个图片
流量分析
Wireshark抓包 分析一下
![图片描述](upload/attach/202403/946278_S6HHVJ4GYTQ7AXE.webp)
随便提取一个出来看看
![图片描述](upload/attach/202403/946278_48ZUJCYMN3HR948.webp)
恰好就是我之前保存的应用截图
![图片描述](upload/attach/202403/946278_SKGT4K6SVXC63YW.webp)
并且从日志中可以看到应用上传了相当多的信息(通讯录信息 各种图片)
![图片描述](upload/attach/202403/946278_SX9JWVBUUBBM2HZ.webp)
总结
该APP也算是一个比较简单的恶意APP 无加壳无混淆 甚至开发者为了自己方便编写的Log函数也没有删除 数据在传输过程中也没有加密
但是这样简单的一个仅有一张封面的APP 假如有小白中招 也是会造成很十分严重的数据泄露风险的
因此网络世界真真假假 假假真真 还是希望大家文明上网吧!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2024-3-20 19:17
被Just_Cracker编辑
,原因: