破解一款日本看漫画软件 漫画読破 免积分观看 正常向APP 岛国漫画软件

查看 110|回复 11
作者:芽衣   
"



ic_launcher.png (10.02 KB, 下载次数: 5)
下载附件
2020-8-12 20:52 上传

app图标是长这样的。本来我是想发成品的,但是毕竟属于岛国软件,里面有不少暴力血腥的漫画(非18X,而且动漫之家有汉化),可能会不过关。所以有兴趣的还是自己折腾好了,这里只是分享思路,可能不是最好的。
准备工具:
1、ApkToolAid、Android Studio(或者独立DDMS)
2、uiautomatorviewer
3、可能还需要一点日语基础,至少你得知道弹出什么提示
去广告略过,太简单,论坛教程数不胜数。懒人直接改布局即可。



1.png (135.44 KB, 下载次数: 7)
下载附件
2020-8-12 21:05 上传

首先软件启动有个小问题,不知道是不是地区问题导致的。它有个错误提示,我也不知道为什么会这样。官方下载的也会出现这个,根据DDMS的记录来看,错误提示内容为:アプリ内課金の設定に失敗しました。電波状態の良い場所で画面を開きなおしてください。刚启动就提示app内充值设定失败,叫你找个信号良好的地方再试一次。根据线程分析可以很快定位到jp/co/hps/a/a/d/b$6这个文件,目标是
run
方法。如下图,直接给他一个return-void或者注释掉最后一段都是可以的,这样就不会再弹出这个提示了。


1.png (109.62 KB, 下载次数: 5)
下载附件
2020-8-12 21:10 上传


随便找一个付费漫画,点进去,会弹出这个提示:


1.png (116.08 KB, 下载次数: 4)
下载附件
2020-8-12 21:20 上传

中文意思是(ポイントが足りません。購入しますか?)积分不足,是否要购买积分?否,是。字符串转换成unicode是【
\u30dd\u30a4\u30f3\u30c8\u304c\u8db3\u308a\u307e\u305b\u3093
】(省略),dex内直接搜索这个,看看会出现什么结果。


1.png (122.91 KB, 下载次数: 6)
下载附件
2020-8-12 21:26 上传

从结果来看,字符串有2个地方,一个位于LastPageFragment,一个位于VolumeListFragment。单从文件意思可以知道分别在最后一页和主页会弹出来。
上图显示的是主页弹窗,可以知道在VolumeListFragment文件的b方法,根据DDMS的函数分析,直接输入
VolumeListFragment.b
,结果就出来了。


1.png (66.23 KB, 下载次数: 3)
下载附件
2020-8-12 21:31 上传



1.png (26.73 KB, 下载次数: 3)
下载附件
2020-8-12 21:35 上传

