闷骚小贱男 发表于 2021-1-14 12:32

番茄小说要看视频才能下载离线阅读?嫩他

本帖最后由 闷骚小贱男 于 2021-6-10 08:41 编辑


# 为什么会有这个帖子
前几天看到一个番茄免费小说,下载了看了看还行,但是发现不能下载小说(不能离线阅读),于是就动起心思,跳过这个看视频才能下载的功能

[不建议注册账号阅读]

---

# 需要的工具
1. 番茄3.8.0
2. MT管理器
3. NP管理器(因为小弟没大有闲钱开MT的VIP.所以MT和NP都用上)

---

# 开始实操
## 第一步arsc搜索
1.首先我们根据APP提示的"看一则小视频,即可免费下载全本小说!"
2.打开MT管理器resources.arsc中搜索"小视频"(当然了,你也可以搜索这句话中的别的文字)
3.搜索结果为下图:

4.发现长按xxxx/string/mt,ID为7f06020d,复制他的ID(MT自动复制为大写,NP管理器搜索需要搜索小写ID)

## 第二步dex中搜索ID
1.复制完ID之后,我们返回,点击dex编辑器++,把所有的5的dex都选中,点击确定
2.并搜索刚才复制的ID,类型为整数型

3.搜索结果:


## 查看分析搜索结果,并修改Smali代码
1. 第一个R$string直接忽略
2. 回到NP管理器中(主要是为了转换smali为java代码),用DEX编辑PLUS,打开DEX,并搜索小写的ID(7f06020d)[如果你MT管理器如果是VIP的话,是不需要用NP管理器的]
3. 我们先看NewDetailFragment$40的JAVA源码
```java
    public void onClick(View view) {
      onClick(view);
      if (!PatchProxy.proxy(new Object[]{view}, this, a, false, 7416).isSupported) {
            if (e.a().j()) {
                NewDetailFragment.k(this.c, this.b);
            } else if (e.a().f(NewDetailFragment.d(this.c))) {
                NewDetailFragment.s(this.c).downloadBook(NewDetailFragment.d(this.c), "active", "detail");
            } else if (c.a().g("video_book_download")) {
                switch (a.z().h) {
                  case 0:/* 分析:当a.z().h=0时,执行*/
                        NewDetailFragment.k(this.c, this.b);
                        break;
                  case 1:/* 分析:当a.z().h=1时,执行downloadAfterAddPrivilege,根据字面意思,应该是=1时可以下载小说,那我们尝试修改smali*/
                        NewDetailFragment.s(this.c).downloadAfterAddPrivilege(NewDetailFragment.d(this.c), "active", "detail");
                        break;
                  case 2:/* 分析:当a.z().h=2时,提示要看视频才能下载 */
                        q qVar = new q(this.c.getActivity());
                        qVar.d(this.c.getString(2131100173));/* 16进制7f06020d转换10进制为2131100173*/
                        qVar.a(this.c.getString(2131100171), new 1(this));
                        qVar.c(this.c.getString(2131100170));
                        qVar.a().show();/* 显示弹窗 */
                        NewDetailFragment.s(this.c).reportInspireVideoEvent("show_ad_enter");
                        break;
                  default:
                        break;
                }
            } else {
                NewDetailFragment.k(this.c, this.b);
            }
            NewDetailFragment.l(this.c).b(NewDetailFragment.d(this.c), "download");
            NewDetailFragment.e(this.c).v.setVisibility(8);
            h.a().f(true);
      }
    }
```
我们按下返回,搜索downloadAfterAddPrivilege,往上拉发现:pswitch_ab说明:pswitch_ab就是a.z().h=1,也就是case 1
```smali
    :pswitch_ab #case 1 分支1,可下载
    iget-object p1, p0, Lcom/dragon/read/pages/detail/fragment/NewDetailFragment$40;->c:Lcom/dragon/read/pages/detail/fragment/NewDetailFragment;

    invoke-static {p1}, Lcom/dragon/read/pages/detail/fragment/NewDetailFragment;->s(Lcom/dragon/read/pages/detail/fragment/NewDetailFragment;)Lcom/dragon/read/pages/detail/BookDetailHelper;

    move-result-object p1

    iget-object v1, p0, Lcom/dragon/read/pages/detail/fragment/NewDetailFragment$40;->c:Lcom/dragon/read/pages/detail/fragment/NewDetailFragment;

    invoke-static {v1}, Lcom/dragon/read/pages/detail/fragment/NewDetailFragment;->d(Lcom/dragon/read/pages/detail/fragment/NewDetailFragment;)Ljava/lang/String;

    move-result-object v1

    const-string v2, "active"

    const-string v3, "detail"

    invoke-virtual {p1, v1, v2, v3}, Lcom/dragon/read/pages/detail/BookDetailHelper;->downloadAfterAddPrivilege(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V

    goto :goto_ce
```
然后我们搜索7f06020d,发现case 2
```smali
    :pswitch_64#pswitch_64就是case 2
```
然后我们就可以把case 1改为case 2,把case 2改为case 1
```smali
    #原APP的smali代码以及注释
    .packed-switch 0x0 ##case区域,从0开始,依次递增
      :pswitch_bf #JAVA中的case 0
      :pswitch_ab #JAVA中的case 1
      :pswitch_64 #JAVA中的case 2
    .end packed-switch
```
修改后为
```smali
    #修改后的smali代码以及注释
    .packed-switch 0x0 ##case区域,从0开始,依次递增
      :pswitch_bf #JAVA中的case 0
      :pswitch_64 #JAVA中的case 1
      :pswitch_ab #JAVA中的case 2
    .end packed-switch
```
再转换下,查看JAVA:
```java
                switch (a.z().h) {
                  case 0:
                        NewDetailFragment.k(this.c, this.b);
                        break;
                  case 2:/* 之前这给分支是1 我们通过修改SMALI之后变成了2 */
                        NewDetailFragment.s(this.c).downloadAfterAddPrivilege(NewDetailFragment.d(this.c), "active", "detail");
                        break;
                  case 1:/* 之前这给分支是2 我们通过修改SMALI之后变成了1 */
                        q qVar = new q(this.c.getActivity());
                        qVar.d(this.c.getString(2131100173));
                        qVar.a(this.c.getString(2131100171), new 1(this));
                        qVar.c(this.c.getString(2131100170));
                        qVar.a().show();
                        NewDetailFragment.s(this.c).reportInspireVideoEvent("show_ad_enter");
                        break;
                  default:
                        break;
                }
```
然后我们保存后,签名,安装APP后再次尝试下载,结果发现还是不行。
但是当时搜索7f06020d的时候是有两条的,那我们把a$29的另一条也按照上述方法修改case 1和2之后签名安装APP。之后发现可以跳过看视频就能下载小说了。
【需要注意的是:a$29和NewDetailFragment$40中的要跳转的地址pswitch_XX是不太一样的】

