Just do it.

小试牛刀-第一次app破解

Posted on By qfzwy

实战记录

最近总是睡不着,天天失眠,于是下载了一款助眠app,音乐很好听,可是也不便宜,于是开整。

mt看一下基本情况,有壳

image-20250301184606189

使用了fridadexdump没成功,又没脱壳机,只能借助一下在线工具脱壳

image-20250301184719660

脱完壳没法反编译,这里使用np修复一下

image-20250301185000582

开始分析,个人习惯直接先上r0tracer分析堆栈,根据功能点去分析

选个白噪音听听,没开会员只能试听,那思路就来了,如果找到破解会员的入口,首先就知道哪里会判断你是不是会员,比如这里,非会员只能试听,过一段时间后非会员就不能听。

image-20250301190017627

image-20250301190219863

那可能存在的判断点就在进入付费页面前,或者点击付费项目时。这里过一段时间后,点击任何音乐都会弹窗,那就trace一下看看点击后发生了什么

image-20250301190801390

再看一下对应的源码,和之前说的对应上了,大概猜测就是先判断是不是会员,如果不是看一下试听时间有没有结束。

image-20250301191203900

如果没脱壳的话可以直接使用objection获取实例

那么这里就很容易看出,common.b.i0()很可能是判断是否为会员的方法

看到代码也是沉默了,应该直接来isvip大法的,不过熟悉一下思路总不是坏事。

image-20250301191244937

hook一下看看是否可行

function hook_vip(){
    let b = Java.use("xxx.sleep.common.b");
    b["i0"].implementation = function () {
        console.log(`b.i0 is called`);
        let result = this["i0"]();
        console.log(`b.i0 result=${result}`);
        return true;
    };
}

可以听了

接下来修改源码,然后重打包。

image-20250301201622441

这里使用np去除签名

image-20250301201851064

有两个大小一样的dex使用mt打开会自动去重,然后删掉空白的,最后再将脱完壳的dex重命名加入

最后结果如下

image-20250301202132173

最后再进行一个签名就可以安装了,打开看看

image-20250301202225400

都可以听了,没有试听或者弹窗提示。

在hook的时候可能还有弹窗,直接修改源码后就没有了,可能那个弹窗的时机特别早,不是很好hook。

后续会继续分析该软件的加密算法,道阻且长。

注:仅做技术交流。

条件允许还是买个mt会员,不然mt np换来换去挺麻烦的。