谷歌高分软件 吾绘笔记 破解教程

查看 105|回复 10
作者:芽衣   
吾绘笔记是一款功能丰富的一体化应用程序,集合了笔记、写作、思维导图、待办事项清单、手写、素描、绘图和绘画等多项功能。无论您是学生、教师、艺术家、设计师、工程师还是其他领域的人员,吾绘笔记都提供了强大的工具,旨在激发您的想象力和创造力。
谷歌4.8高分软件,这软件破解难度不大,都是老生常谈的代码,破解思路和之前发的滴答清单差不多。总体上适合新手,看完正己的教程应该是会的。
软件教程用的是7.3.1版本,谷歌下载下来的是xapk格式,用mt管理器直接转换成apk安装。

首先重签名,不出意外的闪退了。还是老生常谈的signatures,dex和so都有校验,处理方式比较简单。
先看dex,校验位于com/dragonnest/my/i1/s,下图红框代码全删。


1.png (94.11 KB, 下载次数: 0)
下载附件
2025-5-22 10:14 上传

这个类在干什么有兴趣的可以自行查看。
接下来是so,发现是libdrawnote、libnotedraw罢工了。ida打开他们,我发现这两个so不仅连名字都很像,代码还很像,不知道为什么不合在一起。
先看libdrawnote,校验位于JNI_OnLoad。代码片段如下:
  v14 = _JNIEnv::CallObjectMethod(v3, v11, v13);
  v15 = v3->functions->GetObjectClass(&v3->functions, v14);
  v16 = v3->functions->GetFieldID(&v3->functions, v15, "signatures", "[Landroid/content/pm/Signature;");
  v17 = v3->functions->GetObjectField(&v3->functions, v14, v16);
  v18 = v3->functions->GetObjectArrayElement(&v3->functions, v17, 0LL);
  v19 = v3->functions->GetObjectClass(&v3->functions, v18);
  v20 = v3->functions->GetMethodID(&v3->functions, v19, "toCharsString", "()Ljava/lang/String;");
  v21 = _JNIEnv::CallObjectMethod(v3, v18, v20);
  v22 = v3->functions->GetStringUTFChars(&v3->functions, v21, 0LL);
  if ( *v22 == 51
    && v22[1] == 48
    && v22[2] == 56
    && v22[3] == 50
    && v22[4] == 48
    && v22[879] == 49
    && v22[880] == 51
    && v22[881] == 56
    && v22[882] == 97
    && v22[883] == 97
    && v22[1340] == 99
    && v22[1341] == 102
    && v22[1342] == 55
    && v22[1343] == 99
    && v22[1344] == 52
    || v22[879] == 50
    && v22[880] == 98
    && v22[881] == 101
    && v22[882] == 50
    && v22[883] == 98
    && v22[1757] == 54
    && v22[1756] == 51
    && v22[1755] == 102
    && v22[1754] == 99
    && v22[1753] == 51 )
  {
    a2 = 1;
LABEL_37:
    if ( !e6(v3, v11) )
    {
LABEL_8:
      if ( a2 == 1 )
        k4(v36[0], "com/dragonnest/app/home/folder/BaseFolderWrapperFragment", "h", 0LL);
      goto LABEL_39;
    }
如果签名值是正确的,应该运行到a2 = 1(loc_10628)这个地方,所以直接让他一开始就跳下来好了。


1.png (72.16 KB, 下载次数: 0)
下载附件
2025-5-22 10:34 上传

另一个同理,修改方法完全一致。


1.png (98.99 KB, 下载次数: 0)
下载附件
2025-5-22 10:38 上传

回填修改好的so,现在可以进入软件了。高级版破解还是老套路,arsc搜索字符串高级版,有几个结果,复制“已解锁高级版”的id,在dex内搜索,有几个结果,点进去,发现上方有个跳转。


1.png (106 KB, 下载次数: 0)
下载附件
2025-5-22 10:47 上传

很明显,上方应该返回1才能解锁高级版。跟进Lcom/dragonnest/app/s0;->W()Z,直接写死返回值即可。在我编辑这个帖子的时候,结果它突然闪退了
为了排除问题,我退回了备份文件,然而并没有异常。刚才闪退的原因也比较明显了,这种套路处理起来也比较简单,找一下他的调用即可。直接搜索结果比较多,建议打印调用。


1.png (72.55 KB, 下载次数: 0)
下载附件
2025-5-22 11:00 上传

相似的教程我记得发过几篇,和最近的帖子“滴答清单”原理差不多。
1、搜索字符串“Qsijjafc_Rdk”,上方的v0赋值0。
[Asm] 纯文本查看 复制代码    invoke-virtual {v0}, Lcom/dragonnest/app/s0;->W()Z
    move-result v0
    const/4 v0, 0x0
    invoke-static {v0}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
    move-result-object v0
    invoke-virtual {v2, v0}, Landroidx/lifecycle/r;->q(Ljava/lang/Object;)V
    sput-object v2, Lcom/dragonnest/app/s0;->r:Landroidx/lifecycle/r;
    new-instance v0, Le/d/b/a/g;
    const-string v2, "Qsijjafc_Rdk`"
    invoke-static {v2}, Lcom/dragonnest/my/i1/w;->a(Ljava/lang/String;)Ljava/lang/String;
    move-result-object v4
2、同类中有个方法名d0()V,代码全删。
[Asm] 纯文本查看 复制代码.method public final d0()V
    .registers 3
    .line 1
    invoke-virtual {p0}, Lcom/dragonnest/app/s0;->W()Z
    move-result v0
    if-eqz v0, :cond_1c
    const/4 v0, 0x0
    .line 2
    invoke-virtual {p0, v0}, Lcom/dragonnest/app/s0;->E0(Z)V
    .line 3
    sget-object v0, Lcom/dragonnest/app/s0;->r:Landroidx/lifecycle/r;
    invoke-virtual {p0}, Lcom/dragonnest/app/s0;->W()Z
    move-result v1
    invoke-static {v1}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
    move-result-object v1
    invoke-virtual {v0, v1}, Landroidx/lifecycle/r;->q(Ljava/lang/Object;)V
    const-wide/16 v0, -0x1
    .line 4
    invoke-virtual {p0, v0, v1}, Lcom/dragonnest/app/s0;->D0(J)V
    :cond_1c
    return-void
.end method
你也许已经发现猫腻了,如果硬改返回值,第一次启动的时候它在下面偷偷放了个0。
3、搜索Ljava/lang/System;->exit(I)V,再次搜索排除结果,只有一个地方。位于com/dragonnest/app/home/component/HomeTitleBarComponent,逻辑也比较简单,不再复述。
[Asm] 纯文本查看 复制代码.method static final C()V
    .registers 5
    .line 1
    sget-object v0, Lcom/dragonnest/app/s0;->a:Lcom/dragonnest/app/s0;
    invoke-virtual {v0}, Lcom/dragonnest/app/s0;->W()Z
    move-result v1
    const/4 v2, 0x0
    .line 2
    invoke-virtual {v0, v2}, Lcom/dragonnest/app/s0;->z0(Z)V
    .line 3
    invoke-virtual {v0}, Lcom/dragonnest/app/s0;->W()Z
    move-result v0
    if-eqz v0, :cond_42
    .line 4
    :try_start_10
    sget-object v0, Le/d/b/a/o;->c:Le/d/b/a/o;
    invoke-virtual {v0}, Le/d/b/a/o;->a()Landroid/content/Context;
    move-result-object v0
    .line 5
    invoke-virtual {v0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
    move-result-object v3
    .line 6
    invoke-virtual {v0}, Landroid/content/Context;->getPackageName()Ljava/lang/String;
    move-result-object v4
    .line 7
    invoke-virtual {v3, v4}, Landroid/content/pm/PackageManager;->getLaunchIntentForPackage(Ljava/lang/String;)Landroid/content/Intent;
    move-result-object v3
    .line 8
    invoke-static {v3}, Lh/g0/d/k;->d(Ljava/lang/Object;)V
    const/high16 v4, 0x4000000
    invoke-virtual {v3, v4}, Landroid/content/Intent;->addFlags(I)Landroid/content/Intent;
    const v4, 0x8000
    .line 9
    invoke-virtual {v3, v4}, Landroid/content/Intent;->addFlags(I)Landroid/content/Intent;
    .line 10
    invoke-virtual {v0, v3}, Landroid/content/Context;->startActivity(Landroid/content/Intent;)V
    .line 11
    invoke-static {}, Landroid/os/Process;->myPid()I
    move-result v0
    invoke-static {v0}, Landroid/os/Process;->killProcess(I)V
    .line 12
    invoke-static {v2}, Ljava/lang/System;->exit(I)V
    :try_end_3d
    .catchall {:try_start_10 .. :try_end_3d} :catchall_3e
    goto :goto_42
    :catchall_3e
    move-exception v0
    .line 13
    invoke-virtual {v0}, Ljava/lang/Throwable;->printStackTrace()V
    .line 14
    :cond_42
    :goto_42
    sget-object v0, Lcom/dragonnest/app/s0;->a:Lcom/dragonnest/app/s0;
    invoke-virtual {v0, v1}, Lcom/dragonnest/app/s0;->z0(Z)V
    return-void
.end method

[Asm] 纯文本查看 复制代码.method static final C()V
    .registers 5
    .line 1
    sget-object v0, Lcom/dragonnest/app/s0;->a:Lcom/dragonnest/app/s0;
    const/4 v2, 0x0
    invoke-virtual {v0, v2}, Lcom/dragonnest/app/s0;->z0(Z)V
    return-void
.end method
我试了一下,应该是正常了的。
这些检测套路换汤不换药,没什么难度,跟下去肯定能找到问题所在,对于新手来说是个不错的练习软件。当然了,有爱还是支持正版,谷歌4.8分可不是吹的

下载次数, 代码

moshouhot   

问个问题,为什么我用IDA 8.3 绿色版 提示:
Sorry, you do not have a decompiler for the current file.You can decompile code for the following processor(s):x64, x86
列明   

给你点个赞!,都是操作,照着教程可以做
happy追风少年   

牙医出品有学习价值
jianfengjx   

智齿实操练手!
larryliao   

膜拜大佬,佩服的一塌涂地~
sqzh   

看样子还是复杂啊
15050257843   

厉害
膜拜大佬,佩服的一塌涂地~
qinimg   


happy追风少年 发表于 2025-5-22 12:53
牙医出品有学习价值

出品有学习价值
heyang1743   

膜拜大佬!学习了!
您需要登录后才可以回帖 登录 | 立即注册

返回顶部