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

posted @ 2017-12-10 19:24  Stars-one  阅读(46508)  评论(2编辑  收藏  举报