|
吾爱游客
发表于 2022-8-16 16:25
1、申 请 I D:miqt
2、个人邮箱:miqtdev@163.com
3、原创技术文章:
分享两个文章:
1. xposed 绕过app加壳保护的方式
2. Android部分机型,静态权限设置漏洞,强制获取手机权限
一、 xposed 绕过app加壳保护的方式
众所周知,在进行xposed逆向时,必须要先跨过对方app加壳这一关,下面我就分享一下我的一个过壳方式。
xposed 绕过 360 乐固等加固壳方案。
通过hook Android 启动App attachBaseContext 方法拿到classloader 和程序上下文。
XposedHelpers.findAndHookMethod("com.stub.StubApp",
loadPackageParam.classLoader,
"attachBaseContext",
Context.class,
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
//获取到Context对象,通过这个对象来获取classloader
Context context = (Context) param.args[0];
//获取classloader,之后hook加固后的就使用这个classloader
ClassLoader classLoader = context.getClassLoader();
//已经绕过360加固取得classloader
}
});
二、Android部分机型,权限设置漏洞
发现小米 6 安全管家,即使我关闭了某些权限,但我一打开应用后,应用自己开启了权限,遂,反编译之,得以下反射强行设置权限代码。。
理论上手动开启权限也是使用以下的代码进行,因此只有系统应用可以使用。(但不排除某些厂商定制rom的过程中,漏掉了关键的验证,调用只有有可能是可行的)
AppOpsManager appOpsManager = mContext.getSystemService(AppOpsManager.class);
HashMap<String, Integer> map = (HashMap<String, Integer>) ClazzUtils.getObjectFieldObject(appOpsManager,"sOpStrToOp");
Method method = appOpsManager.getClass().getMethod("setMode",int.class,int.class,String.class,int.class);
int code = map.get(AppOpsManager.OPSTR_GET_USAGE_STATS);
int uid = Binder.getCallingUid();
String pkn = mContext.getPackageName();
int mode = AppOpsManager.MODE_ALLOWED;
method.invoke(appOpsManager,code,uid,pkn,mode);
再附上一个反编译小米安全管家设置权限的代码:
Object mAppOpsManager = context.getSystemService("appops");
ClazzUtils.invokeObjectMethod(mAppOpsManager, "setUserRestriction", new Class[]{Integer.TYPE, Boolean.TYPE, IBinder.class}, new Object[]{Integer.valueOf(24), Boolean.valueOf(true), new Binder()});
ClazzUtils.invokeObjectMethod(mAppOpsManager, "setUserRestriction", new Class[]{Integer.TYPE, Boolean.TYPE, IBinder.class}, new Object[]{Integer.valueOf(45), Boolean.valueOf(true), new Binder()});
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|