一个简单的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大法王 感谢观看~
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 19:23 编辑
@冥界3大法王那个不是调试者模式。显示当前activity太容易了。 shell dumpsys Activity就能取出来当前activity,不过我习惯性偷懒。直接用了 当前activity 这个小工具
百度这个app名字当前activity
支持下!学习了!!! 能看源码? 感谢分享 非常猥锁 发表于 2017-4-14 15:28
能看源码?
你可以在smali文件那里点击查看反编译之后的源码。尽管不是很完美,但是大致能看懂了 感谢分享 小白表示完全看不懂 谢谢分享!! 膜拜膜拜 学习参观一下。。