吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 19346|回复: 86
收起左侧

[Android 原创] 【新手教程】安卓逆向之时间赋值 时间戳修改 会员vip时间任意修改 时间转换

    [复制链接]
芽衣 发表于 2020-7-13 12:00
本帖最后由 417788939 于 2020-7-13 17:21 编辑

不适合加固、混淆的app,对于新手来说难度过高




安卓时间修改对于破解一些本地验证的app很好用,在线的没辙。一般来说大公司的app是在线验证的,因为这个貌似很消耗服务器资源,比如pixiv,有钱就是为所欲为,当然你也是 00.png
有不少软件有年费会员或者终身会员什么的,可以对关键地方进行赋值破解。本帖主要说明时间在smali里面的表达方法





找到老巢

反编译后一般搜索的方法名关键字有vip、isvip、endtime、starttime、getvip、userinfo、viptime等;字符串关键字有到期、剩余、开通、续费、isvip、非会员等,他也有可能加短杠【_】混在里面。最常见的是找res字符串的ID,这个用的比较多。具体怎么找,这个每个app逻辑都不一样,而且大多需要跳转,而且如果不熟悉英文……


找到vip计算时间的老巢之后,接下来就是赋值了。







进行赋值破解

在线时间戳转换:http://www.beijing-time.org/shijianchuo/

案例:https://www.52pojie.cn/thread-1218307-1-1.htmlhttps://www.52pojie.cn/thread-1211527-1-1.htmlhttps://www.52pojie.cn/thread-1193093-1-1.html

Unix时间戳简介:安卓里面的时间戳叫Unix时间戳,是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。有些apk打开以后里面的文件最后修改时间是1970年的,就是因为这个原因。大多数smali的时间戳要转换成16进制的毫秒才能使用。


对某一个方法的时间赋值,比如【const-wide v0, 0x3bb2b0c6018L】,会员到期时间就是2099年12月31日。那么3bb2b0c6018怎么来的呢?也就是(2099年12月31日-1970年1月1日)×365天×24小时×60分钟×60秒×1000毫秒,转换成16进制就大概是那个数了。那个单位L是long的意思,数值类型。


当然数值不是越大越好,如果涉及到运算就不能随意赋值了。


1.png


比如这款彩云天气app,对const-wide v6, 0x11840ad80L这个数值改大以后,本来是送2个月会员的,现在变成了20多天到期,而且重新登录也是20多天。改小时间越来越长,最终变成永久会员。如果把下面的判断if-ltz v5, :cond_1删掉他也是永久会员。【cmp-long vx, vy, vz。比较vy和vz的long值并在vx存入int型返回值(比较操作,如果第一个操作数大于第二个操作数返回正值;如果两者相等,返回0;如果第一个操作数小于第二个操作数,返回负值。)】




再比如https://www.52pojie.cn/thread-1218307-1-1.html
[Asm] 纯文本查看 复制代码
const-wide/16 v1,0x3e8

mul-long p0, p0, v1


计算的是中间这个p0的值,v1是乘数。原本v1是1000,改大以后倍率高了到期时间就会变得很恐怖。一般获取时间后会有计算代码,常用于数值转换。比如分钟转换小时。





获取手机系统时间固定smali代码(1970-01-01开始):
invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

move-result-wide v×
以后看见这行代码就知道他在获取系统时间了。然后下面一般会紧跟着计算代码,比如cmp-long、mul-long/2addr、div-int/2addr等,修改寄存器的数值对结果影响很大。

如果需要对时间进行运算,比如加减乘除,需要先对v(×+1)进行赋值,然后下一行再加入计算代码。

举例:系统时间加上1秒
.method public static wuaipojie()J
    .registers 4

    .prologue
    .line 11
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0【v0储存系统的时间】

    const-wide/16 v2, 0x3e8【对v2进行赋值,10进制为1000】

    add-long/2addr v0, v2【v0=v0+v2】

    return-wide v0【该方法返回v0的计算结果】
.end method

