吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8939|回复: 43
收起左侧

[Android 原创] 老菜鸟逆向某统计计算器

[复制链接]
ciker_li 发表于 2019-12-13 09:36
本帖最后由 ciker_li 于 2019-12-13 09:38 编辑

最近自学统计分析,在手机上随便下了一个统计计算器,开始感觉挺好用,没想到只能输入15以内数字,超过之后提示:“数据达到限制,免费版本你最多只能插入15个数值。购买专业版本可以插入无限个数值,此功能仅适用于专业版.你可以在Android市场和AndroidPit市场上买它.”
作为一个老宅男,怎么可能掏钱,只好捡起早已荒废多年的手艺,试试能不能pojie。
先拿出老工具,改之理,载入看看,还好没有加壳。
然后找提示string,“数据达到限制”

找到string

找到string


换到java编辑,根据string的name:limitFree,找到对应ID
改之理java截图00.jpg

在主函数里找到那个ID
改之理java截图01.jpg

可以看到这段函数主要就是判断是否超过15个字符,超了就弹出对话框,提示购买了
改之理java截图02.jpg

再回到smali编辑界面,找到那段函数,smali以前就没搞太明白,又赶紧复习了一下,简单能看懂了。

.method public onTextChanged(Ljava/lang/CharSequence;III)V
    .locals 11
    .param p1, "seq"    # Ljava/lang/CharSequence;
    .param p2, "start"    # I
    .param p3, "before"    # I
    .param p4, "count"    # I

    .prologue
    const/16 v10, 0xf       #这里设置数据长度限制,15个

    .line 279
    iget-object v8, p0, Lcom/cgollner/StatisticsCalculatorActivity;->dataInput:Landroid/widget/EditText;

    invoke-virtual {v8}, Landroid/widget/EditText;->getEditableText()Landroid/text/Editable;

    move-result-object v3

    .line 280
    .local v3, "editable1":Landroid/text/Editable;
    iget-object v8, p0, Lcom/cgollner/StatisticsCalculatorActivity;->dataInput2:Landroid/widget/EditText;

    invoke-virtual {v8}, Landroid/widget/EditText;->getEditableText()Landroid/text/Editable;

    move-result-object v4

    .line 281
    .local v4, "editable2":Landroid/text/Editable;
    invoke-direct {p0, v3}, Lcom/cgollner/StatisticsCalculatorActivity;->getValuesInput(Landroid/text/Editable;)Ljava/util/List;

    move-result-object v5

    .line 282
    .local v5, "list1":Ljava/util/List;, "Ljava/util/List<Ljava/lang/Double;>;"
    invoke-direct {p0, v4}, Lcom/cgollner/StatisticsCalculatorActivity;->getValuesInput(Landroid/text/Editable;)Ljava/util/List;

    move-result-object v6

    .line 284
    .local v6, "list2":Ljava/util/List;, "Ljava/util/List<Ljava/lang/Double;>;"
    if-nez v5, :cond_0

    sget-object v8, Lcom/cgollner/MyTabActivity;->statisticsCalculator:Lcom/cgollner/domain/StatisticsCalculatorFreqs;

    new-instance v9, Ljava/util/ArrayList;

    invoke-direct {v9}, Ljava/util/ArrayList;-><init>()V

    invoke-virtual {v8, v9}, Lcom/cgollner/domain/StatisticsCalculatorFreqs;->setListaD(Ljava/util/List;)V

    .line 285
    :cond_0
    if-nez v6, :cond_1

    sget-object v8, Lcom/cgollner/MyTabActivity;->statisticsCalculator2:Lcom/cgollner/domain/StatisticsCalculatorFreqs;

    new-instance v9, Ljava/util/ArrayList;

    invoke-direct {v9}, Ljava/util/ArrayList;-><init>()V

    invoke-virtual {v8, v9}, Lcom/cgollner/domain/StatisticsCalculatorFreqs;->setListaD(Ljava/util/List;)V

    .line 287
    :cond_1
    sget-object v8, Lcom/cgollner/MyTabActivity;->inputType:Lcom/cgollner/MyTabActivity$InputType;

    sget-object v9, Lcom/cgollner/MyTabActivity$InputType;->VALFREQ:Lcom/cgollner/MyTabActivity$InputType;

    if-ne v8, v9, :cond_3

    .line 288
    sget-object v8, Lcom/cgollner/MyTabActivity;->statisticsCalculator:Lcom/cgollner/domain/StatisticsCalculatorFreqs;

    invoke-virtual {v8, v5, v6}, Lcom/cgollner/domain/StatisticsCalculatorFreqs;->setListas(Ljava/util/List;Ljava/util/List;)V

    .line 289
    if-nez v5, :cond_2

    .line 290
    invoke-direct {p0}, Lcom/cgollner/StatisticsCalculatorActivity;->fillWithBlank()V

    .line 343
    :goto_0
    return-void

    .line 293
    :cond_2
    invoke-direct {p0}, Lcom/cgollner/StatisticsCalculatorActivity;->fillOutputs()V

    goto :goto_0

    .line 297
    :cond_3
    if-nez v5, :cond_4

    .line 298
    invoke-direct {p0}, Lcom/cgollner/StatisticsCalculatorActivity;->fillWithBlank()V

    .line 335
    :goto_1
    if-nez v6, :cond_7

    .line 336
    invoke-direct {p0}, Lcom/cgollner/StatisticsCalculatorActivity;->fillWithBlank2()V

    goto :goto_0

    .line 300
    :cond_4
    invoke-interface {v5}, Ljava/util/List;->size()I

    move-result v8      #从这开始 比较数据长度

    if-le v8, v10, :cond_5    #把它跳过

    .line 301
    :goto_2
    invoke-interface {v5}, Ljava/util/List;->size()I

    move-result v8    ##从这开始 比较数据长度

    if-gt v8, v10, :cond_6     #把它跳过

    .line 304
    iget-object v8, p0, Lcom/cgollner/StatisticsCalculatorActivity;->dataInput:Landroid/widget/EditText;

    iget-object v9, p0, Lcom/cgollner/StatisticsCalculatorActivity;->before:Ljava/lang/CharSequence;

    invoke-virtual {v8, v9}, Landroid/widget/EditText;->setText(Ljava/lang/CharSequence;)V

    .line 305
    iget-object v8, p0, Lcom/cgollner/StatisticsCalculatorActivity;->dataInput:Landroid/widget/EditText;

    iget-object v9, p0, Lcom/cgollner/StatisticsCalculatorActivity;->dataInput:Landroid/widget/EditText;

    invoke-virtual {v9}, Landroid/widget/EditText;->getText()Landroid/text/Editable;

    move-result-object v9

    invoke-interface {v9}, Landroid/text/Editable;->length()I

    move-result v9

    invoke-virtual {v8, v9}, Landroid/widget/EditText;->setSelection(I)V

    .line 306
    new-instance v2, Landroid/app/Dialog;

    invoke-direct {v2, p0}, Landroid/app/Dialog;-><init>(Landroid/content/Context;)V

    .line 308
    .local v2, "dialog1":Landroid/app/Dialog;
    const v8, 0x7f030001

    invoke-virtual {v2, v8}, Landroid/app/Dialog;->setContentView(I)V

    .line 309
    const v8, 0x7f07004e

    invoke-virtual {p0, v8}, Lcom/cgollner/StatisticsCalculatorActivity;->getString(I)Ljava/lang/String;

    move-result-object v8

    invoke-virtual {v2, v8}, Landroid/app/Dialog;->setTitle(Ljava/lang/CharSequence;)V

    .line 310
    const v8, 0x7f0a0006

    invoke-virtual {v2, v8}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View;

    move-result-object v0

    check-cast v0, Landroid/widget/TextView;

    .line 311
    .local v0, "b":Landroid/widget/TextView;
    const v8, 0x7f07004f

    invoke-virtual {p0, v8}, Lcom/cgollner/StatisticsCalculatorActivity;->getString(I)Ljava/lang/String;

    move-result-object v8

    invoke-virtual {v0, v8}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

    .line 313
    const/4 v8, 0x1

    invoke-virtual {v2, v8}, Landroid/app/Dialog;->setCancelable(Z)V

    .line 315
    const v8, 0x7f0a0007

    invoke-virtual {v2, v8}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View;

    move-result-object v1

    check-cast v1, Landroid/widget/Button;

    .line 316
    .local v1, "buy":Landroid/widget/Button;
    new-instance v8, Lcom/cgollner/StatisticsCalculatorActivity$5;

    invoke-direct {v8, p0}, Lcom/cgollner/StatisticsCalculatorActivity$5;-><init>(Lcom/cgollner/StatisticsCalculatorActivity;)V

    invoke-virtual {v1, v8}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    .line 323
    const v8, 0x7f0a0008

    invoke-virtual {v2, v8}, Landroid/app/Dialog;->findViewById(I)Landroid/view/View;

    move-result-object v7

    check-cast v7, Landroid/widget/Button;

    .line 324
    .local v7, "nothanks":Landroid/widget/Button;
    new-instance v8, Lcom/cgollner/StatisticsCalculatorActivity$6;

    invoke-direct {v8, p0, v2}, Lcom/cgollner/StatisticsCalculatorActivity$6;-><init>(Lcom/cgollner/StatisticsCalculatorActivity;Landroid/app/Dialog;)V

    invoke-virtual {v7, v8}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V

    .line 330
    invoke-virtual {v2}, Landroid/app/Dialog;->show()V

    .line 332
    .end local v0    # "b":Landroid/widget/TextView;
    .end local v1    # "buy":Landroid/widget/Button;
    .end local v2    # "dialog1":Landroid/app/Dialog;
    .end local v7    # "nothanks":Landroid/widget/Button;
    :cond_5
    sget-object v8, Lcom/cgollner/MyTabActivity;->statisticsCalculator:Lcom/cgollner/domain/StatisticsCalculatorFreqs;

    invoke-virtual {v8, v5}, Lcom/cgollner/domain/StatisticsCalculatorFreqs;->setListaD(Ljava/util/List;)V

    .line 333
    invoke-direct {p0}, Lcom/cgollner/StatisticsCalculatorActivity;->fillOutputs()V

    goto/16 :goto_1

    .line 302
    :cond_6
    invoke-interface {v5}, Ljava/util/List;->size()I

    move-result v8

    add-int/lit8 v8, v8, -0x1

    invoke-interface {v5, v8}, Ljava/util/List;->remove(I)Ljava/lang/Object;

    goto :goto_2

    .line 338
    :cond_7
    sget-object v8, Lcom/cgollner/MyTabActivity;->statisticsCalculator2:Lcom/cgollner/domain/StatisticsCalculatorFreqs;

    invoke-virtual {v8, v6}, Lcom/cgollner/domain/StatisticsCalculatorFreqs;->setListaD(Ljava/util/List;)V

    .line 339
    invoke-direct {p0}, Lcom/cgollner/StatisticsCalculatorActivity;->fillOutputs2()V

    goto/16 :goto_0
