前言
本文使用Android软件安全权威指南第二章的程序。将程序使用Android Studio编译打包生成APK程序。ApkTool反编译
ApkTool手册及常用命令 执行命令apktool d .\AndCrakeMe1.apk -o AndCrakeMe1,在AndCreakeMe1目录下生成反编译文件。其中,res目录存放的是程序的资源文件,smali则是程序的反汇编代码。分析反编译文件
错误提示是程序分析突破方式之一。错误提示属于Android程序的字符串资源。字符串可能存在于两个位置,一个是被硬编码到源码之中,一个是存储在res\values目录下的strings.xml中。 在注册失败时,程序会弹出“无效的用户名或注册码”,在strings.xml检索该字符串,得到它的字符串名称为“unsuccessed”,每个字符串资源都有唯一的int类型的索引值,反编译后保存在public.xml中。检索unsuccessed的id值为0x7f06002c,并在smali文件夹下搜索调用该字符串的代码。 查看代码,程序调用checkSN函数检查注册码,根据函数返回值决定是否跳转。if-nez对值v0进行判断,若v0不为零,跳转到cond_0,否则继续向下执行。此时装入0x7f06002c字符串,并弹出,注册不成功。 若v0不为零,跳转到cond_0处,装入id值为0x7f060029的字符串,查看public.xml及strings.xml,此id对应的字符串为“恭喜您!注册成功” 修改跳转逻辑,将if-nez修改为if-eqz当v0为零时跳转到cond_0.编译、签名、安装
使用apktool.bat b .\AndCrakeMe1\命令重新编译修改后的文件,成功后会在\AndCrakeMe1\dist目录下看到重新生成的apk文件。使用signapk.jar工具对文件进行签名java -jar signapk.jar testkey.x509.pem testkey.pk8 old.apk new.apk
,成功后会在当前目录生成签名后的文件。 adb install XXX.apk安装到模拟机。注意,使用adb命令,安装时的参数是apk文件名,卸载时的参数是包名。 输入任意字符,注册成功。