简单apk逆向——crackme02.apk
准备工具: apktool 手机模拟器 apk下载: 链接:https://pan.baidu.com/s/1LDEcnmp-Y8heFIbVTiCdMw 提取码:0000
下载安装apk,查看apk内容,随意输入数据,查看返回信息,这个时候是无法注册成功的。
目标:对注册码验证进行绕过
1. 反编译
首先对apk文件进行解包,在apktool路径下进入cmd模式,输入命令apktool d -f crackme02.apk -o crackme02 查看该路径下生成的文件夹crackme02
2. 代码分析
进入crackme02 esvalues路径下
打开string.xml文件,查看这些字符串所对应的输出内容。发现unsuccessed对应的是“无效用户名或注册码” 打开public.xml文件,查看固定资源ID对应的Android资源。 查看到unsuccessed对应的id为0x7f05000b。 获得到对应的id后,进入crackme02smalicomdroidercrackme0201路径下查看smali文件,发现名为MainActivity$1.smali的文件夹内包含0x7f05000b。 查看MainActivity$1.smali代码中,0x7f05000b的上下部分。 上方代码line33中的,if-nez v0, :cond_0,结合代码我们可以知道cond_0的功能是验证用户名注册码。所以,我们将if-nez v0改为if-eqz v0,将v0的值不等于0时执行cond_0操作改为v0的值等于0时执行cond_0操作。从而绕过cond_0。 修改完毕后保存smali文件。
3. 编译
回到apktool路径下,找到crackme02,需要对crackme02文件夹进行重新编译。 进入cmd模式,输入代码apktool b crackme02 运行完毕后,crackme02文件下增加了dist文件,含有编译完毕的crackme02.apk。这个时候的apk因为没有文件签名,还无法进行安装。
签名 在dist路径下进入cmd模式 输入代码: 生成abc.keystore文件: keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore 用abc.keystore对crackme02.apk进行签名得到signed.apk: jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore abc.keystore -signedjar signed.apk crackme02.apk abc.keystore 在该路径下生成的signed.apk就是签名后的文件。
4. 安装
安装signed.apk,此时输入任意内容进行注册均显示注册成功。 注意:卸载原版本后再进行安装,否则会因为版本冲突安装失败。
