Android学习心得(2) --- MAC下Android反编译

来源:互联网 发布:磁盘格式化后数据恢复 编辑:程序博客网 时间:2024/05/23 20:22
从今天开始,我在博客上发表一些我的Android学习心得,希望对大家能有帮助。在前一章我们学习了如何在Mac os下搭建安卓开发环境,马上我们学习如何进行基本的Android反编译

Android学习心得(1) --- MAC下Android环境的搭建


具体源代码及分析文件将在最后给出链接

1. 编译生成第一个APK文件

首先使用Eclipse开发一个最简单的程序,最简单的登陆验证功能如果输入登陆口令是123,则Toast显示登陆成功,反之则登陆失败。

这里写图片描述
这里写图片描述这里写图片描述

/*相关判断代码*/if(str_userpwd.equals("123")) {    Toast.makeText(MainActivity.this,     R.string.str_success,     Toast.LENGTH_SHORT).show();}else {    Toast.makeText(MainActivity.this,     R.string.str_unsuccess,      Toast.LENGTH_SHORT).show();}

2. 反编译APK文件

       经过Eclipse编译并在模拟器上运行之后,将在bin目录文件夹中生成一个APK文件       下面我们对这个文件进行反汇编。       反汇编apk文件利用ApkTool进行,来生成Smali格式的反汇编代码。       首先,我们把apk文件和ApkTool放在同一个目录文件夹下面,打开终端,进入相应的文件夹目录。       直接在命令行输入apktool命令,反编译命令为apktool d crackme01.apk       反编译成功后将在当前文件夹下生成一个crackme01文件夹,存放生成的反汇编代码。

这里写图片描述

3. 分析修改Smali文件

需要找到破解口,必须从Toast提示信息出发,打开res\values\string.xml文件

这里写图片描述

登陆成功和登陆失败就是我们的突破口每一个文件都在R.java文件中被标识,标识的索引值被存放在public.xml中

这里写图片描述

下面我们需要从smali文件中找到0x7f040004的文件我们在MainActivity$1.smali中查看到一处调用
/*简化了代码,把不需要的使用...替代*/    move-result v0    if-eqz v0, :cond_0     ...    const v1, 0x7f040003     ...    move-result-object v0     ...         .line 37    :goto_0    return-void    .line 35     :cond_0          ...         const v1, 0x7f040004     ...    move-result-object v0     ...    goto :goto_0.end method
这里是一个跳转语句,先将if内判断的结果放入v0,然后对v0进行判断如果等于0(登陆失败),则跳转到cond_0,不等于0(登陆成功),则继续执行。下面我们只需要进行修改,无论判断是什么结果,都让其继续执行即可。删除if-eqz v0, :cond_0则不会进行判断,永远执行登陆成功。

4. 重新编译APK并签名

       修改完成后,我们需要使用apktool工具重新打包成apk文件       执行命令为:apktool b crackme01,出现如下情况则成功编译。

这里写图片描述

  由于编译生成的apk并未进行签名,我们需要使用signapk.jar进行签名

这里写图片描述
5. 安装测试

开启AVD,输入adb install signed.apk重新安装apk并测试运行指定的AVD:emulator -avd ***

这里写图片描述

最终成功,无论输入什么都是登陆成功

这里写图片描述

6. 下载链接
apktool for mac
signapk.jar
下载链接: http://pan.baidu.com/s/1EZAhw 密码: jevj
crackme01项目
链接: http://pan.baidu.com/s/1kT69KLD 密码: vau1

0 0
原创粉丝点击