目录
- 多开理论基础
- 多开实现原理解析
- 代码实现:多开包名
- 代码实现:多用户
- 总结
多开理论基础
app多开常用于做一些不合法的事情,如高羊毛,黑灰产,甚至会对app的功能做破坏修改。因此多开在实际app应用中是有一定危害性的,因此对多开环境的识别是很重要的,通过识别多开环境有利于让app更加安全。
目前市面上的多开App的原理类似,都是以新进程运行被多开的App,并hook各类系统函数,使被多开的App认为自己是一个正常的App在运行。
多开实现原理解析
app多开实现原理很多种类,如采用多用户方式(mumu模拟器的多开器实现)、通过创建不同进程名称(多开分身、双开助手)进行运行。
代码实现:多开包名
//用于收集可以实现多开的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; }
总结
到此这篇关于android多开器解析与检测实现的文章就介绍到这了,更多相关android多开器解析与检测内容请搜索本网站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本网站!
您可能感兴趣的文章:
- Android 通过自定义view实现水波纹效果案例详解
- Android之FanLayout制作圆弧滑动效果
- Android之ArcSlidingHelper制作圆弧滑动效果
- Android 使用registerReceiver注册BroadcastReceiver案例详解
- Android之AttributeSet案例详解