传送门:FakerAndroid
博主想着能否借助这款神器,来破解下之前《教我兄弟学Android逆向系列课程》中的apk签名验证。最终成功实现了原文的目标:
[color=]爆破李华Demo中的用户名和密码 要求输入任意用户名和密码 会提示登陆成功
没有看过这系列文章的同学可以去看看,写的很不错,附传送门:
《教我兄弟学Android逆向系列课程+附件导航帖》
《教我兄弟学Android逆向08 IDA爆破签名验证》
本文的demo 不需要手机root, 不需要修改arm指令,所需要的仅仅是
`1. 待破解的apk
[/ol]
FakerAndroid打开Apk文件
通过Android studio 直接打开源apk文件
open_apk.png (145.06 KB, 下载次数: 0)
下载附件
2021-12-7 11:28 上传
打开之后的项目目录如下:
list.png (92.67 KB, 下载次数: 0)
下载附件
2021-12-7 11:28 上传
hook so库函数
[ol]
通过《教我兄弟学Android逆向08 IDA爆破签名验证》我们知道,源apk在so方法中做了签名以及用户名密码校验。
主要是check 这个jni方法。
package demo2.jni.com.myapplication;
public class myJNI {
static {
System.loadLibrary("JniTest");
}
public native String check(Object arg1, String arg2, String arg3) {
}
}
2.通过IDA 打开源apk文件中的libJniTest.so库,查找check函数偏移地址。
这里需要注意的是选取正确的so文件,,如果你的手机是armeabi-v7a的,需打开armeabi-v7a 文件夹下的so文件,如果是V8的 需打开armeabi-v8a的so文件。我这个demo跑在模拟器上,所以我这边需要打开的是x86文件夹下的so文件。
[/ol]
check_address.png (105.2 KB, 下载次数: 0)
下载附件
2021-12-7 11:28 上传
在native-lib.cpp文件进行so库函数的hook
在Java_com_fakerandroid_boot_FakerApp_fakeApp这个回调函数中里进行hook, 其中functionAdress填入刚才check函数的偏移地址。
fakeCpp 将源地址的函数替换成我们的hook 函数。这里我们在fakerMethod 直接返回 登录成功,代码如下:
jstring fakeMethod(JNIEnv *env){:
LOGI("fake method called");
jstring toast = env->NewStringUTF("登录成功");
return toast;
}
extern "C"
JNIEXPORT void JNICALL
Java_com_fakerandroid_boot_FakerApp_fakeApp(JNIEnv *env, jobject thiz, jobject application) {
//so库在内存的基准地址
long base = baseImageAddr("libJniTest.so");
LOGE("baseImageAddr : %ld",base);
//通过IDA获取此方法的地址0x000006E0;
long functionAdress=base+0x000006E0;
LOGE("functionAdress : %ld",functionAdress);
//将源方法替换成我们自己的fakeMethod
fakeCpp((void *) (functionAdress), (void *) fakeMethod, reinterpret_cast(&functionAdress));
}
[/ol]
4.打包测试
fakerAndroid 厉害的地方在于反编译之后可以直接在android studio中run起来,当然你也可以重新签名源apk。最后看下效果图:
success.png (54.81 KB, 下载次数: 0)
下载附件
2021-12-7 11:28 上传
至此,成功hook了源apk中的check函数。
演示代码地址:https://pan.baidu.com/s/1SjPrfIfdVQ06pBfXlhXndg 密码:npba