Android APP破解--Forest3.6.2

0x00 前言

​ 为什么会想去破解这个app呢?正所谓有需求才有生产……

​ 这一切都要从上个学期期末那个抽烟种树喝洗脚水的日子讲起……

(往事不堪回首,此处省略一个里约奥运碧池的苦水)

​ 所以,其实forest的用处就是让你离开手机,设定种树时间,如果你在这个时间中打开了别的app,微信啊、QQ啊,总之如果你玩了手机,那么你的树就会死掉。1

​ 好啊,所以这个app为什么要破解呢?因为解锁后可以关注好友,单机模式种树一点意思都没有啊! 620032545567660226

​ 但是,解锁需要0.99刀,对应着6rmb,6rmb买一个好的app也是不错的,但是。。。支付方式只有通过Google账号,PayPal没有绑定卡,而GooglePlay礼品卡最小面值是10刀,在淘宝卖60+,当然,也有另外的办法,借用别人已解锁的Google账号登陆,app自然也成解锁的了。

​ 除此之外还有另外一个功能的解锁,同样也需要0.99刀,方法一样,不过这个功能具体怎么样我还没用过,最重要还是先加波好友。

​ 而对于iOS用户……直接Apple Store付款就好了……

​ 之前我借了别人已解锁的账号,解锁,但昨晚刷了一次机,数据全空了,重新下回这个app也变回了未解锁状态。

​ 刚好这几天也在看关于Android逆向的知识,让我产生了破解的念头。

​ (有条件的人还是付款好啊T_T,毕竟app开发也不容易)

0x01 分析

​ 根据这个app,在解锁页面应该是调用相应的API支付,那么支付应该会有个支付是否成功的函数,那只需要定位到这个函数,把无论是否成功都返回true就好了。(然而我事实上不是用这种方式,具体见后面)

​ 通过DDMS输出的log,可以发现在触发支付页面时,出现了一个有关

MoreFeaturesViewController的log,然后我就可以到反编译出来的工程中搜索这个类。

2

0x02 查看源码

​ 这里看到个很神奇的地方,就是安装上是用GooglePlay支付,但在源码中我却发现了支付宝、微信支付的接口,不知道怎么才能触发,显然这更适合国内的用户支付。

3

4

​ 在微信支付中,我看到了一下接口,但安装的APP触发的不是微信支付,

1
2
3
4
5
public void succeed() {
Log.wtf("MoreFeaturesViewController", MoreFeaturesViewController.this.selectedSku + " 支付成功!");
MoreFeaturesViewController.this.setupUnlockedSku(MoreFeaturesViewController.this.selectedSku);
MoreFeaturesViewController.this.hideDialog();
}

​ 在这里看到一个FeaturesManager的类,用过这个app就知道feature对应各种可解锁出来的特性。 5

​ 进入到FeatureManager这个类,可以看到构造函数中初始化了很多东西,其中便有关键的三个getIsASUnlocked、getIsCTUnlocked、setLocked6

​ 分析代码,当getIsCTUnlocked函数返回true,setLocked就是false。

​ 于是,从前更改支付是否成功的方法改了,我们直接在他预设中setLock设置为true就可以了,或者我们进入到getIsCTUnlocked函数中强制返回true。

0x03 修改源码

​ 这里我选择了第二种,因为并不清楚是否在别的地方还调用了getIsCTUnlocked这个函数,更改这个函数也更彻底。

1
2
3
4
5
6
7
public boolean getIsASUnlocked() {
return this.getBoolean("pro_version", false);
}

public boolean getIsCTUnlocked() {
return this.getBoolean("customizable_tags", false);
}

就是这两个函数,我们在smali代码中直接改为return true就可以了。

​ 对应samli代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
.method public getIsASUnlocked()Z
.locals 2

.prologue
.line 29
const-string v0, "pro_version"

const/4 v1, 0x0

invoke-virtual {p0, v0, v1}, Lcc/forestapp/tools/coredataUtil/MFDataManager;->getBoolean(Ljava/lang/String;Z)Z

move-result v0

const/4 v0, 0x1 #插入这句,即吧v0赋值0x1,即是true

return v0
.end method

.method public getIsCTUnlocked()Z
.locals 2

.prologue
.line 33
const-string v0, "customizable_tags"

const/4 v1, 0x0

invoke-virtual {p0, v0, v1}, Lcc/forestapp/tools/coredataUtil/MFDataManager;->getBoolean(Ljava/lang/String;Z)Z

move-result v0

const/4 v0, 0x1 #插入这句,即吧v0赋值0x1,即是true

return v0
.end method

保存,重编译,打包签名~~~

安装发现,解锁成功!!!

601893834074608656

0x04 总结

​ 嗯……破解成功成就感真的很大啊啊啊,不过破解成功的apk就不上传了,人家开发也不容易嘛~,要的来私戳我。

​ 原apk是通过Android downloader下载的,应该是GooglePlay上的原版吧。

​ 其实过程不难,但真的很很很很有趣啊啊啊啊啊,而且第一次成就感炒鸡大,感觉get到了一项新技能。

​ 另外,其实查看源码时会发现一些很有趣的东西,似乎app会根据某些参数来判断是给你调用GooglePlay或是支付宝或是微信的支付界面,还没发现是怎么样的,而目前我所知道的从GooglePlay下载的全是调用GooglePlay的支付。

​ 嗯嗯,就是酱紫~


PS:本博客已改用多说评论,支持微信、qq登陆,对国内用户更加友好了。

×

赞助gif换电脑、吃双皮奶(逃

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
  1. 1. 0x00 前言
  2. 2. 0x01 分析
  3. 3. 0x02 查看源码
  4. 4. 0x03 修改源码
  5. 5. 0x04 总结
    1. 5.0.0.1. PS:本博客已改用多说评论,支持微信、qq登陆,对国内用户更加友好了。
,