反编译APK时查找应用创建的内部存储文件夹问题
以下是几种可能的原因和对应的排查方向:
字符串可能藏在Native层(.so文件)
很多PSP模拟器的核心功能由C/C++编写,文件夹名称可能硬编码在lib目录下的.so文件里,而非Java代码中。你可以用逆向工具(比如Ghidra、IDA Pro)打开这些.so文件,搜索"PSP"字符串,或者查找文件创建、路径拼接相关的Native函数,追溯路径来源。另外,字符串也可能是通过拼接生成的(比如"PS"+"P"),直接搜完整"PSP"会找不到,得关注字符串拼接逻辑。通过系统API动态拼接路径
模拟器可能调用Environment.getExternalStorageDirectory()获取内部存储根目录,再拼接"/PSP"生成目标路径。这种情况下,Java代码里可能只有拼接逻辑而非完整字符串:new File(Environment.getExternalStorageDirectory(), "PSP");如果是用资源ID引用字符串(比如
getString(R.string.psp_folder)),要去res/values/strings.xml(及对应区域语言的strings文件)里找对应的资源项,而非直接搜Java代码里的"PSP"。混淆导致字符串被处理
如果APK开启了ProGuard/R8混淆,Java代码里的字符串可能被重命名或模糊处理。你可以尝试查找调用mkdir()/mkdirs()的代码位置,向上追溯路径参数的生成逻辑;如果能拿到混淆映射文件(mapping.txt),可以直接通过映射关系找到被混淆的字符串定义。检查隐藏配置或动态加载项
少数应用会在首次启动时从配置文件或云端拉取路径设置,可以查看反编译后的shared_prefs目录下的XML文件,或者在模拟器首次启动时抓包排查是否有相关配置请求。
具体排查步骤建议:
- 先扫一遍
res/values/下的所有strings文件,确认是否有文件夹名称相关的资源项; - 在Java代码中搜索文件创建、目录操作的相关方法(如
File类构造、mkdir),跟踪路径参数的来源; - 提取
lib目录下的.so文件,用逆向工具分析字符串和文件操作逻辑; - 定位处理存档、作弊码的功能模块,这类模块必然会访问目标文件夹,顺着业务逻辑反向查找路径定义。
内容的提问来源于stack exchange,提问作者APEX NERD

