吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5307|回复: 21
收起左侧

[Android 原创] 【新手教程】.field public ×赋值 赋值规则 实战必学教程 构建函数

[复制链接]
芽衣 发表于 2020-7-20 10:28
本帖最后由 417788939 于 2020-7-21 11:33 编辑

软件以知音漫客v5.6.7为例,现在无壳了。比较简单,不加阅读权限了。知音漫客完整版教程:https://www.52pojie.cn/thread-1156372-1-1.html







之前我发的解锁漫画教程是批量赋值的,用正则表达式,对于一些人来说正则看得眼花缭乱,非常的不便。能不能直接用0x1或者0x0来代替呢?答案是可以的。


1.png


如上图,解锁漫画关键字是isRecharge:Z,搜一下非常多,而且单独赋值一个地方没有用。顺着路径打开ChapterListItemBean这个文件看看是什么情况。




全文代码如下:
.class public Lcn/zymk/comic/model/ChapterListItemBean;
.super Ljava/lang/Object;
.source "ChapterListItemBean.java"

# interfaces
.implements Ljava/io/Serializable;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcn/zymk/comic/model/ChapterListItemBean$ChapterImageBean;
    }
.end annotation


# static fields
.field private static final serialVersionUID:J = -0x1dcf11e7771e8b5fL


# instance fields
.field public appVersion:Ljava/lang/String;

.field public chapter_addr:Ljava/lang/String;

.field public chapter_id:Ljava/lang/String;

.field public chapter_image:Lcn/zymk/comic/model/ChapterListItemBean$ChapterImageBean;

.field public chapter_name:Ljava/lang/String;

.field public chapter_title:Ljava/lang/String;【模板】

.field public chapter_type:I

.field public create_time:J

.field public downFolder:Ljava/lang/String;

.field public download_price:I

.field public end_var:I

.field public isDown:Z

.field public isRead:Z

.field public isRecharge:Z【想办法对这个赋值】

.field public paths:Ljava/lang/String;

.field public position:I

.field public price:I

.field public source_url:Ljava/lang/String;

.field public start_var:I

.field public tempPosition:I

.field public urls:Ljava/lang/String;

.field public webview:Ljava/lang/String;


# direct methods
.method public constructor <init>()V【反射大法】
    .locals 1

    .line 1
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    const-string v0, ""【v0寄存器里面包含字符串】

    .line 2
    iput-object v0, p0, Lcn/zymk/comic/model/ChapterListItemBean;->chapter_title:Ljava/lang/String;【参考上方模板,输入(iput-object)的类型是字符串(String)】

    return-void
.end method
smali代码里面有【String】的,应该知道这是字符串类型,不能赋值0或者1,而是赋值const-string vx, "",否则可能会导致崩溃。一般来说1代表真、对、是、true,而0代表假、错、否、false。比如一些app反编译后有isvip方法,赋值1意思就是该用户属于vip会员,0就是该用户不属于会员。知音漫客破解免付费阅读需要对.field public isRecharge:Z赋值1,但是可不能直接.field public isRecharge:Z=1或者.field public isRecharge:Z=true,这个是无法运行的。







构造函数基本框架如下,可以参照目标文件的写法。
[Java] 纯文本查看 复制代码
.method public constructor <init>()V
    

    return-void
.end method



所以对isRecharge:Z赋值,写法参考如下:
.method public constructor <init>()V
    .registers 4【注意这个,少了可能闪退异常,具体自行测试】

    .line 1
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V【invoke-direct:调用】

    const-string v0, ""

    .line 2
    iput-object v0, p0, Lcn/zymk/comic/model/ChapterListItemBean;->chapter_title:Ljava/lang/String;

   #以下是在原基础上添加的代码

    const/4 v2, 0x1【先对某个寄存器赋值,建议v(x+2),以后这个就是老巢】

    iput-boolean v2, p0, Lcn/zymk/comic/model/ChapterListItemBean;->isRecharge:Z【iput-boolean:把v2的值置入isRecharge这个成员变量中。p0照搬上面调用,然后紧跟文件路径,不能用点,只能斜杠】

    return-void
