熊猫看书 等几款小说软件去保护教程

查看 163|回复 11
作者:芽衣   
熊猫看书可满足大部分用户的手机阅读习惯:自适应中文编码、图文智能排版系统大幅度减少乱码的出现;使用目录、翻页、滚屏、跳转或文内搜索五大功能迅速定位,让阅读更流畅;收藏和历史简化了用户浏览记录的烦恼;阅读中能随时调出菜单,设有书签、百分比跳转、亮度调节、阅读背景更换等功能,提供最个性化阅读需求。
使用工具
1、IDA32
2、AS
3、反编译工具,MT管理器
本来只写了熊猫看书,但准备发表的时候感觉只有一种软件帖子篇幅太小了,就找了另外两款没有加固的软件充数,所以一共有3款软件,分别是熊猫、纵横、番茄。MOD软件之前要先去掉自带的保护,广告的话都是常见的穿山甲、腾讯、百度等,这类的教程发太多了,可以自己找一下论坛。
禁止转载本帖内容
,一些博客怎么老喜欢转我的帖子,最主要的是还分类在原创标签到处引流。

一、熊猫看书9.4.1.01
跟下载评论一样,差不多是个流氓软件了。我刚安装,想点击开屏广告的跳过按钮,点几次都点不到,结果打开京东购物APP。
主要是那个按钮过小,而且太靠近顶端,容易和状态栏冲突,点错就会打开购物软件了。换了另一部手机,状态栏比较高,就容易点。
这软件我用mt管理器一键hook失败,那就不用hook了,来看一下怎么回事。
还是老生常谈的
>signatures
,dex内直接搜索这个代码,有很多个结果,一些广告三方sdk就不要理了。
反编译后查看AndroidManifest,入口名是android:name="com.baidu.shucheng91.Application",定位到结果com/baidu/shucheng91/util/g。
[Java] 纯文本查看 复制代码package com.baidu.shucheng91.util;
import android.content.Context;
/* compiled from: CheckUtil */
public class g {
    public static byte[] a = {-26, -126, -88, -27, -82, -119, -24, -93, -123, -26, -104, -81, -25, -101, -105, -25, -119, -120, -27, -70, -108, -25, -108, -88, -17, -68, -116, -24, -81, -73, -27, -82, -119, -24, -93, -123, -27, -82, -104, -26, -106, -71, -25, -119, -120, -26, -100, -84};
    public static int b = 1654413599;
    public static int a(Context context) {
        try {
            return context.getPackageManager().getPackageInfo(context.getPackageName(), 64).signatures[0].hashCode();
        } catch (Exception e) {
            e.printStackTrace();
            return 0;
        }
    }
}
其原理就是获取签名的哈希值,然后对比b,如果不一致就弹出a提示。b的值smali代码已经给出,直接写死就可以了。我本以为这样就完成了,结果安装后还是弹出盗版提示。
回到smali代码,有一句sput-object v0, Lcom/baidu/shucheng91/util/g;->a:[B,dex继续搜索Lcom/baidu/shucheng91/util/g;->a:[B,主要关注sget-object,这些成员变量都是比较好分析的。定位到com/baidu/shucheng/ui/main/MainActivity$l,然后查找是哪个地方调用了这里。


1.png (66.44 KB, 下载次数: 0)
下载附件
2022-7-20 18:15 上传

部分代码如下:
[Java] 纯文本查看 复制代码    invoke-static {v0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J
    move-result-wide v0
    sput-wide v0, Lcom/baidu/shucheng/ui/main/MainActivity;->K:J
    const-wide/32 v3, 0xa6d833
    sub-long/2addr v0, v3
    .line 40
    sput-wide v0, Lcom/baidu/shucheng/ui/main/MainActivity;->K:J
    :cond_6
    const-string v0, "classes.dex"
    .line 41
    invoke-virtual {v6, v0}, Ljava/util/zip/ZipFile;->getEntry(Ljava/lang/String;)Ljava/util/zip/ZipEntry;
    move-result-object v0
    .line 42
    invoke-virtual {v0}, Ljava/util/zip/ZipEntry;->getCrc()J
    move-result-wide v0
    sget-wide v3, Lcom/baidu/shucheng/ui/main/MainActivity;->K:J
    cmp-long v5, v0, v3
    if-eqz v5, :cond_7
    .line 43
    new-instance v0, Landroid/os/Handler;
    invoke-static {}, Landroid/os/Looper;->getMainLooper()Landroid/os/Looper;
    move-result-object v1
    invoke-direct {v0, v1}, Landroid/os/Handler;->(Landroid/os/Looper;)V
    new-instance v1, Lcom/baidu/shucheng/ui/main/MainActivity$l;
    invoke-direct {v1, p0}, Lcom/baidu/shucheng/ui/main/MainActivity$l;->(Lcom/baidu/shucheng/ui/main/MainActivity;)V
    invoke-virtual {v0, v1}, Landroid/os/Handler;->post(Ljava/lang/Runnable;)Z
这里读取了压缩包内的classes.dex值,用来判断(
cmp-long v5, v0, v3
)是否被修改过。目的就是防止你hook或者修改了dex代码。所以先把第一个dex拉出来备份,用一键过签,再把第一个dex放回去,hook才会成功。原判断if-eqz,改成if-nez即可绕过检测。
二、纵横小说
直接签名后安装卡死闪退,还是直接搜索>signatures,发现是校验签名哈希值。


1.jpg (86.69 KB, 下载次数: 1)
下载附件
2022-7-20 18:39 上传

现在MT管理器支持查看哈希值,方便许多。直接把哈希值写死就可以解决卡屏问题了。


2.jpg (84.24 KB, 下载次数: 0)
下载附件
2022-7-20 18:40 上传

三、番茄小说5.3.9.32


1.jpg (133.11 KB, 下载次数: 0)
下载附件
2022-7-20 18:47 上传

直接重签名后提示盗版,同样hook无效。ida加载libmetasec_ml,修改如下图的跳转,BEQ改成
BNE
指令(静态地址227e0)。


1.jpg (124.88 KB, 下载次数: 0)
下载附件
2022-7-20 19:08 上传

再编写一个Java,代码可自行思考:
import android.content.Context;
import java.io.File;
public class y {
    public static void a(Context context) {
        File xml = new File("data/data/com.dragon.read/shared_prefs", "applog_stats.xml");
        if(xml.exists()) {
            xml.delete();
        }
    }
}
可以得到smali:
.class public Ly;
.super Ljava/lang/Object;
.source "y.java"
# direct methods
.method public constructor ()V
    .registers 1
    .prologue
    .line 4
    invoke-direct {p0}, Ljava/lang/Object;->()V
    return-void
.end method
.method public static a(Landroid/content/Context;)V
    .registers 4
    .param p0, "context"    # Landroid/content/Context;
    .prologue
    .line 7
    new-instance v0, Ljava/io/File;
    const-string v1, "data/data/com.dragon.read/shared_prefs"
    const-string v2, "applog_stats.xml"
    invoke-direct {v0, v1, v2}, Ljava/io/File;->(Ljava/lang/String;Ljava/lang/String;)V
    .line 8
    .local v0, "xml":Ljava/io/File;
    invoke-virtual {v0}, Ljava/io/File;->exists()Z
    move-result v1
    if-eqz v1, :cond_12
    .line 9
    invoke-virtual {v0}, Ljava/io/File;->delete()Z
    .line 11
    :cond_12
    return-void
.end method
利用MT管理器快速添加到一个dex,然后在入口处(
com.dragon.read.app.MainApplication
)和阅读界面(
com.dragon.read.reader.ReaderActivity
)调用这个代码。
[Java] 纯文本查看 复制代码invoke-static {p0}, Ly;->a(Landroid/content/Context;)V
.method public onCreate(Landroid/os/Bundle;)V
    .registers 13
    .prologue
    invoke-static {p0}, Ly;->a(Landroid/content/Context;)V
    const/4 v0, 0x1
    const-string v1, "com.dragon.read.reader.ReaderActivity"
    const-string v2, "onCreate"
    invoke-static {v1, v2, v0}, Lcom/bytedance/apm/agent/v2/instrumentation/ActivityAgent;->onTrace(Ljava/lang/String;Ljava/lang/String;Z)V
    new-array v3, v0, [Ljava/lang/Object;
.method public attachBaseContext(Landroid/content/Context;)V
    .registers 4
    invoke-static {p0}, Ly;->a(Landroid/content/Context;)V
    const-string v0, "attachBaseContext"
    const/4 v1, 0x1
    invoke-static {v0, v1}, Lcom/bytedance/apm/agent/v2/instrumentation/AppAgent;->onTrace(Ljava/lang/String;Z)V
    invoke-super {p0, p1}, Lcom/dragon/read/app/AbsApplication;->attachBaseContext(Landroid/content/Context;)V
    const/4 p1, 0x0
    invoke-static {v0, p1}, Lcom/bytedance/apm/agent/v2/instrumentation/AppAgent;->onTrace(Ljava/lang/String;Z)V
    return-void
.end method
主要目的是干扰APP获取设备信息,覆盖安装后就不会提示盗版了,如果你觉得删除太频繁的话可以自己写个定时的,每隔多少天删一次,这里我就不示范了。
但还有个问题是福利和搜索不能用,实际上这里是官方验证签名信息,把签名值对比结果写到dex里面就可以正常使用搜索和福利功能,在哪我不说了,为了那几个金币没必要,想省事可以挂个hook。如果不去掉这个验证,后面是否会出现盗版信息我也不清楚,毕竟这两个软件都是临时增加的。

熊猫, 代码

lforl   

@芽衣 感谢兄
兄的中国象棋修改版正在用。
能否劳烦兄再出一个替换掉棋盘背景的版本,
就是棋盘上下方,
[color=]加上123456789 的编号
(如下图),
便于对照纸书棋谱,把玩。
此apk乃完美神器也,多谢!


中国象棋12345.jpg (48.49 KB, 下载次数: 0)
下载附件
2022-12-4 10:08 上传



棋谱12345.jpg (171.74 KB, 下载次数: 0)
下载附件
2022-12-4 10:12 上传

https://www.52pojie.cn/forum.php?mod=viewthread&tid=1597961
兄的原贴不能回复,冒昧来此跟帖。
官网貌似也出了1.80(文本写1.78,实际apk好像更新了)
http://www.cnvcs.com/
多谢
无闻无问   


芽衣 发表于 2022-7-24 11:57
https://github.com/daisixuan/hook_ArtMethod_RegisterNative

这个是java层与so对应方法注册
我意思问大佬是抓包,提示信息,弹窗,还是用其它方法一步步追踪确定盗版验证在这个so的,我是在研究畅听,发现盗版提示信息都是服务器返回,本地找不到…
搞了很久,没找到畅听的盗版验证在哪个so…
故问问,看看能不能从番茄小说中找到番茄畅听的签名验证地方…
谢谢啦
atingue   

小白表示,看原理很简单,实操起来一脸懵逼
lianquke   

芽衣大佬
lianquke   

大佬干扰获取设备信息的方法和我异曲同工,我是干扰发送信息
wjk199511140034   

感谢分享
芽衣
OP
  


lianquke 发表于 2022-7-20 19:58
大佬干扰获取设备信息的方法和我异曲同工,我是干扰发送信息

是这样嘛
pata   

谢谢!学习了。
大大连连   

膜拜大神,太厉害了
您需要登录后才可以回帖 登录 | 立即注册