安卓逆向 reoky android-crackme-challenge5 弗里达frida打印安卓资源类R的文本
https://github.com/reoky/android-crackme-challenge/tree/master
补全环境
把gradle配置补齐
AI说 好的,我看到问题了。由于我们将依赖项更新为使用 AndroidX,因此还需要在 gradle.properties 文件中启用它。
AI说 好的,我明白问题所在了。错误信息表明,您的应用 minSdkVersion 设置为 11,但您使用的其中一个库 (androidx.appcompat:appcompat-resources:1.6.1) 要求的最低 minSdkVersion 是 14。
AI说 好的,我看到这个新的构建错误了。这个错误表明,由于您的应用现在面向 Android 12(或更高版本),您需要为 ChallengeActivity 显式声明 android:exported 属性。这是 Android 12 中引入的一项安全要求
AI说 好的,我看到了这个运行时崩溃。这个崩溃和之前的编译错误原因相同:您的项目已经迁移到了 AndroidX,但是您的布局文件 activity_challenge.xml 仍然在引用旧的支持库组件 (android.support.v4.view.ViewPager)。我将为您修复此问题,并解答关于为 x86/x86_64 架构编译的问题。
AI说 好的,我已经拿到了 app/build.gradle 的内容。现在我将添加 abiFilters 来支持 x86 和 x86_64 架构。
versionName "1.0"
ndk {
abiFilters 'x86', 'x86_64'
}
}
buildTypes {
检查 gradle.properties:补全 AndroidX 和 Jetifier 属性。
执行 Refactor -> Migrate to AndroidX:解决所有旧版支持库的报错。
检查 build.gradle 的 SDK 版本:把 compileSdkVersion 提高到 30+,否则很多现代模拟器会无法运行。
jadx
把build的apk丢到jadx
发现有个R类 资源类 有"the_answer"类的地址
所以想办法问AI 安卓的r包的调用过程,我可以用frida来打印对应的调用堆栈
public static final int tab_about = 0x7f0d0032;
public static final int tab_challenge = 0x7f0d0033;
public static final int tab_hint = 0x7f0d0034;
public static final int the_answer = 0x7f0d0035;
private string() {
}
AI给的js脚本
adb 在雷电模拟器安装好frida server 并运行
frida-ps -Uai
frida -U -f "com.reoky.crackme.challengefive" -l crackme5.js
Java.perform(function () {
console.log("[*] 脚本已加载,等待应用初始化...");
// 使用 setTimeout 延迟 2 秒执行,确保 Context 已生成
setTimeout(function() {
Java.perform(function () {
console.log("[*] 正在尝试主动提取资源内容...");
try {
var ActivityThread = Java.use("android.app.ActivityThread");
var app = ActivityThread.currentApplication();
if (app == null) {
console.log("[-] 仍然无法获取 Context,请尝试手动在模拟器点击打开 App 界面,然后重新加载脚本。");
return;
}
var context = app.getApplicationContext();
var resources = context.getResources();
// 你想要查看的 ID 列表
var targetIds = {
"the_answer": 0x7f0d0035,
"eight": 0x7f0d001d,
"tab_hint": 0x7f0d0034,
"string_challenge_five_win": 0x7f0d002f
};
for (var key in targetIds) {
var id = targetIds[key];
var value = resources.getString(id);
console.log("[+] 发现资源 [" + key + "] (0x" + id.toString(16) + "): " + value);
}
} catch (e) {
console.log("[-] 发生错误: " + e);
}
});
}, 2000); // 延迟 2000 毫秒
});

浙公网安备 33010602011771号