破解某普通话测试app会员
设备要求
已root的Android手机
软件要求
反编译工具
jeb、APK改之理(APK IDE)
hook工具
frida、xposed。
布局分析工具
Android Device Monitor
操作过程
脱壳
该app使用了360加固,脱壳过程和前一篇【获取某车源平台所有卖家联系方式】相同。
反编译
因为获取的dex文件不完整,使用jadx反编译会卡死,但是这不影响分析功能,所以也不去做过多的修复,可以用其他的反编译工具,只要能看到大概的代码就行了。
这里我使用了jeb和改之理,jeb用来查看java代码,改之理用来全局搜索。
首先将得到的4个dex打包成zip文件,如果直接替换apk中dex,用jeb反编译会虽然不会卡死,但是得不到代码,

然后用jeb反编译,
因为如果直接反编译dex文件,jeb每次只能反编译一个dex,而且jeb只能开一个,要想在多个dex中查找代码就要不断的关闭当前的dex再反编译其他的dex,
将他们打包成一个zip文件后,就能一次将所有dex反编译了。

改之理可以直接反编译替换dex后的apk,但是反编译出来的是smali,而自带的jd-gui反编译出来的java代码也不大友好,因此就只用来搜搜变量。

查找关键代码
首先打开app到主页,能够看到现在是没有会员的。

先随便找一个需要会员的地方,
在第一栏的机考页面,点击马上测试,然后右下角有一个全真测试,这个功能是需要会员的。


这里我们知道,点击全真测试按钮后,就会先验证是否是会员,不是会员则弹出开通会员的对话框,所以定位到该按钮的响应代码即可。
首先通过分析Android Device Monitor分析该界面的布局,找到该按钮的id,过程如下:
1.先用mprop修改手机的属性,执行以下两条命令
./mprop ro.secure 0 ./mprop ro.debuggable 1
这两条命令可能一次不能成功,就需要多执行几次,知道出现类似如下内容,

2.打开View Server,执行以下命令
service call window 1 i32 4939
得到对应的输出

3.启动App,进入需要分析的界面

4.打开Android Device Monitor,在Hierarchy Viewer窗口对布局进行查看,找到对应的控件

由上图可知,该按钮的id为start_complex_test,所以在改之理对该字符串进行全局搜索。

由搜索结果可知,除了xml和R文件,中start_complex_test就只在NewPreviewTestActivity中出现过,该类是在第二个dex文件中(如果这里不能在代码中直接找到,就需要将xml中该id对应的十六进制数字转换成十进制数字,然后进行全局搜索),
在jeb中打开classes2.dex,找到NewPreviewTestActivity类中设置响应代码的地方,

可以看到,响应点击的类是NewPreviewTestActivity$$Lambda$5,但是直接双击它没有跳转,所以该类应该在其他dex中,直接在改之理中去搜索NewPreviewTestActivity$$Lambda$5

根据搜索结果,可知NewPreviewTestActivity$$Lambda$5在classes.dex中,在jeb中打开classes.dex,找到NewPreviewTestActivity$$Lambda$5

由onClick方法可知,处理方法为NewPreviewTestActivity的lambda$initEvent$5$NewPreviewTestActivity,所以又需要回到classes2.dex中查找lambda$initEvent$5$NewPreviewTestActivity

由代码可知,当PointManager.isProUser返回true则表示该用户是会员,返回false则弹出购买会员的对话框。
所以只需hook该方法,使其永远返回true即可。
编写hook插件
hook代码如下:
public class Main implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam)
{
if (loadPackageParam.packageName.equals("com.huahua.testing"))
{
XposedHelpers.findAndHookMethod(Application.class,
"attach",
Context.class,
new XC_MethodHook()
{
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable
{
//com.huahua.utils.PointManager.isProUser
XposedHelpers.findAndHookMethod("com.huahua.utils.PointManager",
loadPackageParam.classLoader,
"isProUser",
new XC_MethodHook()
{
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable
{
param.setResult(true);
}
});
}
});
}
}
}
安装重启后,打开该app,发现主页购买会员的提示已经变成会员专享资料下载了,

点击之前的全真测试,也不会弹出购买对话框了,而是直接进入测试

