Android 自动分析apk加固方式
本实例只对apk中lib文件夹中的文件进行分析
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; public class GetReinforcementMoth { public static void main(String[] args) throws IOException {
initData();
// String apkSourceCodeDir[] = {"G:\\workspace\\...\\...\\..", "G:\\workspace\\...\\...\\.."};
String apkSourceCodeDir[] = {"D:\\develop\\apks"}; getReinforcementMothByPaths(apkSourceCodeDir); // ArrayList<String> apkSourceCodeDir= new ArrayList<String>();
//// apkSourceCodeDir.add("G:\\workspace\\...\\...\\..");
//// apkSourceCodeDir.add("G:\\workspace\\...\\...\\..");
// apkSourceCodeDir.add("E:\\workspace\\...\\...\\...\\..");
// getReinforcementMothByPaths(apkSourceCodeDir);
} /**
* 加固so集合
*/
static HashMap<String, String> reinforcementSoMaps; private static void initData() {
reinforcementSoMaps = new HashMap<>();
reinforcementSoMaps.put("libsecexe.so", "梆梆加固免费版");
reinforcementSoMaps.put("libsecmain.so", "梆梆加固免费版");
reinforcementSoMaps.put("libSecShell.so", "梆梆加固免费版");
reinforcementSoMaps.put("secData0.jar", "梆梆加固免费版");
reinforcementSoMaps.put("libSecShell-x86.so", "梆梆加固免费版"); reinforcementSoMaps.put("libDexHelper.so", "梆梆企业版");
reinforcementSoMaps.put("libDexHelper-x86.so", "梆梆企业版");
reinforcementSoMaps.put("classes.jar", "梆梆加固定制版");
reinforcementSoMaps.put("DexHelper.so", "梆梆加固定制版"); reinforcementSoMaps.put("libtup.so", "腾讯加固");
// ReinforcementSoMaps.put("libexec.so", "腾讯加固");
reinforcementSoMaps.put("libshell.so", "腾讯加固");
reinforcementSoMaps.put("mix.dex", "腾讯加固");
reinforcementSoMaps.put("mixz.dex", "腾讯加固");
reinforcementSoMaps.put("libshella-xxxx.so", "腾讯加固");
reinforcementSoMaps.put("libshellx-xxxx.so", "腾讯加固"); reinforcementSoMaps.put("libtosprotection.armeabi-v7a.so", "腾讯御安全");
reinforcementSoMaps.put("libtosprotection.armeabi.so", "腾讯御安全");
reinforcementSoMaps.put("libtosprotection.x86.so", "腾讯御安全");
reinforcementSoMaps.put("tosversion", "腾讯御安全");
reinforcementSoMaps.put("libTmsdk-xxx-mfr.so", "腾讯御安全");
reinforcementSoMaps.put("aliprotect.dat", "阿里加固");
reinforcementSoMaps.put("libsgmain.so", "阿里加固");
reinforcementSoMaps.put("libsgsecuritybody.so", "阿里加固");
reinforcementSoMaps.put("libmobisec.so", "阿里加固");
reinforcementSoMaps.put("libfakejni.so", "阿里加固");
reinforcementSoMaps.put("libzuma.so", "阿里加固");
reinforcementSoMaps.put("libzumadata.so", "阿里加固");
reinforcementSoMaps.put("libpreverify1.so", "阿里加固");
reinforcementSoMaps.put("kdpdata.so", "几维加固");
reinforcementSoMaps.put("dex.dat", "几维加固");
reinforcementSoMaps.put("libkdp.so", "几维加固");
reinforcementSoMaps.put("libkwscmm.so", "几维加固");
reinforcementSoMaps.put("libkwscr.so", "几维加固");
reinforcementSoMaps.put("libkwslinker.so", "几维加固");
reinforcementSoMaps.put("libexec.so", "爱加密");
reinforcementSoMaps.put("libexecmain.so", "爱加密");
reinforcementSoMaps.put("ijiami.dat", "爱加密");
reinforcementSoMaps.put("ijiami.ajm", "爱加密");
reinforcementSoMaps.put("af.bin", "爱加密");
reinforcementSoMaps.put("signed.bin", "爱加密");
reinforcementSoMaps.put("libchaosvmp.so", "娜迦");
reinforcementSoMaps.put("libddog.so", "娜迦");
reinforcementSoMaps.put("libfdog.so", "娜迦");
reinforcementSoMaps.put("libedog.so", "娜迦");
reinforcementSoMaps.put("libprotectClass.so", "360加固");
reinforcementSoMaps.put("libjiagu.so", "360加固");
reinforcementSoMaps.put("libjiagu_art.so", "360加固");
reinforcementSoMaps.put("libjiagu_x86.so", "360加固");
reinforcementSoMaps.put("libcmvmp.so", "中国移动安全加固");
reinforcementSoMaps.put("libmogosec_dex.so", "中国移动安全加固");
reinforcementSoMaps.put("libmogosec_sodecrypt.so", "中国移动安全加固");
reinforcementSoMaps.put("libmogosecurity.so", "中国移动安全加固");
reinforcementSoMaps.put("libbaiduprotect.so", "百度加固");
reinforcementSoMaps.put("baiduprotect1.jar", "百度加固");
reinforcementSoMaps.put("baiduprotect.jar", "百度加固");
reinforcementSoMaps.put("libuusafe.jar.so", "UU安全加固");
reinforcementSoMaps.put("libuusafe.so", "UU安全加固");
reinforcementSoMaps.put("libuusafeempty.so", "UU安全加固");
reinforcementSoMaps.put("dp.arm-v7.so.dat", "DexProtect加固");
reinforcementSoMaps.put("dp.arm.so.dat", "DexProtect加固");
reinforcementSoMaps.put("libegis.so", "通付盾加固");
reinforcementSoMaps.put("libNSaferOnly.so", "通付盾加固");
reinforcementSoMaps.put("libreincp.so", "珊瑚灵御加固");
reinforcementSoMaps.put("libreincp_x86.so", "珊瑚灵御加固");
reinforcementSoMaps.put("libnqshield.so", "网秦加固");
reinforcementSoMaps.put("libnesec.so", "网易易盾");
reinforcementSoMaps.put("libAPKProtect.so", "APKProtect加固");
reinforcementSoMaps.put("libx3g.so", "顶象技术加固");
reinforcementSoMaps.put("libitsec.so", "海云安加固");
reinforcementSoMaps.put("libapssec.so", "盛大加固");
reinforcementSoMaps.put("librsprotect.so", "瑞星加固");
reinforcementSoMaps.put("libapktoolplus_jiagu.so", "apktoolplus加固");
}
public static void getReinforcementMothByPaths(String[] JavaSourceCodeDirs) throws IOException {
for (String dirPath : JavaSourceCodeDirs) {
File fl = new File(dirPath);
if (fl.exists()) {
getApkFileReinforcementMoth(fl);
}
}
}
public static void getReinforcementMothByPaths(ArrayList<String> JavaSourceCodeDirs) throws IOException {
for (String dirPath : JavaSourceCodeDirs) {
File fl = new File(dirPath);
if (fl.exists()) {
getApkFileReinforcementMoth(fl);
}
}
}
private static void getApkFileReinforcementMoth(File fl) throws IOException {
if (fl != null && fl.exists()) {
if (fl.isDirectory()) {
File[] listFiles = fl.listFiles();
for (File file : listFiles)
getApkFileReinforcementMoth(file);
} else if (fl.isFile() && !fl.isHidden()) {
if (fl.getName().endsWith(".apk")) {
Enumeration<? extends ZipEntry> entries = new ZipFile(fl).entries();
Set<String> libSo = new HashSet<>();
while (entries.hasMoreElements()) {
ZipEntry apk = entries.nextElement();
if (!apk.isDirectory() && apk.getName().startsWith("lib/"))
libSo.add(apk.getName().substring(apk.getName().lastIndexOf("/") + 1));
}
if (libSo.isEmpty()) { // 没有lib
System.out.println(fl.getName() + ":\t从lib中没有分析出加固方式");
return;
}
Set<String> reinforcementMoth = new HashSet<>();
// 有so
for (String libFile : libSo)
if (reinforcementSoMaps.containsKey(libFile)) {
reinforcementMoth.add(reinforcementSoMaps.get(libFile));
}
if (reinforcementMoth.size() > 0) {
System.out.println(fl.getName() + ":\t分析出加固方式为:" + reinforcementMoth.toString());
} else {
System.out.println(fl.getName() + ":\t从lib中没有分析出加固方式");
}
reinforcementMoth.clear();
}
}
}
}
}
Android 自动分析apk加固方式的更多相关文章
- Android 查看Apk签名方式V1和V2
Android 查看Apk签名方式V1和V2 java -jar apksigner.jar verify -v my.apk -- Verifies Verified using v1 scheme ...
- Android实现apk插件方式换肤
换肤思路: 1.什么时候换肤? xml加载前换肤,如果xml加载后换肤,用户将会看见换肤之前的色彩,用户体验不好. 2.皮肤是什么? 皮肤就是apk,是一个资源包,包含了颜色.图片等. 3.什么样的控 ...
- Android中对Apk加固(加壳)续篇之---对Native层(so文件)进行加固
有人说Android程序用Java代码写的,再怎么弄都是不安全的,很容易破解的,现在晚上关于应用加固的技术也很多了,当然这些也可以用于商业发展的,梆梆加密和爱加密就是很好的例子,当然这两家加固的Apk ...
- Android动态方式破解apk终极篇(加固apk破解方式)
一.前言 今天总算迎来了破解系列的最后一篇文章了,之前的两篇文章分别为: 第一篇:如何使用Eclipse动态调试smali源码 第二篇:如何使用IDA动态调试SO文件 现在要说的就是最后一篇了,如何应 ...
- Android Apk加固的初步实现思路(dex整体加固)
一.前 言 Android Apk加固的发展已经有一段时间了,相对来说本篇博客要记录的Android加壳的实现思路是4年的东西了,已经被老鸟玩烂了,Android加固的安全厂商也不会采用这么粗犷的方式 ...
- Android 换肤功能的实现(Apk插件方式)
一.概述 由于Android 没有提供一套统一的换肤机制,我猜可能是因为国外更注重功能和体验的原因 所以国内如果要做一个漂亮的换肤方案,需要自己去实现. 目前换肤的方法大概有三种方案: (1)把皮肤资 ...
- 基于御安全APK加固的游戏反外挂方案
一. 前言 随着移动互联网的兴起,移动游戏市场近几年突然爆发,收入规模快速增长.根据第三方数据统计,国内移动游戏2015年市场规模已达514.6亿.由于手游市场强势兴起,而且后续增长势头会愈加猛烈.火 ...
- [Android Security] APK自我保护 - 字符串处理
cp : https://segmentfault.com/a/1190000005128037 在开发过程中字符串不可避免,但是这些字符串也可能是破解的关键点,比如服务器的地址和错误提示这些敏感的字 ...
- APK加固之类抽取分析与修复
0x00 简单介绍 目前我己知的APK加固主要有以下两种方式(或有其它的方式有待发现) 隐藏dex文件:通过对目标DEX文件进行整体加密或压缩方式把整个dex转换为另外一个文件存放在assets文 ...
随机推荐
- python3-递归
# Auther: Aaron Fan """递归特性:1. 必须有一个明确的结束条件2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少3. 递归效率不高,递 ...
- Yii2中ACF和RBAC
ACF ( Access Control Filter) ACF ( Access Control Filter)官网的解释就是一个可以在模型或控制器执行行为过滤器,当有用户请求时,ACF将检查acc ...
- bash/shell的字符串trim实现
#!/bin/sh trim() { trimmed=$1 trimmed=${trimmed%% } trimmed=${trimmed## } echo $trim ...
- 中介者(Mediator)模式
中介者(Mediator)模式:用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显示的相互引用,从而使得耦合松散,而且可以独立的改变他们之间的交互 了解<迪米特法则>的朋友就知 ...
- HTML 5与CSS 3权威指南(第2版·上册) 中文pdf扫描版
HTML5与CSS3权威指南(第2版·上册)已经成为HTML 5与CSS 3图书领域的一个标杆,被读者誉为“系统学习HTML 5与CSS 3技术的最佳指导参考书之一”和“Web前端工程师案头必备图书之 ...
- Go语言最佳实践——异常和错误
Go语言将错误和异常两者区分对待. 1.Go语言中处理错误的惯用法是将错误以函数或者方法最后一个返回值的形式将其返回,并总是在调用它的地方检查返回的错误值. 2.对于“不可能发生的事情”称为异常,可使 ...
- js工具库简单介绍
javascript mvc的解决方案: angularjs, backbone,underscore, 有空的时候了解一下. 移动端的几个需要了解一下,jq mobile, zepto.knocko ...
- Xamarin.Forms之UserDialogs 重制版本
在 forms 里面,目前使用比较多的弹出组件是 Acr.UserDialogs ,但是这个组件有些小问题,比如 loading .hide 会同时把 toast 给一起关掉,android 下的 t ...
- .Net Mvc 四种过滤器
一.授权过滤器:AuthorizationFilters 二.动作过滤:ActionFilters 三.响应过滤:ResultFilters 四.异常过滤:ExceptionFilters ===== ...
- 1235: 入学考试[DP]
1235: 入学考试 [DP] 时间限制: 1 Sec 内存限制: 128 MB 提交: 37 解决: 12 统计 题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近 ...