jadx重新打包_Android改机系列:一.Android一键新机原理刨析
本帖最后由 Sean1994 于 2019-7-23 11:44 编辑
[ 本帖最后由 Sean1994 于 2019-7-23 11:33 编辑 ]\n\n
声明:本帖只作为技术分享,切勿用于非法用途,如果用于其他用途,本贴概不负责,如果有侵权,请管理员删除。
一个改机案例
6月份拿到一个口碑不错的商业改机案例,该案例只能运行在指定的手机,指定的rom,号称各大app无法检测,免root的改机框架。
我手上只有nexus6p,安装到手机上跑了一下,瞬间闪退,没有任何崩溃日志。但是这条日志出卖了它:
这明显是调用System.exit(0)主动退出。
静态分析
通过图片可以看到dex被混淆,字符串也被加密
解密字符串重打包
字符串解密往往是固定的smali格式:
const-string vX, "加密后的字符串"
invoke-static {vX}, Lcom/test/decString(Ljava/lang/String;)Ljava/lang/String;
move-result-object vX
这个案例也不例外,所以编写一个脚本去匹配以上代码,然后调用解密代码(自己去源码里扣)解密字符串,然后把解密之后的字符串替换加密的字符串,然后再删除const-string vX, "解密之后字符串"以下两条指令,然后重打包即可(各位大佬若有更好的方案请告知)。当然我这里还加上了hook系统签名校验:
private void hook(Context context) {
try {
DataInputStream is = new DataInputStream(new ByteArrayInputStream(Base64.decode(oriSign, 0)));
byte[][] sign2 = new byte[(is.read() & 255)][];
for (int i = 0; i < sign2.length; i++) {
sign2[i] = new byte[is.readInt()];
is.readFully(sign2[i]);
}
Class> activityThreadClass = Class.forName("android.app.ActivityThread");
Object currentActivityThread = activityThreadClass.getDeclaredMethod("currentActivityThread", new Class[0]).invoke(null, new Object[0]);
Field sPackageManagerField = activityThreadClass.getDeclaredField("sPackageManager");
sPackageManagerField.setAccessible(true);
Object sPackageManager = sPackageManagerField.get(currentActivityThread);
Class> iPackageManagerInterface = Class.forName("android.content.pm.IPackageManager");
this.base = sPackageManager;
this.sign = sign2;
this.appPkgName = context.getPackageName();
Object proxy = Proxy.newProxyInstance(iPackageManagerInterface.getClassLoader(), new Class[]{iPackageManagerInterface}, this);
sPackageManagerField.set(currentActivityThread, proxy);
PackageManager pm = context.getPackageManager();
Field mPmField = pm.getClass().getDeclaredField("mPM");
mPmField.setAccessible(true);
mPmField.set(pm, proxy);
Log.i(TAG,"PmsHook success.");
} catch (Exception e) {
Log.e(TAG,"PmsHook failed.");
e.printStackTrace();
}
}
这是jadx反混淆和解密字符串之后的效果,这下代码阅读性高了很多:
过授权、签名校验、系统认证、登录
这是一个厮杀的过程,本案例检验之处有非常多,so中也存在字符串加密和检验。当然这不是本篇文章重点,具体厮杀过程就不过多赘述。最后庐山真面目出现了:
新机原理
绝杀技一:免root Hook
此案例通过编译xposed源码并且修改特征码,把Xposed相关名称改为系统名称,例如camera、email、phone。然后hook堆栈信息,把hook框架的堆栈过滤掉。然后把改名字的xposed集成至LineageOs源码中。然后通过魔改后的XposedBridge.jar编写Hook模块,这样就实现了免root集成hook框架。这样子真的可以为所欲为。
绝杀技二:全面Hook Android设备信息接口
这个不用多说,全面的Hook了java层所有获取设备信息的有关函数,包括文件读取的io重定向,附件中是我整理的Hook相关接口
Gaiji.txt
(7.75 KB, 下载次数: 19)
2019-7-23 11:23 上传
点击文件名下载附件
下载积分: 吾爱币 -1 CB
。
绝杀技三:伪造真实用户活动
各大厂商都在做风控,IP画像、设备画像、用户画像、手机号画像...,没用用户行为的设备,必然是非正常用户,肯定是过不了风控的,通过hook相关接口,每次新机填充不同的短信,通话记录,联系人,照片,启动时间,周边蓝牙、wifi,sensor的值随机化...
绝杀技四:基站、gps、ip位置一致
目前获取位置信息主要有基站、gps、ip位置,三个维度。改机必然是通过链接代理(vpn)来生成不同ip,这里就要保证每次基站和gps的位置要和IP的位置信息相差不大,这样每次新机都是一个新的地理位置。
绝杀技五:SysPropertyHook
Xposed只是java层的Hook,现在大多数设备指纹sdk都是native获取或者native和java层都获取,然后进行对比。这里通过Hook SystemProperties.set、Settings.System.put、Settings.Secure.put、Settings.Global.put。保证改机后/system/build.porp、System.xml、Secure.xml、Global.xml文件真实改变,保证native层通过getProp时候和java层获取的是一致的
新机流程
准备新机设备信息PhoneInfo
通过读取/assets目录下的设备信息集,随机生成一个设备信息,然后通过当前ip获取基带和gps的位置,并且生成用户信息。把这些信息全部写入到sdcard中的phoneInfo.json中。
完成Hook
通过读取sdcard中的phoneInfo.json的设备信息完成Hook,自此新机已经完成。
由于版权原因,案例就不放出来了
下篇预告
Android改机系列:二.全息备份原理刨析
jadx重新打包_Android改机系列:一.Android一键新机原理刨析相关推荐
- 爱伪装(AWZ)/爱立思(ALS)改机改串一键新机原理分析
安装过苹果插件的都知道,点开Cydia ,点软件源,再点编辑,再点添加,添加阿里源, 大家都知道,源地址::http://apt.aliooz.com 店铺地址:快发卡自动发卡平台 - 最好用的自动发 ...
- 抹机王怎么一键新机_抹机王怎么进行一键新机???
抹机王是一款设备清理工具,通俗点讲的话就是改机软件,可以实现一键新机的功能,那么我们下面来讲一下如何利用抹机王这款软件实现一键新机.1.基础功能配置主要用于设置清理设备的详细的个性化设置,这里我们介绍 ...
- jadx重新打包_Android反编译看看手Q口令红包的实现原理
首篇作为开始,先讲讲简单的反编译.反编译通常有几种目的:互相学习.借来用用.嘿嘿(干你,又分为小干干类似微信红包,和大干干改别人的apk帮他上架). 因为没带kvm回来,mbpr屏幕太小,所以下文环境 ...
- 热修复系列之一----Android 热修复原理篇及几大方案比较
热修复说白了就是"即时无感打补丁",比如你们公司上线一个app,用户反应有重大bug,需要紧急修复.2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也 ...
- java中的saturn_Saturn分布式调度平台系列:高屋建瓴之设计原理简析
由于业务系统中使用了Saturn作为分布式调度平台并且计划对其作二次开发,因此看了官方文档及源码,简单做了梳理与总结.Saturn是唯品会开源的一款定时任务调度平台,相对于传统的Spring Batc ...
- 【NEO官方】一键新机 改串 安装教程 ios一键新机 ios9 ios8 ios7均可用
NEO 支持IOS9一键新机了 IOS8设备安装NEO IOS8 ; IOS9设备安装NEO9, 确定自己的设备版本后对应安装 设备进cydia下,点,(最下面)软件源,编辑,添加,源输入apt.so ...
- 机架搭建_【新阁教育】穷学上位机系列——搭建STEP7仿真环境
经常有学员问我,学习上位机要不要买PLC硬件? 我一般的回答是:富则自行购买,穷则搭建仿真. PLC硬件,对于学习上位机来说,是锦上添花的事,经济条件允许,有则更好,条件不允许,新阁教育告诉您也可以通 ...
- Atitit 发帖机系列(7) 词法分析的方法attilax大总结)
Atitit 发帖机系列(7) 词法分析的方法attilax大总结) 1.1. 词法分析貌似俩大方法,一个直接根据状态图转换,一个根据dfa1 1.2. switchcase或者ifelse 最原始方 ...
- 美术改画系列-张聪-专题视频课程
美术改画系列-9212人已学习 课程介绍 这次的课程分为6章,将为大家呈现完全不一样的游戏设计,通过6个不同方向的美术设计的指导,让大家在老师的改画的过程中学习到更多的关于游戏美术设计 ...
- LS-WXL/E改机应用流程全攻略(改机+下载工具安装)
申明:本攻略中用到的方法并非都是本人原创,本人只是将其它帖子中的方法进行整理,并将其中部分不适合的地方进行修改补充,引用方法的版权归原作者,如果需要转载,请注明出处,谢谢! 装机前必看:如果NAS开启 ...
最新文章
- vscode 结束_8 个给前端的顶级 VS Code 扩展插件
- HTML CSS JS(一)
- Redis总结集群方式之主从复制
- LeetCode(1030)——距离顺序排列矩阵单元格(JavaScript)
- WMI-Win32_BIOS 参数说明
- Objective-C基础笔记(7)Foundation中的常用结构体
- SQL:postgresql查询结果加一个自定义的列
- 从delphi 10.3到delphi 10.4的改变实务
- f1c100A运行linux,荔枝派 Nano 全志 F1C100s 编译运行 Linux 笔记
- GCD中dispatch_semaphore(信号量)的使用方法
- matlab和robotstudio,一种从Robotstudio环境中导出机器人模型并在MATLAB下使其可视化的研究记录...
- C# vb .net实现淡色效果滤镜
- ECharts 中的事件和行为
- 用php编写多项选择题_php 多选框问题(类似一道多选题)多选题的答案 以及正确答案都记录到数据库里了,读取修改问题...
- 编程语言中的反射机制
- 声源定位matlab模拟,matlab声源定位程序的一点小问题
- android抓包 dns,利用 dns 实现 app简易抓包
- 60个让程序员崩溃的瞬间,我已崩溃,哈哈哈哈哈
- 基于FPGA的自动小车控制设计Verilog开发
- android+驾考软件开发,「驾考app开发」驾考app开发解决方案
热门文章
- SWFTOOLS PDF2SWF 参数详解(转)
- PHP将swf转为gif,swf转gif 在线转换
- Visual Studio 2019 Community 版离线注册
- 计算机键盘正确指法操作方法,键盘指法,图文详解键盘指法练习方法
- 2021 OpenCV人工智能竞赛优秀项目团队介绍集锦(五)
- ie11不兼容 html编辑器,修复kindeditor编辑器不兼容IE11问题
- 使用python来完成对QQ邮箱文件中转站的文件下载链接的获取
- 经济应用文写作【8】
- 网吧服务器系统安装,网吧服务器和客户端安装教程
- html写手机登录界面,使用HTML做手机端的登录界面