简单apk逆向——crackme02.apk

准备工具:
apktool
手机模拟器
apk下载:
链接:https://pan.baidu.com/s/1LDEcnmp-Y8heFIbVTiCdMw
提取码:0000

下载安装apk,查看apk内容,随意输入数据,查看返回信息,这个时候是无法注册成功的。简单apk逆向——crackme02.apk_第1张图片

目标:对注册码验证进行绕过

1. 反编译

首先对apk文件进行解包,在apktool路径下进入cmd模式,输入命令apktool d -f crackme02.apk -o crackme02
简单apk逆向——crackme02.apk_第2张图片
查看该路径下生成的文件夹crackme02
简单apk逆向——crackme02.apk_第3张图片

2. 代码分析

进入crackme02\res\values路径下

打开string.xml文件,查看这些字符串所对应的输出内容。发现unsuccessed对应的是“无效用户名或注册码”
简单apk逆向——crackme02.apk_第4张图片
打开public.xml文件,查看固定资源ID对应的Android资源。
查看到unsuccessed对应的id为0x7f05000b。
简单apk逆向——crackme02.apk_第5张图片
获得到对应的id后,进入crackme02\smali\com\droider\crackme0201路径下查看smali文件,发现名为MainActivity$1.smali的文件夹内包含0x7f05000b。
简单apk逆向——crackme02.apk_第6张图片
查看MainActivity$1.smali代码中,0x7f05000b的上下部分。
简单apk逆向——crackme02.apk_第7张图片
上方代码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
简单apk逆向——crackme02.apk_第8张图片
运行完毕后,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,此时输入任意内容进行注册均显示注册成功。
注意:卸载原版本后再进行安装,否则会因为版本冲突安装失败。
简单apk逆向——crackme02.apk_第9张图片

你可能感兴趣的:(android)