破解某普通话测试app会员的更多相关文章
- Fiddler抓包测试App接口
Fiddler抓包测试App接口 使用Fiddler对手机App应用进行抓包,可以对App接口进行测试,也可以了解App传输中流量使用及请求响应情况,从而测试数据传输过程中流量使用的是否合理. 抓包过 ...
- OSX10.12搭建IPv6本地环境测试APP
前记 最近刚换了工作,生活终于又安定下来了,又可以更博了 正文 最近公司在上线APP(整体全是用JS去写的,就用了我原生的一个控制器),然后APP就去上线,就被苹果巴巴给拒了.通过阅读苹果回复的邮件, ...
- iPhone手机获取uuid 安装测试app
iPhone手机获取uuid 安装测试app UDID是一种iOS设备的特殊识别码.除序号之外,每台ios装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identif ...
- 【转】iPhone手机获取uuid 安装测试app
iPhone手机获取uuid 安装测试app UDID是一种iOS设备的特殊识别码.除序号之外,每台ios装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identif ...
- 不同地区Android开发者使用哪些设备测试APP?
我们的团队密切关注着移动世界的趋势,以便可以提供所有有关变化的最紧密和最重要的信息.春天恰好是对app进行新一轮测试并检查其与不同Android设备兼容性如何的最佳时机.下面让我们一起来看看全世界范围 ...
- 专项测试-App性能分析
专项测试 app性能 Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastRece ...
- iOS 真机测试 App installation failed
真机测试的过程中,出现这种Bug This application's application-identifier entitlement does not match that of the in ...
- android安全测试 APP要点解析
评估思路 移动APP面临的威胁 风起云涌的高科技时代,随着智能手机和iPad等移动终端设备的普及,人们逐渐习惯了使用应用客户端上网的方式,而智能终端的普及不仅推动了移动互联网的发展,也带来了移动应用的 ...
- 转 15款免费WiFi(入侵破解)安全测试工具
转:http://www.ctocio.com/security/cloudsecurity/6594.html 一.Vistumbler扫描器 WiFi 扫描器能能发现附近AP的详细信息,例如信号强 ...
随机推荐
- Shopt命令(删除排除)
有时候我们需要反选某个文件以外的其他文件,就会用到rm -rf!(file)命令,但是有时候这条命令会报错显示 -bash: !: event not found 解决办法:shopt -s extg ...
- MPC学习笔记1:基于状态空间模型的预测控制(1)
MPC调节器 1.给定一个由状态空间法描述的离散系统: MPC控制器与其他线性二次调节器(LQR)的区别就在于其可以很好的将系统动态约束纳入考虑. 采样周期Ts控制了算法的效率,太大会错过很多系统运行 ...
- docker swarm 集群及可视化界面的安装及配置
docker swarm 集群及可视化界面的安装及配置 2016-12-14 16:08:46 标签:swarm consul registrator 原创作品,允许转载,转载时请务必以超链接形式标明 ...
- 一千行ABAP代码实现Windows传统游戏扫雷
*&---------------------------------------------------------------------* *& Report ZCHENH087 ...
- CDH 安装 kafka
前言 其实cloudera已经做了这个事了,只是把kafka的包和cdh的parcel包分离了,只要我们把分离开的kafka的服务描述jar包和服务parcel包下载了,就可以实现完美集成了. 具体实 ...
- OpenStack 安装:neutron服务
在上一篇中介绍了Nova的安装配置,这一篇介绍neutron 首先,创建neutron用户并设置密码为neutron [root@linux-node1 ~]# openstack user crea ...
- 解决SpringMVC拦截器中Request数据只能读取一次的问题
解决SpringMVC拦截器中Request数据只能读取一次的问题 开发项目中,经常会直接在request中取数据,如Json数据,也经常用到@RequestBody注解,也可以直接通过request ...
- Python学习—框架篇之初识Django
什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的W ...
- java、asp.net 通用分页码函数
<script type="text/javascript"> $(document).ready(function(){ ajaxGetPaging(1); }); ...
- Python设计模式 - UML - 交互概述图(Interaction Overview Diagram)
简介 交互概述图是将不同交互图衔接在一起的图,属于UML2.0的新增图.交互概述图并没有引入新的建模元素,其主要元素来自于活动图和时序图.交互概述图侧重从整体上概览交互过程中的控制流,包括交互图之间的 ...