fisher 发表于 2017-4-14 14:55

一个简单的apk破解思路分析

本帖最后由 fisher 于 2017-5-10 18:21 编辑

0x0确定目标
以OResearch(单纯形法计算器)为例
工作环境:某遥安卓
作案工具:ApkIDE
http://www.52pojie.cn/forum.php?mod=image&aid=861953&size=300x300&key=2a04c23059bbae8e&nocache=yes&type=fixnone
0x1敲“门”问路
现在大多数的思路都是 按字搜索法。
猜想:如果能用“按图索骥”的方法来找“门”,那岂不是美滋滋?
所以这里我采用这种思路来找到“门”
查看当前activity,确定为LpActivity

很容易就找到TA了

还没翻到几行就看见了这样完美的字眼,嘻嘻


public void onClick(View paramView)
{
    CheckBox localCheckBox = (CheckBox)findViewById(2131558511);
    if ((ResearchApp.IS_FREE) && (localCheckBox.isChecked())) {
      AndroidUtils.displayFreeAppAlert(this, getString(2131099756), getString(2131099755), getString(2131099844));
    }
    for (;;)
    {
      return;
      super.onClick(paramView);
    }
}
0x3破门而入
通过上面一翻折腾我们已经能大概确定目标就在ResearchApp.smali
所以我们直接打开,在.method static constructor这里找到了TA

.method static constructor <clinit>()V
    .locals 1

    .prologue
    .line 11
    const/4 v0, 0x1

    sput-boolean v0, Lcom/android/ResearchApp;->IS_FREE:Z

    .line 13
    const/4 v0, 0x2

    sput v0, Lcom/android/ResearchApp;->MAX_FREE_LP_VARS:I

    .line 14
    const/4 v0, 0x4

    sput v0, Lcom/android/ResearchApp;->MAX_FREE_LP_RESTR:I

    .line 16
    const/4 v0, 0x3

    sput v0, Lcom/android/ResearchApp;->MAX_FREE_TP_SIZE:I

    return-void
.end method
显然,IS_FREE就是验证当前是否为FREE版,而MAX_FREE_*就是FREE最大可以使用的变量个数
如果是PRO版本,肯定就不需要MAX_FREE_*啦!
尝试做出如下改动
.method static constructor <clinit>()V
    .locals 1

    .prologue
    .line 11
    const/4 v0, 0x0
#change the default value
    sput-boolean v0, Lcom/android/ResearchApp;->IS_FREE:Z

    .line 13
    const/4 v0, 0x2

    sput v0, Lcom/android/ResearchApp;->MAX_FREE_LP_VARS:I

    .line 14
    const/4 v0, 0x4

    sput v0, Lcom/android/ResearchApp;->MAX_FREE_LP_RESTR:I

    .line 16
    const/4 v0, 0x3

    sput v0, Lcom/android/ResearchApp;->MAX_FREE_TP_SIZE:I

    return-void
.end method
0x4关门善后
打包签名就不再赘述了
真♂机试用图

成品
链接: http://pan.baidu.com/s/1o8LkqV4 密码: 52pj
补充一下原文件地址http://www.wandoujia.com/apps/com.simplex
@冥界3大法王 感谢观看~

fisher 发表于 2017-4-19 22:58

SQLite 发表于 2017-4-15 19:11
楼主好!已拜读。想问个问题:
为何将图中源码第6行 : const/4 v0, 0x1   改为 :const/4 v0, 0x0    ...
抱歉回复有点多,现在才看到。因为
const/4 v0, 0x1
sput-boolean v0, Lcom/android/ResearchApp;->IS_FREE:Z
这里翻译过来就是给IS_FREE做了一个赋值,IS_FREE 是否FREE版,如果其bool值为FALSE,很明显这里就不是FREE版了,变身为PRO版.
实际上这个教程并不是完整的,这样做出来的APK需要破解Android核心.
当然,这里主要是分享一下思路,所以就不作其他方面的扩展啦~

fisher 发表于 2017-5-10 18:33

本帖最后由 fisher 于 2017-5-10 19:23 编辑

@冥界3大法王那个不是调试者模式。显示当前activity太容易了。 shell dumpsys Activity就能取出来当前activity,不过我习惯性偷懒。直接用了 当前activity 这个小工具

百度这个app名字当前activity

黑山走天涯 发表于 2017-4-14 15:12

支持下!学习了!!!

非常猥锁 发表于 2017-4-14 15:28

能看源码?

小蒲 发表于 2017-4-14 15:41

感谢分享

fisher 发表于 2017-4-14 16:12

非常猥锁 发表于 2017-4-14 15:28
能看源码?

你可以在smali文件那里点击查看反编译之后的源码。尽管不是很完美,但是大致能看懂了

smith_k 发表于 2017-4-14 16:22

感谢分享

Jeysir 发表于 2017-4-14 16:34

小白表示完全看不懂

龙雨 发表于 2017-4-14 17:05

谢谢分享!!

ganxie 发表于 2017-4-14 18:49

膜拜膜拜

寒玉冰菓 发表于 2017-4-14 20:14

学习参观一下。。
页: [1] 2 3 4 5
查看完整版本: 一个简单的apk破解思路分析