【新手教程】.field public ×赋值 赋值规则 实战必学教程 构建函数
本帖最后由 417788939 于 2020-7-21 11:33 编辑软件以知音漫客v5.6.7为例,现在无壳了。比较简单,不加阅读权限了。知音漫客完整版教程:https://www.52pojie.cn/thread-1156372-1-1.html
https://static.52pojie.cn/static/image/hrline/4.gif
之前我发的解锁漫画教程是批量赋值的,用正则表达式,对于一些人来说正则看得眼花缭乱,非常的不便。能不能直接用0x1或者0x0来代替呢?答案是可以的。
如上图,解锁漫画关键字是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 methodsmali代码里面有【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,这个是无法运行的。
https://static.52pojie.cn/static/image/hrline/4.gif
构造函数基本框架如下,可以参照目标文件的写法。
.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然后回编译测试一下效果。可以发现漫画的锁头已经全部打开了{:17_1073:}
补充一下registers怎么数,不知道的情况下改大绝对不会错。比如一个方法里面有v1和v5,他是从v1~v5,有个跨度的,所以registers是5,不是2。
成员变量格式是:
.field public/private 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”的指令操作。
https://static.52pojie.cn/static/image/hrline/4.gif
同理免登陆开启vip,根据以上规则,代码建议使用iput。
举例:
iput v2, p0, Lcn/zymk/comic/model/UserBean;->isvip:I虽然没有点亮图标但是功能可以用的,因为现在更新了以后有些不同。
https://static.52pojie.cn/static/image/hrline/4.gif
这个知音漫客app更新还挺快的,每次都说修复bug,也不知道是什么问题。但是我逆向发现广告商变多了,更新内容应该是新增广告植入吧……{:17_1077:} 比如新增了快手开屏广告。
实质性的改变并没有,比如蛋疼的移动网络提示,每次都会弹出,而且无法关闭。以前还有网络缓慢提示,现在有不再提示按钮了。
本帖最后由 涛之雨 于 2020-7-21 06:38 编辑
关于注册寄存器,有条件的可以看一下谷歌官方的权威说明
https://code.google.com/p/smali/wiki/Registers
没有条件可以看一下别人转载的,比如
Smali语法:Registers(寄存器)
注:条件指上网方式和英语阅读水平。
当然如果有上网条件也可以使用在线翻译 偶尔.c 发表于 2020-7-20 11:07
楼主能说说为什么寄存器是4吗
我先替他回答,这个方法内有三个寄存器,分别是v0,p0,v2,写register 3也是可以的,可以多写,比如,写但是不能少于本事身寄存器的数量,不然就会报错,也不知道说得对不对 正己 发表于 2020-7-20 11:59
我先替他回答,这个方法内有三个寄存器,分别是v0,p0,v2,写register 3也是可以的,可以多写,比如,写 ...
是4个……最低了{:17_1072:}
v0~v2,这已经是3个了。我用的是v2不是v1。 楼主上午好!请问搞APP需要学习什么计算机语言?Java吗? 牛逼牛逼 楼主能说说为什么寄存器是4吗 太高深了,不懂。 支持下!!!! 偶尔.c 发表于 2020-7-20 11:07
楼主能说说为什么寄存器是4吗
低于4会导致异常,无法加载漫画。你数一下p和v{:17_1068:} 417788939 发表于 2020-7-20 12:04
是4个……最低了
啊哈哈哈哈,尴尬了,不过不要紧,学到了{:17_1068:}