PeratX 发表于 2018-11-17 10:19

Pixiv Android 客户端 5.0.99 去广告(伪会员)

翻了翻论坛,一直都是有人转载,并没有人说说是如何破解。
那我这个吾爱破解的新成员就来说说是如何破解的。

工具:
apktool

初学者建议:
dex2jar 用于把DEX转换成JAR
jd-gui 用于反编译Java Class,不过更推荐使用JetBrains FernFlower,效果好

先使用 apktool 反编译整个 apk(可以在网上下到)

得到这样的目录结构

使用编辑器打开(这里使用 Visual Studio Code,并安装了smali插件)
用过Pixiv客户端的都知道,侧边栏里面有个premium的标志,那我们就试着搜索 premium的函数
从API那边发现确实没有混淆这一块,可能是引出太多了,再缩小范围搜索 isPremium 的函数

打开多个文件发现都指向/调用 jp.pxv.android.account.b 这个类
于是打开该文件

原文件名 "PixivAccountManager.java" 稳了
发现是否premium存在本地变量 j 中

程序中大量都和这个j有关

于是搜索改变这个变量的调用

找到了,还是在b中,那个m中的永远都是赋值true,不管

第一处赋值,是在构造函数中,不管

第二处实际上也是构造函数调用的,不管

第三处可以看见参数是
.method public final a(Ljava/lang/String;Ljava/lang/String;Ljp/pxv/android/response/PixivOAuthResponse;)V
可以知道是OAuth的回调,这就是我们要找的地方

iget-boolean就是从OAuthUser中取出结果,直接在下面加上 const/4 v1, 0x1 意思是赋值true

保存,编译,签名,大功告成。
有机会再讲讲如何显示登录失败的详细信息(SSL签名错误,无法访问API服务器,用户名/密码错误,网络未连接等等都能提示出来)。

PeratX 发表于 2018-11-17 16:02

qazwsxlty 发表于 2018-11-17 15:34
成功,不过这个会员只能用于去广告,历史记录好像也能看,按热门度排序是不行的(显示最新顺序)。

热门排序是服务端鉴权的,本地再怎么改都没用

anyou1314 发表于 2018-11-25 00:21

PeratX 发表于 2018-11-24 11:16
修改布局文件

我修改了.arsc中array\search_oder第二项去了人气标题 但是下面的布局仍然显示在old排序中...

劝你们要善良 发表于 2018-11-17 13:07

然而我还是看不懂。,慢慢学习吧

stars-one 发表于 2018-11-17 13:12

还没有学懂动态调试

sdsd995 发表于 2018-11-17 13:50

谢谢分享教程,学习一下

qazwsxlty 发表于 2018-11-17 15:34

成功,不过这个会员只能用于去广告,历史记录好像也能看,按热门度排序是不行的(显示最新顺序)。

LaoPanZ 发表于 2018-11-17 18:56

虽然看不懂 ,但是感谢楼主分享

geye1shiji 发表于 2018-11-17 20:01

我的天,从头到尾都看不懂

jiu812yan 发表于 2018-11-17 23:30

谢谢楼主分享

13115903663 发表于 2018-11-17 23:55

谢谢楼主
页: [1] 2 3 4 5
查看完整版本: Pixiv Android 客户端 5.0.99 去广告(伪会员)