zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    给Lisp程序员的Python简介
    QuickLisp常用命令
    修改windows cmd字体
    Eclipse生成JavaDoc时指定字符集, 避免页面乱码
    css颜色名
    css3动画
    使用placeholder实现动态配置persistence.xml
    spring下配置tomcat jdbc pool 报找不到"com.mysql.jdbc.Driver"类
    去除移动端浏览器点击元素时的边框
    JS经典闭包问题
  • 原文地址:https://www.cnblogs.com/stars-one/p/8001065.html
Copyright © 2011-2022 走看看