查找VolumeListFragment.b后,鼠标点击上图的onClick方法,来到VolumeListFragment$17这个文件。这里就是判断积分是否足够的根源了,所以想办法弄判断逻辑。
方法完整代码如下:
[ol]
  • .method public final onClick(Landroid/view/View;)V
  •     .locals 8
  •     .line 1727
  •     iget-object p1, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->c:Ljp/co/hps/comic/fragments/VolumeListFragment;
  •     invoke-virtual {p1}, Ljp/co/hps/comic/fragments/VolumeListFragment;->getActivity()Landroidx/fragment/app/FragmentActivity;
  •     move-result-object p1
  •     invoke-static {p1}, Ljp/co/hps/comic/model/f;->a(Landroid/content/Context;)Ljp/co/hps/comic/model/f;
  •     move-result-object p1
  •     .line 1728
  •     iget-object v0, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->a:Ljp/co/hps/comic/model/dto/VolumeInfo;
  •     iget-wide v0, v0, Ljp/co/hps/comic/model/dto/VolumeInfo;->mComicId:J
  •     long-to-int v0, v0
  •     .line 1729
  •     iget-object v1, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->c:Ljp/co/hps/comic/fragments/VolumeListFragment;
  •     iget-object v2, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->a:Ljp/co/hps/comic/model/dto/VolumeInfo;
  •     invoke-static {v1, v2}, Ljp/co/hps/comic/fragments/VolumeListFragment;->a(Ljp/co/hps/comic/fragments/VolumeListFragment;Ljp/co/hps/comic/model/dto/VolumeInfo;)Ljp/co/hps/comic/model/dto/VolumeInfo;
  •     .line 1731
  •     iget-object v1, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->c:Ljp/co/hps/comic/fragments/VolumeListFragment;
  •     invoke-static {v1}, Ljp/co/hps/comic/fragments/VolumeListFragment;->j(Ljp/co/hps/comic/fragments/VolumeListFragment;)Landroidx/fragment/app/b;
  •     move-result-object v1
  •     invoke-virtual {v1}, Landroidx/fragment/app/b;->dismiss()V〖根据DDMS来看这个应该要保留,以下全删〗
  •     .line 1733
  •     iget-object v1, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->a:Ljp/co/hps/comic/model/dto/VolumeInfo;
  •     iget-wide v1, v1, Ljp/co/hps/comic/model/dto/VolumeInfo;->mOriginPoint:D【初始积分】
  •     .line 1734
  •     iget-object v3, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->a:Ljp/co/hps/comic/model/dto/VolumeInfo;
  •     iget-wide v3, v3, Ljp/co/hps/comic/model/dto/VolumeInfo;->mPoint:D【积分】
  •     const-wide/16 v5, 0x0
  •     cmpl-double v7, v3, v5【比较v3和v5的double值并在v7存入int型返回值】
  •     if-ltz v7, :cond_0
  •     iget-object v3, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->a:Ljp/co/hps/comic/model/dto/VolumeInfo;
  •     iget-boolean v3, v3, Ljp/co/hps/comic/model/dto/VolumeInfo;->mIsStoreCampaign:Z
  •     if-eqz v3, :cond_0
  •     .line 1735
  •     iget-object v1, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->a:Ljp/co/hps/comic/model/dto/VolumeInfo;
  •     iget-wide v1, v1, Ljp/co/hps/comic/model/dto/VolumeInfo;->mPoint:D
  •     .line 2162
  •     :cond_0
  •     iget v3, p1, Ljp/co/hps/comic/model/f;->c:F
  •     float-to-double v3, v3【转换v3寄存器中的float型值为double型值存入v3】
  •     cmpl-double v7, v1, v3
  •     if-lez v7, :cond_1
  •     .line 1738
  •     iget-object p1, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->c:Ljp/co/hps/comic/fragments/VolumeListFragment;
  •     iget-object v0, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->b:Ljp/co/hps/comic/model/dto/ComicInfo;
  •     invoke-static {p1, v0}, Ljp/co/hps/comic/fragments/VolumeListFragment;->b(Ljp/co/hps/comic/fragments/VolumeListFragment;Ljp/co/hps/comic/model/dto/ComicInfo;)V
  •     return-void
  •     :cond_1
  •     cmpl-double v3, v1, v5
  •     if-lez v3, :cond_2
  •     .line 1742
  •     new-instance v1, Ljp/co/hps/comic/model/client/n;
  •     invoke-direct {v1}, Ljp/co/hps/comic/model/client/n;->()V
  •     .line 1743
  •     iget-object v1, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->c:Ljp/co/hps/comic/fragments/VolumeListFragment;
  •     invoke-virtual {v1}, Ljp/co/hps/comic/fragments/VolumeListFragment;->getContext()Landroid/content/Context;
  •     move-result-object v1
  •     iget-object v2, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->c:Ljp/co/hps/comic/fragments/VolumeListFragment;
  •     invoke-static {v2}, Ljp/co/hps/comic/fragments/VolumeListFragment;->k(Ljp/co/hps/comic/fragments/VolumeListFragment;)Lcom/android/volley/Response$$$$Listener;
  •     move-result-object v2
  •     iget-object v3, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->c:Ljp/co/hps/comic/fragments/VolumeListFragment;
  •     invoke-static {v3}, Ljp/co/hps/comic/fragments/VolumeListFragment;->l(Ljp/co/hps/comic/fragments/VolumeListFragment;)Lcom/android/volley/Response$$$$ErrorListener;
  •     move-result-object v3
  •     invoke-static {v1, p1, v0, v2, v3}, Ljp/co/hps/comic/model/client/n;->a(Landroid/content/Context;Ljp/co/hps/comic/model/f;ILcom/android/volley/Response$$$$Listener;Lcom/android/volley/Response$$$$ErrorListener;)V
  •     return-void
  •     :cond_2
  •     cmpl-double p1, v1, v5
  •     if-nez p1, :cond_3【p1非0会跳到void,不能让他跳下去】
  •     .line 1745〖重要的应该是这4段代码〗
  •     iget-object p1, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->c:Ljp/co/hps/comic/fragments/VolumeListFragment;
  •     iget-object v0, p0, Ljp/co/hps/comic/fragments/VolumeListFragment$$$$17;->a:Ljp/co/hps/comic/model/dto/VolumeInfo;
  •     iget-wide v0, v0, Ljp/co/hps/comic/model/dto/VolumeInfo;->mComicId:J
  •     invoke-static {p1, v0, v1}, Ljp/co/hps/comic/fragments/VolumeListFragment;->a(Ljp/co/hps/comic/fragments/VolumeListFragment;J)V
  •     :cond_3
  •     return-void
  • .end method[/ol]复制代码所以从1733删到1745,然后直接回编译测试一下。已经可以绕过积分检测了,不管够不够都可以免费浏览漫画。


    1.png (67.9 KB, 下载次数: 5)
    下载附件
    2020-8-12 21:49 上传



    1.png (177.36 KB, 下载次数: 6)
    下载附件
    2020-8-12 21:52 上传

    当你浏览到末尾的时候,点击继续阅读下一话的时候,还是会弹出积分不够,这就要回到开头所说的LastPageFragment这个文件了。


    1.png (174.58 KB, 下载次数: 5)
    下载附件
    2020-8-12 21:53 上传

    方法也是一样的,用DDMS可以快速定位。目标文件位于jp/co/hps/comic/fragments/LastPageFragment$21。


    1.png (123.33 KB, 下载次数: 3)
    下载附件
    2020-8-12 21:58 上传

    和上面一样从dismiss()V往下删,然后回编译测试,已经完美破解了收费功能。不过删代码不如改判断,建议直接修改if-lez和if-nez判断,改成反方向即可,因为我在几个小时的测试中偶有闪退现象,应该不是app设计太垃圾的原因……

    还有一个是限免阅读的功能。如下图,0元限免,每个小时只能看一次。如果点击永久观看的话还是会弹出上面的提示。


    1.png (153.36 KB, 下载次数: 3)
    下载附件
    2020-8-12 22:19 上传

    根据DDMS可以发现根源在jp/co/hps/comic/fragments/VolumeListFragment$24文件,同上删掉即可。
    最后我搜索了一下调用【
    jp/co/hps/comic/fragments/VolumeListFragment;->b(Ljp/co/hps/comic/fragments/VolumeListFragment;Ljp/co/hps/comic/model/dto/ComicInfo;)V
    】,发现有5个地方,为了彻底一点最好全部都改掉,因为不知道他什么时候会跑出来。LastPageFragment的调用也要搜索一下。


    1.png (52.29 KB, 下载次数: 3)
    下载附件
    2020-8-12 22:25 上传



    1.png (175.31 KB, 下载次数: 3)
    下载附件
    2020-8-12 22:30 上传

    大妈之家“隐语岛”

    下载次数, 下载附件

  • zgdl163   


    417788939 发表于 2020-8-13 08:36
    歪歪漫画不是免费的吗,广告都没有。

    不是啊,每天登录可以给一点书币,但那点书币一节动漫也看不了,所以大概率还是要收费的,基本上一块钱100书币,58书币可以看一节,每天登录50书币这样。
    芽衣
    OP
      


    zgdl163 发表于 2020-8-14 17:00
    不是啊,每天登录可以给一点书币,但那点书币一节动漫也看不了,所以大概率还是要收费的,基本上一块钱10 ...

    这个app代码和知音漫客好像……
    晚上或者明天我看看
    baolei1988   

    参考以下思路
    不过竟然是日本的app
    芽衣
    OP
      

    试试apkcombo。。。你会爱上
    felts   


    低调(d-iao) 发表于 2020-8-12 22:14
    试试apkcombo。。。你会爱上

    apkpure不也是搬运谷歌的吗?这两个不是孪生兄弟?
    12231821   


    417788939 发表于 2020-8-12 22:15
    apkpure不也是搬运谷歌的吗?这两个不是孪生兄弟?

    很多这类网站 不过各有千秋,另外并非所有软件百分百都有,apkcombo相对比较全
    流浪的猫   


    417788939 发表于 2020-8-12 22:15
    apkpure不也是搬运谷歌的吗?这两个不是孪生兄弟?

    另外gp市场现在走apks的占大多数,libs文件跟随系统,如果想下其他版本的lib,apkmirror更方便
    evangelion100   

    好东西,唯一的问题是不懂日语!
    芽衣
    OP
      

    虽然没看懂,但是感觉很厉害的样子
    您需要登录后才可以回帖 登录 | 立即注册