Android破解学习之路(一)——简单的登录破解
最近突然心血如潮开始学了Android破解,初入门,便是将经验记录下来。
这里统一回复一下:
以下只是个简单例子,很多的APP的登录验证都是有服务器验证,以下的方法是不可行的!可以通过抓包来进行篡改数据,具体的我也是没有深入了解过,走百度找找资料吧!
准备工作:
1、一个登录简单APP
在我们破解之前,我们需要做一个简单的登录APP,输入相应的账号与密码便是弹出登录成功的对话框,账号与密码不匹配的话则是弹出登录失败的对话框,如下图
由于我之前已经写了一篇关于制作登录界面的简单APP的博文,这里便是不多说了,详情请进http://www.cnblogs.com/kexing/p/8000783.html,图片也是从那篇博文复制过来的
建议大家还是照着我的教程做一下APP,之后对我下面所说的破解就会有更深的理解
这是我之前那篇所做的登录APP,把地址给大家吧,大家下载之后,按照我下面的步骤开始破解
链接: https://pan.baidu.com/s/1dFew3y5 密码: 6666
2.android破解工具——Androidkiller
这里介绍一下android破解工具,Androidkiller,这款软件可谓是大名鼎鼎,不了解的话可以去百度搜索看看
下载地址:链接: https://pan.baidu.com/s/1dET7ce1 密码: 6666
开始破解:
使用Androidkiller打开需要破解的apk,之后反编译成功,点击工程管理器,就会出现这样的一个界面(第一次运行可能会出现卡死的情况,解决方法是将软件关闭,重新打开,之后在项目历史记录选择打开)
这里说一下,original文件夹里面放的是原始的AndroidMainfest和相关的签名,res文件夹则是放有相关的布局,颜色,图片,音乐等资源,smail文件夹则是存放这个app中所有的java文件
我上面只是比较粗略的讲解,想要深入了解的同学可以参考这一篇博文http://blog.csdn.net/bbzz100/article/details/51568616
我们重点的修改就是smail文件夹中的文件
我们可以看到其中有个MainActivity,这个就是主界面的java文件的smail文件,由于这个是一个简单的登录APP,所以里面没有太多的界面,我们可以很清楚主界面,但是,一般的APP可不是只有一个界面,这时,我们怎么办呢?答案很简单,通过关键字进行查找,从而定位到相关的smail文件中。所以说,破解一款APP,你还得使用过它,在使用过程中找出关键字
如我们这个简单的登录APP来说,我们可以搜索登录失败来寻找相对应的smail
在右上角搜索功能框输入登录失败,点击右下角的搜索全部,可以看到没有结果,这是为什么呢?因为在生成apk的时候,开发工具就会将apk中的相关文字转换成了Unicode,所以,我们可以将登录失败转为Unicode,再次搜索查看结果,Androidkiller搜索框就是自带了转换Unicode的功能,如下图
我们选择选择文本转Unicode,再次搜索,可以看到有了结果
我们展开它,双击第二行,就会跳到其所在的smail文件
到现在,我们需要理清一下破解思路,我们需要输入不匹配的账号密码,使其弹出登录成功的对话框。
上图我们找到了弹出登录失败的对话框,我们需要做的就是,修改条件不满足的时候所执行的代码
这里先补充两个smali指令 一个是if-eqz 另一个是if-nez 这两条指令是相对的
(1)if-eqz vA, vB, :cond_** 如果vA等于vB则跳转到:cond_**,可以看成boolean a = VA==VB,if-eqz a, :cond_** 当a为true,也就是VA等于VB,就执行cond_**,否则,就跳过cond_**,执行下一行代码
(2)if-nez vA, vB, :cond_** 如果vA不等于vB则跳转到:cond_**,同上,boolean a = VA!=VB, if-nez a,:cond_** 当a为true,也就是VA不等于VB,就执行cond_**,否则,就跳过cond_**,执行下一行代码
补充:v5为假,则说明用户名不对,所以弹出登录失败,v5为真,也就是用户名对了,就继续判断密码是否正确,密码不正确,也是弹出登录失败的对话框
破解方法:
破解之前强调一个问题 修改完smali代码后一定要ctrl+s保存 不然程序还是拿原来的smali代码编译
1.将上述的两个判断用户名与密码的判断,也就是if-eqz修改为if-nez,那么输入不对的账号名与密码就会跳过cond_0,相当于不弹出登录失败的对话框,直接往下执行,之后就是弹出登录成功的对话框
PS:如果输入的是原本的那个正确的用户名和密码,就会弹出登录失败
2.将这两个if-eqz删除掉,不管输入什么,即使是正确的账号名与密码均是弹出登录成功的对话框
3.利用goto语句,直接跳过这两个if-eqz
修改完之后,点击编译
之后就可以看到编译成功的提示,点击红色方框那行,就会跳转到资源管理器中
之后,就将该apk发给手机,在手机安装测试效果
这里提一下,还可以使用adb功能连接手机进行测试,或者连接到Android模拟器,将apk安装到模拟器中测试
第二期地址:http://www.cnblogs.com/kexing/p/8028039.html