1、申 请 I D : NASS80
2、个人邮箱:84500316@qq.com
分享自己一个 破解Android APP(apk)的登陆界面过程。这是第一次破解。 目标破解的登陆。搜索引擎一搜一大把,总结起来就是把if-eqz或if-nez互换,要么注视掉,总之目的只有一个让程序的逻辑执行到正确的地方。然鹅,我这个小白实际操作起来却花费了些功夫。
第一步:反编译 java -jar apktool_2.2.0.jar d crack.apk 这步挺顺,直接搞到smali代码。
第二步:测试打包 java -jar apktool_2.2.0.jar b crack -o test.apk 因为没啥经验,总怀疑反编译后还能不能打包成apk(不知到新手是不是都这样),于是什么都不修改,直接打包。哎我去,果然报了一堆错误,此时我心是拔凉的。深呼一口气,耐心看错误。我把错误归了两类: 1)public.xml 很多变量没有定义: error: Public symbol drawable/ab_arrow1 declared here is not defined. 2)图片错误: ERROR: Failure processing PNG image ... W: No marked region found along edge. W: Found along left edge. 搜索了下网络解决方法比较明确: 1)那行提示错误就删掉哪里。 2)重命名文件去掉数字’9’。
第三步:找到login跳转点,调试 Apkkiller打开根据关键字“login”找到smali代码位置,比较顺利(感谢规范的命名)。 这里我直接注释掉跳转然后打包安装apK到手机,结果报错:“异常退出”。
第四步:错误分析 看来没有那么顺利,打开apkkiller日志开关找到进程id过滤日志 空指针, 我推测应该是认证过程中从服务器返回一些数据会做一些初始化,而我就这么暴力执行就报措了, 看下代码: 看到这里有个猜测就是登陆成功后会初始化一个loginAccount对象,然后被后续的activity引用,因为我没有初始化所以就异常了。想到这我就着手做两个事情: 1)删除这些登陆成功的初始化代码 2)找到loginAccount对里的成员init过程就初始化好 于是我这么做了: 因为无法从服务器认证返回消息获取到信息,所以通过事先初始化这些数据。 打包测试, 可以跳过LOGIN直接进主页面了。
第五步 总结 1)找到跳板点 2)反复尝试最小改动方式解决遇到的问题。
|