老菜鸟逆向某统计计算器
本帖最后由 ciker_li 于 2019-12-13 09:38 编辑最近自学统计分析,在手机上随便下了一个统计计算器,开始感觉挺好用,没想到只能输入15以内数字,超过之后提示:“数据达到限制,免费版本你最多只能插入15个数值。购买专业版本可以插入无限个数值,此功能仅适用于专业版.你可以在Android市场和AndroidPit市场上买它.”
作为一个老宅男,怎么可能掏钱,只好捡起早已荒废多年的手艺,试试能不能pojie。
先拿出老工具,改之理,载入看看,还好没有加壳。
然后找提示string,“数据达到限制”
换到java编辑,根据string的name:limitFree,找到对应ID
在主函数里找到那个ID
可以看到这段函数主要就是判断是否超过15个字符,超了就弹出对话框,提示购买了
再回到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个数据也没问题!
你直接把15改成大数不就得了,这么麻烦 太后跟班 发表于 2022-1-23 00:04
求楼主分享下此破解,好多年前下过这个软件后来根本没有地方找到了!
链接: https://pan.baidu.com/s/1_tnTJug0v71JoB1bfnO1YQ?pwd=i8s2 提取码: i8s2 复制这段内容后打开百度网盘手机App,操作更方便哦 软件功能看起来很简单 谢谢LZ分享!!! moyu2 发表于 2019-12-13 09:53
你直接把15改成大数不就得了,这么麻烦
呵呵,刚准备这么说的,就看见你说了:lol 这个厉害了 菜鸟来学习一下 学习了学习了学习了 在哪里下载? 如果 允许的话 直接暴力改成0x999999
学习了学习了学习了