android多开器解析与检测实现方法示例
作者:小道安全 发布时间:2022-04-01 11:43:15
目录
多开理论基础
多开实现原理解析
代码实现:多开包名
代码实现:多用户
总结
多开理论基础
app多开常用于做一些不合法的事情,如高羊毛,黑灰产,甚至会对app的功能做破坏修改。因此多开在实际app应用中是有一定危害性的,因此对多开环境的识别是很重要的,通过识别多开环境有利于让app更加安全。
目前市面上的多开App的原理类似,都是以新进程运行被多开的App,并hook各类系统函数,使被多开的App认为自己是一个正常的App在运行。
从形式上来说多开App有2种形式,一种是从多开App中直接加载被多开的App,如平行空间、VirtualApp等,另一种是让用户新安装一个App,但这个App本质上就是一个壳,用来加载被多开的App,其原理和前一种是一样的,市面上多开分身这款App是用的这种形式,用户每分身一个App需新安装一个包名为dkmodel.xxx.xxx的App。
多开实现原理解析
app多开实现原理很多种类,如采用多用户方式(mumu模拟器的多开器实现)、通过创建不同进程名称(多开分身、双开助手)进行运行。
我们知道在每一个的app都有属于自己的私有目录,一般是“/data/data/包名/”或“/data/user/用户号/包名”,多开方式也是基于这些去做处理的,那么我们就可以通过调用系统getFilesDir()方法可以读取到私有目录下的信息目录。在多开环境下,获取到目录会变为“/data/data/多开包名/xxxxxxxx”或“/data/user/用户号/多开App的包名”。
基于以上的原理分析,就可以通过以下代码实现对多开环境的判断识别了。
代码实现:多开包名
//用于收集可以实现多开的app包名,已收集到最新市面上的大部分多开app
private String[] packagename = {
"com.bly.dkplat",//多开分身本身的包名
"com.by.chaos",//chaos引擎
"com.lbe.parallel",//平行空间
"com.excelliance.dualaid",//双开助手
"com.lody.virtual",//VirtualXposed,VirtualApp
"com.qihoo.magic",//360分身大师
"com.dual.dualgenius", //DualGenius/双开精灵
"com.jiubang.commerce.gomultiple" //GO Multiple/Go双开
};
通过读取文件包的方式进行比对
public boolean checkPrivateFilePath(Context context)
{
String path = context.getFilesDir().getPath();
for(String vtpkg: packagename)
{
if(path.contains(vtpkg))
{
return true;
}
}
return false;
}
通过读取文件包的方式进行比对
public boolean checkPrivateFilePath(Context context)
{
String path = context.getFilesDir().getPath();
for(String vtpkg: packagename)
{
if(path.contains(vtpkg))
{
return true;
}
}
return false;
}
代码实现:多用户
private String GetMulData()
{
//通过读取命令行方式实现。
String filter = exec("cat /proc/self/cgroup");
if(null == filter || (filter.length() == 0))
{
return null;
}
int uidStartIndex = filter.lastIndexOf("uid");
int uidEndIndex = filter.lastIndexOf("/pid");
if(0 > uidStartIndex)
{
return null;
}
if( 0 >= uidEndIndex)
{
uidEndIndex = filter.length();
}
filter = filter.substring(uidStartIndex + 4, uidEndIndex);
try {
String strUid = filter.replaceAll("\n", "");
if(isNumeriToUid(strUid))
{
int uid = Integer.valueOf(strUid);
filter = String.format("u0_a%d", uid -10000);
return filter;
}
}catch (Exception e)
{
return null;
}
return null;
}
来源:https://juejin.cn/post/7000285004810944543


猜你喜欢
- 介绍: 本文章主要针对web项目中的两个问题进行详细解析介绍:1- 页面跳转404,即controller转发无法跳转页面问题;2- 静态资
- @property可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的。
- 本文实例讲述了Android编程实现仿优酷圆盘旋转菜单效果的方法。分享给大家供大家参考,具体如下:目前,用户对安卓应用程序的UI设计要求越来
- 目前常用的ORM框架有 Mybatis(batis)、MybatisPlus,Hibernate、Jpa等几个框架,今天就简单介绍一下搭建M
- 前言在阅读Kotlin的代码时,经常有看到 :: 这个符号,这个符号专业术语叫做成员引用,在代码中使用可以简化代码,那到底怎么使用呢以及使用
- 一直想在持续集成方向学习并研究一番,近期正准备结合jmeter+ant+jenkins做自动化接口测试,在学习的同时,正好实践一番,毕竟实践
- No ‘Access-Control-Allow-Origin‘ header is present
- 本文实现springboot的多文件上传,首先创建一个springboot项目,添加spring-boot-starter-web依赖。然后
- 前言经过前面《Unity3D入门教程》系列讲解,再加上我们自己的探索,相信大家已经掌握了Unity3D的相关知识和基本方法。本文将使用前面学
- Semaphore、SemaphoreSlim 类两者都可以限制同时访问某一资源或资源池的线程数。这里先不扯理论,我们从案例入手,通过示例代
- 最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在a
- 该方法使用的jdk1.6以后自带的分页工具类实现public static void main(String[] args) {  
- 1.JavaBean转Map1.1.简介这篇博客是通过反射来进行实现转换的在学习redis中,发现了一个知识点,就是Java对象转map,视
- 这篇文档主要关注下配置修改后对应的 Java 对象是如何更新,并不关注整体的配置改动流程所有代码都来自 apollo-client 项目更新
- 基本概念servlet 关系servlet 和 servletconfig 是一对一的关系;servletconfig 作用它存储 web.
- 本文实例讲述了Java单例模式。分享给大家供大家参考,具体如下:在实际开发的时候会有一些需求,在某个类中只能允许同时存在一个对象。这时就需要
- 1. 什么是局部类型?C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中
- 一、添加联系人Intent addIntent = new Intent(Intent.ACTION_INSERT,Uri.withAppe
- 本文实例讲述了C语言二叉树常见操作。分享给大家供大家参考,具体如下:一、基本概念每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。性质
- 1、使用第三方类库 HtmlAgilityPack官方网址:https://html-agility-pack.net/?z=codeple