.end method
然后回编译测试一下效果。可以发现漫画的锁头已经全部打开了
补充一下registers怎么数,不知道的情况下改大绝对不会错。比如一个方法里面有v1和v5,他是从v1~v5,有个跨度的,所以registers是5,不是2。


1.png


成员变量格式是:

   .field public/private [static] [final] varName:<类型>。

对于不同的成员变量也有不同的指令。

一般来说,

  获取的指令有:iget、sget、iget-boolean、sget-boolean、iget-object、sget-object等。

  操作的指令有:iput、sput、iput-boolean、sput-boolean、iput-object、sput-object等。

没有“-object”后缀的表示操作的成员变量对象是基本数据类型,带“-object”表示操作的成员变量是对象类型,特别地,boolean类型则使用带“-boolean”的指令操作。


同理免登陆开启vip,根据以上规则,代码建议使用iput。


1.png


举例:
iput v2, p0, Lcn/zymk/comic/model/UserBean;->isvip:I
虽然没有点亮图标但是功能可以用的,因为现在更新了以后有些不同。






这个知音漫客app更新还挺快的,每次都说修复bug,也不知道是什么问题。但是我逆向发现广告商变多了,更新内容应该是新增广告植入吧…… 比如新增了快手开屏广告。
实质性的改变并没有,比如蛋疼的移动网络提示,每次都会弹出,而且无法关闭。以前还有网络缓慢提示,现在有不再提示按钮了。

免费评分

参与人数 7吾爱币 +14 热心值 +7 收起 理由
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
神奇星星果 + 1 热心回复!
stars-one + 2 + 1 学习了,我一般改get方法
偶尔.c + 1 + 1 nb
sunnylds7 + 1 + 1 热心回复!
正己 + 2 + 1 高产呀你
momo2021 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

涛之雨 发表于 2020-7-21 06:33
本帖最后由 涛之雨 于 2020-7-21 06:38 编辑

关于注册寄存器,有条件的可以看一下谷歌官方的权威说明
https://code.google.com/p/smali/wiki/Registers
没有条件可以看一下别人转载的,比如
Smali语法:Registers(寄存器)
注:条件指上网方式和英语阅读水平。
当然如果有上网条件也可以使用在线翻译

免费评分

参与人数 1吾爱币 +1 收起 理由
芽衣 + 1 投币

查看全部评分

正己 发表于 2020-7-20 11:59
偶尔.c 发表于 2020-7-20 11:07
楼主能说说为什么寄存器是4吗

我先替他回答,这个方法内有三个寄存器,分别是v0,p0,v2,写register 3也是可以的,可以多写,比如,写但是不能少于本事身寄存器的数量,不然就会报错,也不知道说得对不对
 楼主| 芽衣 发表于 2020-7-20 12:04
正己 发表于 2020-7-20 11:59
我先替他回答,这个方法内有三个寄存器,分别是v0,p0,v2,写register 3也是可以的,可以多写,比如,写 ...

是4个……最低了



v0~v2,这已经是3个了。我用的是v2不是v1。
丁大胜023 发表于 2020-7-20 10:51
楼主上午好!请问搞APP需要学习什么计算机语言?Java吗?
偶尔.c 发表于 2020-7-20 11:01
牛逼牛逼
偶尔.c 发表于 2020-7-20 11:07
楼主能说说为什么寄存器是4吗
az12az 发表于 2020-7-20 11:33
太高深了,不懂。
hkdg009 发表于 2020-7-20 11:54
支持下!!!!
 楼主| 芽衣 发表于 2020-7-20 12:02
偶尔.c 发表于 2020-7-20 11:07
楼主能说说为什么寄存器是4吗



低于4会导致异常,无法加载漫画。你数一下p和v
正己 发表于 2020-7-20 12:08

啊哈哈哈哈,尴尬了,不过不要紧,学到了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表