2、这里我使用的是某蓝色音乐软件的大字版

3、下载好之后,还是先拿出我们的神器——算法助手,对其进行分析

4、之后我们正常启动app,之后操作一下,然后就可以在我们算法助手的日志中进行查看详情,因为日志比较多,这里我直接搜索的蓝色软件右上角的时间,这里筛选出来后,找他的堆栈信息。

5、查了一下,发现这个蓝色软件也没有加壳,也就没有脱壳的苦恼了,所以我这里直接把它丢进jadx中进行分析,找上面的堆栈里的类。

6、我们进入第一个类里面看看他的代码详情。

7、根据上图中的代码,我们可以大致看出来这个f是重要参数,我们跟进一下,看看这个f是个什么东西,我们发现当xxx.xxx.xxx.a.f27222a.f等于7的时候全日听,当它等于1的时候也全日听。

8、所以我们这里先hook一下f试试,frida启动!!
Java.perform(function () {
let a = Java.use("com.xxxx.xxxx.freemode.a");
a["f"].implementation = function () {
console.log(`a.f is called`);
let result = this["f"]();
console.log(`a.f result=${result}`);
return result;
};
});

9、根据上面分析的代码逻辑,这里我们修改一下hook代码。
Java.perform(function () {
let a = Java.use("com.xxxx.xxxx.freemode.a");
a["f"].implementation = function () {
console.log(`a.f is called`);
let result = this["f"]();
console.log(`a.f result=${result}`);
return 1;
};
});
10、修改之后,重新加载脚本后,我们发现获得了全天免费听歌。

11、说明我们修改的这个地方是对的,接下来,我们要持久化,因为这个蓝色软件没加壳,所以我们直接修改它的smali源码,这里我们先用apktool进行反编译解包。

12、然后我们找一下smali代码里f所在的位置,这里我们定位到代码在2657行。

13、定位到代码位置后,我们直接进行修改。未修改前代码如下:
2563 .method public f()I
2564 .locals 2
2565
2566 .line 738
2567 sget-object v0, Lcom/xxxx/xxxx/freemode/a;->e:Lcom/xxxx/xxxx/freemode/b/e;
2568
2569 instance-of v1, v0, Lcom/xxxx/xxxx/freemode/b/b;
2570
2571 if-eqz v1, :cond_0
2572
2573 const/4 v0, 0x1
2574
2575 return v0
2576
2577 .line 740
2578 :cond_0
2579 instance-of v0, v0, Lcom/xxxx/xxxx/freemode/b/d;
2580
2581 if-eqz v0, :cond_1
2582
2583 const/4 v0, 0x7
2584
2585 return v0
2586
2587 :cond_1
2588 const/4 v0, 0x0
2589
2590 return v0
2591 .end method
14、因为根据前面分析,我们需要让它永远返回1或者7,所以,修改后的代码如下:
2563 .method public f()I
2564 .locals 2
2565
2566 const/4 v0, 0x1
2567
2568 return v0
2569 .end method
15、修改完成后,进行重打包

16、打完包之后进行重签名,这里先生成一个签名:keytool -genkeypair -v -keystore sectest.keystore -storetype PKCS12 -keyalg RSA -keysize 2048 -validity 36500 -alias sectest

17、然后进行重签名:apksigner sign --ks sectest.keystore --ks-key-alias sectest xxxx_2.4.1-sec.apk,并且进行安装。

18、安装完成后,我们进入app查看,发现我们获得了免费听专属权益,会员歌曲之类的都能听了。