.end method


最后保存编译,成功po jie,输入20个数据也没问题!

成功破解,输入20个数据

成功破解,输入20个数据

免费评分

参与人数 9吾爱币 +16 热心值 +8 收起 理由
qtfreet00 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
weifei + 1 + 1 求教,这个反编译器是啥呢?
foxcdwapj + 1 + 1 我很赞同!
Nachtmusik + 1 感谢您的宝贵建议,我们会努力争取做得更好!
smile5 + 1 热心回复!
iBristlecone + 1 + 1 用心讨论,共获提升!
抱书人人 + 1 + 1 谢谢@Thanks!
FleTime + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
javafu159357 + 1 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

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

moyu2 发表于 2019-12-13 09:53
你直接把15改成大数不就得了,这么麻烦
 楼主| ciker_li 发表于 2022-1-28 17:28
太后跟班 发表于 2022-1-23 00:04
求楼主分享下此破解,好多年前下过这个软件后来根本没有地方找到了!

链接: https://pan.baidu.com/s/1_tnTJug0v71JoB1bfnO1YQ?pwd=i8s2 提取码: i8s2 复制这段内容后打开百度网盘手机App,操作更方便哦
sitiger 发表于 2019-12-13 09:57
rosoon 发表于 2019-12-13 10:43
谢谢LZ分享!!!
xxpl123 发表于 2019-12-13 11:09
moyu2 发表于 2019-12-13 09:53
你直接把15改成大数不就得了,这么麻烦

呵呵,刚准备这么说的,就看见你说了
MatthewLee 发表于 2019-12-13 11:24
这个厉害了   菜鸟来学习一下
TvT 发表于 2019-12-13 11:28
学习了学习了学习了
zgmn001 发表于 2019-12-13 12:15
在哪里下载?
西枫游戏 发表于 2019-12-13 12:15
如果 允许的话 直接暴力改成0x999999
cptw 发表于 2019-12-13 12:53

学习了学习了学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 17:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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