设备要求

  已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. SQL中NVL函数

    空值判断函数 1.NVL(表达式A,表达式B) 如果表达式A为空值,NVL返回值为表达式B的值,否则返回表达式A的值.该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的值可以是数字型. ...

  2. Redis集群以及自动故障转移测试

    在Redis中,与Sentinel(哨兵)实现的高可用相比,集群(cluster)更多的是强调数据的分片或者是节点的伸缩性,如果在集群的主节点上加入对应的从节点,集群还可以自动故障转移,因此相比Sen ...

  3. Windows邮件客户端

    换回WIndows 因为要保存邮件 所以需要邮件客户端 Foxmail 腾讯自家 同样需要独立密码 之前的foxmail是全拼 新注册了一个@qq 发现新注册的@qq绑定到的是新的QQ号 算了 去用1 ...

  4. virtualbox下centos虚拟机安装,并网卡配置桥接方式上网,使得和host可以互Ping通。

    见:http://www.cnblogs.com/taoshiqian/p/7615993.html 注意: 1.host 主机什么都不要处理 2.将virtualbox 的对应虚拟机网络设置桥接 3 ...

  5. Linux - 常用 Linux 命令的基本使用

    常用 Linux 命令的基本使用 目标 理解学习 Linux 终端命令的原因 常用 Linux 命令体验 01. 学习 Linux 终端命令的原因 Linux 刚面世时并没有图形界面,所有的操作全靠命 ...

  6. 微信小程序如何接入?

    1.线下扫码:小程序最基础的获取方式,是二维码.大家可以打开扫一扫,通过微信扫描线下二维码的方式进入小程序.这也是官方宣传中,最普遍的实用场景. 如何生成小程序导入码? 2.微信搜索 3.公众号关联 ...

  7. mysql学习笔记--数据库视图

    一.视图 1. 概念 a. 视图是一张虚拟表,它表示一张表的部分或多张表的综合的结构 b. 视图仅仅是表结构,没有数据.视图的结构和数据建立在表的基础上 2. 创建视图 a. 语法: create [ ...

  8. Celery 1

    Celery是一个用Python开发的异步的分布式任务调度模块 Celery有以下优点: 简单:一但熟悉了celery的工作流程后,配置和使用还是比较简单的 高可用:当任务执行失败或执行过程中发生连接 ...

  9. 【python路飞】编码 ascii码(256位 =1个字节)美国;unicode(万国码)中文 一共9万个 用4个字节表示这9万个子 17位就能表示

    8位一个字节  1024字节 1KB   1024KB 1MB ASCII码不能包含中文.创建了unicode,一个中文4个字节.UTF-8一个中文3个.GBK中国人用的只包含中文2个字节 升级 Un ...

  10. 解决在vscode中eslint在vue后缀文件中保存时无法自动格式化的问题

    在setting.json中加入如下内容 { "eslint.autoFixOnSave": true, "eslint.validate": [ " ...