安全矩阵

 找回密码
 立即注册
搜索
查看: 1418|回复: 0

一例APP绕过root检测解密

[复制链接]

181

主题

182

帖子

721

积分

高级会员

Rank: 4

积分
721
发表于 2022-9-11 23:51:54 | 显示全部楼层 |阅读模式
本帖最后由 wangqiang 于 2022-9-11 23:53 编辑


一例APP绕过root检测解密

雷石安全实验室
2022-09-09 17:01 发表于浙江
转载自:一例APP绕过root检测解密

前言

最近在分析一款app时遇见了root检测,数据包加密,花了时间简单研究了一下,记录下学习的过程。


抛出问题

打开app发现提示检测到设备为root设备,闪退。能看到提示,推测应该是java层的检测。   

拖进jadx发现是加固的。


通过frida绕过检测

java层常见root检测大多是通过检测系统文件:一些路径下的su文件,一些root的app相关文件。
  1.   "/data/local/bin/su",
  2.     "/data/local/su",
  3.     "/data/local/xbin/su",
  4.     "/dev/com.koushikdutta.superuser.daemon/",
  5.     "/sbin/su",
  6.     "/system/app/Superuser.apk",
  7.     "/system/bin/failsafe/su",
  8.     "/system/bin/su",
  9.     "/su/bin/su",
  10.     "/system/etc/init.d/99SuperSUDaemon",
  11.     "/system/sd/xbin/su",
  12.     "/system/xbin/busybox",
  13.     "/system/xbin/daemonsu",
  14.     "/system/xbin/su",
  15.     "/system/sbin/su",
  16.     "/vendor/bin/su",
  17.     "/cache/su",
  18.     "/data/su",
  19.     "/dev/su",
  20.     "/system/bin/.ext/su",
  21.     "/system/usr/we-need-root/su",
  22.     "/system/app/Kinguser.apk",
  23.     "/data/adb/magisk",
  24.     "/sbin/.magisk",
  25.     "/cache/.disable_magisk",
  26.     "/dev/.magisk.unblock",
  27.     "/cache/magisk.log",
  28.     "/data/adb/magisk.img",
  29.     "/data/adb/magisk.db",
  30.     "/data/adb/magisk_simple",
  31.     "/init.magisk.rc",
  32.     "/system/xbin/ku.sud"
复制代码

检测一些root的app如magisk等。
  1. "com.noshufou.android.su",
  2.     "com.noshufou.android.su.elite",
  3.     "eu.chainfire.supersu",
  4.     "com.koushikdutta.superuser",
  5.     "com.thirdparty.superuser",
  6.     "com.yellowes.su",
  7.     "com.koushikdutta.rommanager",
  8.     "com.koushikdutta.rommanager.license",
  9.     "com.dimonvideo.luckypatcher",
  10.     "com.chelpus.lackypatch",
  11.     "com.ramdroid.appquarantine",
  12.     "com.ramdroid.appquarantinepro",
  13.     "com.topjohnwu.magisk",
  14.     "com.kingroot.kinguser",
  15.     "com.kingo.root",
  16.     "com.smedialink.oneclickroot",
  17.     "com.zhiqupk.root.global",
  18.     "com.alephzain.framaroot",
  19.     "com.android.vending.billing.InAppBillingService.COIN",
  20.     "com.android.vending.billing.InAppBillingService.LUCK",
  21.     "com.chelpus.luckypatcher",
  22.     "com.blackmartalpha",
  23.     "org.blackmart.market",
  24.     "com.allinone.free",
  25.     "com.repodroid.app",
  26.     "org.creeplays.hack",
  27.     "com.baseappfull.fwd",
  28.     "com.zmapp",
  29.     "com.dv.marketmod.installer",
  30.     "org.mobilism.android",
  31.     "com.android.wp.net.log",
  32.     "com.android.camera.update",
  33.     "cc.madkite.freedom",
  34.     "com.solohsu.android.edxp.manager",
  35.     "org.meowcat.edxposed.manager",
  36.     "com.xmodgame",
  37.     "com.cih.game_cih",
  38.     "com.charles.lpoqasert",
  39.     "catch_.me_.if_.you_.can_"
复制代码

这里通过一些公开的脚本去绕过,直接可以绕过。
  1. frida -U -f com.xxxx.xxxx -l anti_root.js --no-pause
复制代码

此时不再闪退。

数据包测试

挂上代理进行测试抓包,发现存在参数加密。  

还是需要脱壳进行分析。  这里已经绕过了root检测,没有frida检测,直接上frida-dexdump就行。
  1. frida-dexdump -FU
复制代码
分析后定位到类:com.xxxx.xxxx.utils.http.DESHelp直接hook就行。

frida rpc
只是hook加解密还是用很多不方便的地方,有时候需要去主动调用对应的加解密函数。  
这里可以用brida,或者是httpdecrypt等工具。  
这里提供一个通过python frida交互,使用rpc来完成主动调用。  
调用也很简单,只是代码写死在了js脚本中,所用使用rpc.exports开启RPC调用接口,后面使用python来调用。  
  1. function htddecrypt(param,key){
  2.         var result;
  3.         Java.perform(function () {
  4.             
  5.             var hclass = Java.use("com.xxxx.xxxx.utils.http.DESHelp");
  6.             var hexarry = hclass.parseHexStr2Byte(param);
  7.             param = byteToString(hexarry);
  8.             console.log("[*] Hooking ...");
  9.             result = hclass.decrypt(param, key);
  10.             //console.log(result);
  11.         });
  12.         return result;
  13.     }


  14.     function htdencrypt(param,key){
  15.         var result;
  16.         var enc
  17.         Java.perform(function () {
  18.             var hclass = Java.use("com.xxxx.xxxx.utils.http.DESHelp");
  19.             console.log(param);
  20.             enc = hclass.encrypt(param, key);
  21.             //console.log(result);
  22.             var hexarry = stringToByte(enc);
  23.             result = hclass.parseByte2HexStr(hexarry);
  24.         });
  25.         return result;
  26.     }   


  27.     rpc.exports = {  
  28.         rpcfunc: htdencrypt,
  29.         rpcfunc1: htddecrypt


  30.     }
复制代码
通过python中代码:
  1. session = frida.get_usb_device().attach("com.xxxx.xxxx")   
  2. script = frida_rpc(session)
  3. param = str(sys.argv[2])
  4. ret = script.exports.rpcfunc(param,"CCCk+H%b6.MMMMkoKKK")
  5. print(ret)
复制代码

总结

还是一个简单的例子,现在常规的app大体思路都是这样,只能碰到问题花时间研究去解决,不能迷信通杀方案。   





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 12:53 , Processed in 0.025962 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表