一、简述
该恶意应用运行后,私自读取用户的联系人和历史短信记录,后台静默上传到C2服务器,造成用户的隐私信息泄露。
二、样本信息
包名:fujinyueai.yes
应用名:附近约爱
文件SHA1:6c96510ba1b27d939dae7bef824312ae08291c2e
版本:8.68
文件大小:460.5 KB
三、恶意行为分析
3.1 运行界面
应用启动后会弹出一个窗口,要求用户填写“邀请码”。通过rg_n20()方法检查验证码是否正确。
3.2 窃取联系人和历史短信
校验用户输入的验证码是否为空,为空则通过Toast提示用户继续输入。不为空时会将邀请码、联系人、历史短信上传到到C2服务器,然后返回一个字符串。上传链接:http:// app.okctv.xyz/app/public/index.php/index/index/js
用fiddler抓包,可以看到窃取的联系人和短信
3.3 邀请码绕过
经过分析,当C2服务器返回的响应信息包含“OJBK”时校验通过校验。
由于样本来源于网络,我们手上并没有邀请码。可以去Hook rg_wbxl类的rg_n3391()方法,直接返回一个包含“OJBK”的字符串,便可以绕过检测逻辑。
package hook;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
/**
* @author yaorc
* @date 2021-04-29 17:19
*/
public class HookApp implements IXposedHookLoadPackage {
private static final String TAG = "HookApp";
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
String packageName = lpparam.packageName;
String hookPackageName = "fujinyueai.yes";
String hookClassName = "hsh.Java.jb.rg_wbxl";
String hookMethodName = "rg_n3391";
if (hookPackageName.equals(packageName)) {
Log.d(TAG, "handleLoadPackage: 准备Hook应用:" + hookPackageName);
XposedBridge.log(" 准备Hook应用:" + hookPackageName);
// Hook处理
XposedHelpers.findAndHookMethod(hookClassName, lpparam.classLoader, hookMethodName,
byte[].class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
param.setResult("OJBK");
}
});
}
}
}
激活Hook插件并重启手机,再次打开应用,随便输入邀请码后会弹出带有进度条且不可取消的提示框,后续就没有操作了,所以这个样本的主要目的就是窃取用户的联系人和短信数据,实施下一步诈骗操作。
反编译apk,通过资源反向搜索,可以得知主界面只是加载了一张图片,令用户误以为app是直播交友类软件,实质上并没有相关功能。
四、小结
-
该恶意应用主要目的是窃取用户的联系人、短信记录,猜测“邀请码”是用于标识用户和统计推广人员的绩效。
-
结合以往的网络诈骗案例来看,诈骗人员可能会在QQ、论坛等地方散播“交友”信息,引诱用户进行视频裸聊,期间会录制用户的不雅视频。诱导或威胁用户安装需要“邀请码”的APP,窃取用户的联系人后进一步勒索用户,完成整个诈骗流程。