Java代码就是:
[Java] 纯文本查看 复制代码
public static long wuaipojie()
    {
        return System.currentTimeMillis() + 1000L;
    }





甚至可以写个又有判断又有乘除的代码:
.method public static wuaipojie()J
    .registers 4

    .prologue
    .line 11
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

    const-wide/32 v2, 0x60bbf54e

    cmp-long v0, v0, v2

    if-gez v0, :cond_10

    .line 12
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

    .line 14
    :goto_f
    return-wide v0

    :cond_10
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

    const-wide/16 v2, 0x34

    add-long/2addr v0, v2

    const-wide/16 v2, 0x2

    xor-long/2addr v0, v2

    goto :goto_f
.end method






免费评分

参与人数 32吾爱币 +30 热心值 +30 收起 理由
VainAlex + 1 鼓励转贴优秀软件安全工具和文档!
fei8255 + 1 + 1 谢谢@Thanks!
╰留个小板寸回 + 2 + 1 3BB2B0C6018L 能不能个公式
m21187122008 + 1 + 1 用心讨论,共获提升!
Baxy + 1 谢谢@Thanks!
一个安静的俗人 + 1 + 1 热心回复!
永昌 + 1 谢谢@Thanks!
参数 + 1 + 1 谢谢@Thanks!
q23262357 + 1 我很赞同!
away99 + 1 + 1 谢谢@Thanks!
feijizaifei + 1 + 1 用心讨论,共获提升!
wuwei118 + 1 + 1 用心讨论,共获提升!
国民小可人 + 1 + 1 用心讨论,共获提升!
xiuji + 1 + 1 热心回复!
CPSAndy + 1 + 1 谢谢@Thanks!
hectorhugo + 1 + 1 用心讨论,共获提升!
cnngtc + 3 + 1 加油
生有涯知无涯 + 1 + 1 我很赞同!
花の星月123 + 1 + 1 用心讨论,共获提升!
雨儿 + 1 + 1 我很赞同!
火林xyh + 1 + 1 我很赞同!
repobor + 1 + 1 我很赞同!
沫渃殇 + 1 谢谢@Thanks!
sunnylds7 + 1 + 1 热心回复!
caleb110 + 1 + 1 谢谢@Thanks!
52HLW + 2 + 1 用心讨论,共获提升!
heike39 + 1 我很赞同!
1113519447 + 1 + 1 学习了
魔道书生 + 1 + 1 我很赞同!
火车啦啦 + 1 鼓励转贴优秀软件安全工具和文档!
422413711 + 1 + 1 赶紧去试了一下QQ,砖快到期了楼主好人啊
UPC + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| 芽衣 发表于 2020-7-27 12:49
mitchzh 发表于 2020-7-27 09:10
请问如何解读这句代码,add-long/2addr v0, v2【v0=v0+v2】

这是smali语法。加法表示方法。

深入了解计算你得看书……
╰留个小板寸回 发表于 2020-8-25 15:52
对某一个方法的时间赋值,比如【const-wide v0, 0x3bb2b0c6018L】,会员到期时间就是2099年12月31日。那么3bb2b0c6018怎么来的呢?也就是(2099年12月31日-1970年1月1日)×365天×24小时×60分钟×60秒×1000毫秒,转换成16进制就大概是那个数了。那个单位L是long的意思,数值类型。  我按照这个公式算出来不对啊   
尼阿爸 发表于 2020-7-13 12:56
sunv52pojie 发表于 2020-7-13 13:21
感谢大神指点 辛苦!!
刀大喵 发表于 2020-7-13 13:46
很实用的知识
第一品霄 发表于 2020-7-13 13:48
学习一下了
小枫z 发表于 2020-7-13 14:10
学习一下
富春山居 发表于 2020-7-13 14:22
学习了!!
87901434 发表于 2020-7-13 14:59
谢谢。希望出一个合集让我们学习。
小人物241 发表于 2020-7-13 15:06
受教了,谢谢大神!
开心愉悦是心情 发表于 2020-7-13 15:10
谢谢大神😁😁😁
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-3-29 05:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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