---

## 成果


# 样品+成品下载地址:
番茄3.8 提取码为:52pj地址:https://wwa.lanzouj.com/b03za5x1i
番茄3.8 提取码为:52pj地址:https://wwa.lanzoui.com/b03za5x1i
注意!MT的签名和之前的签名不一样.所以不能不卸载
但是卸载可能会导致之前下载的书和数据丢失

闷骚小贱男 发表于 2021-1-14 18:37

a517753728 发表于 2021-1-14 17:45
论坛里有很多大神发过各种看小说的app 都还不错为啥不尝试一下呢不过 还得为楼主点赞自己动手丰衣足 ...
{:1_907:}我也是遇见了就研究研究..万一以后也能有类似的事呢..举一反三..之前我就没弄过类似case的反编译
而且..我要是想看小说的话..我也可以自己抓资源..自己写APP的..{:1_907:}

a747030886 发表于 2021-1-14 12:39

那个看一会需要退出后台的问题解决了吗?

xiaoone 发表于 2021-1-14 12:40

消灭0回复

闷骚小贱男 发表于 2021-1-14 12:41

a747030886 发表于 2021-1-14 12:39
那个看一会需要退出后台的问题解决了吗?

...我还真没怎么用过..我下载了一个小说..还没开始看呢./.有空了看下

lswdla 发表于 2021-1-14 12:49

我没卸载,直接安装,显示签名失败

闷骚小贱男 发表于 2021-1-14 12:50

lswdla 发表于 2021-1-14 12:49
我没卸载,直接安装,显示签名失败

{:1_907:}MT的签名和之前的签名不一样.所以不能不卸载.但是卸载可能会导致之前下载的书和数据丢失

rbj520 发表于 2021-1-14 13:07

謝謝分享{:1_921:}

lifz888 发表于 2021-1-14 13:08

非常好的应用实例,支持分享

dongse 发表于 2021-1-14 13:17

xingdh 发表于 2021-1-14 13:27

十分好用,非常感谢,安卓模拟器上也很OK,因为手机是IOS的,没法安装。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 番茄小说要看视频才能下载离线阅读?嫩他