设备要求

  已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会员的更多相关文章

  1. Fiddler抓包测试App接口

    Fiddler抓包测试App接口 使用Fiddler对手机App应用进行抓包,可以对App接口进行测试,也可以了解App传输中流量使用及请求响应情况,从而测试数据传输过程中流量使用的是否合理. 抓包过 ...

  2. OSX10.12搭建IPv6本地环境测试APP

    前记 最近刚换了工作,生活终于又安定下来了,又可以更博了 正文 最近公司在上线APP(整体全是用JS去写的,就用了我原生的一个控制器),然后APP就去上线,就被苹果巴巴给拒了.通过阅读苹果回复的邮件, ...

  3. iPhone手机获取uuid 安装测试app

    iPhone手机获取uuid 安装测试app UDID是一种iOS设备的特殊识别码.除序号之外,每台ios装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identif ...

  4. 【转】iPhone手机获取uuid 安装测试app

    iPhone手机获取uuid 安装测试app UDID是一种iOS设备的特殊识别码.除序号之外,每台ios装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identif ...

  5. 不同地区Android开发者使用哪些设备测试APP?

    我们的团队密切关注着移动世界的趋势,以便可以提供所有有关变化的最紧密和最重要的信息.春天恰好是对app进行新一轮测试并检查其与不同Android设备兼容性如何的最佳时机.下面让我们一起来看看全世界范围 ...

  6. 专项测试-App性能分析

    专项测试 app性能 Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastRece ...

  7. iOS 真机测试 App installation failed

    真机测试的过程中,出现这种Bug This application's application-identifier entitlement does not match that of the in ...

  8. android安全测试 APP要点解析

    评估思路 移动APP面临的威胁 风起云涌的高科技时代,随着智能手机和iPad等移动终端设备的普及,人们逐渐习惯了使用应用客户端上网的方式,而智能终端的普及不仅推动了移动互联网的发展,也带来了移动应用的 ...

  9. 转 15款免费WiFi(入侵破解)安全测试工具

    转:http://www.ctocio.com/security/cloudsecurity/6594.html 一.Vistumbler扫描器 WiFi 扫描器能能发现附近AP的详细信息,例如信号强 ...

随机推荐

  1. node.js异步编程的几种模式

    Node.js异步编程的几种模式 以读取文件为例: 1.callback function const fs = require('fs'); //callback function fs.readF ...

  2. java 调用webservice接口wsdl,推荐使用wsdl2java,放弃wsimport

    网上说wsimport是jdk1.6后自带的客户端生成调用webservice接口的工具,其实我挺喜欢原生的东西,毕竟自家的东西用着应该最顺手啊,但往往让人惊艳的是那些集成工具. 本机jdk1.8.1 ...

  3. leetcode268缺失数字

    int missingNumber(int* nums, int numsSize) { ) /; ;i<numsSize;i++){ sum = sum - nums[i]; } return ...

  4. Spring开始

    Spring 主要作用:spring的主要作用是解耦,降低代码间的耦合度(指降低类和类之间的耦合度).根据功能的不同,可以将系统中的代码分成主业务逻辑和系统级业务逻辑两类.Spring根据代码功能的特 ...

  5. .netframe初识

    转发自:https://blog.csdn.net/bingshan5haoao/article/details/32966581 https://www.cnblogs.com/liuxx/p/35 ...

  6. Linux - 文件和目录常用命令

    文件和目录常用命令 目标 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 ...

  7. 正向与反向拓扑排序的区别(hdu 1285 确定比赛名次和hdu 4857 逃生)

    确定比赛名次 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  8. Spring 文件上传MultipartFile 执行流程分析

    在了解Spring 文件上传执行流程之前,我们必须知道两点: 1.Spring 文件上传是基于common-fileUpload 组件的,所以,文件上传必须引入此包 2.Spring 文件上传需要在X ...

  9. oracle 中 某个字段的长度不够的sql 语句

    alter  table 表名 modify(字段名  类型)  之前字段type 的长度为50 现在改为100 举例 : alter table psp_model modify(type  var ...

  10. android 6.0+ 动态权限 拒绝不再询问后跳转设置应用详情页面

    android 6.0+ 的权限 需要动态申请 这里的权限针对的是 敏感权限: SMS(短信) SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEI ...