【过验证 更新】将assets下的任意文件解压到 sd目录下的教程
本帖最后由 傲世V雄哥720 于 2019-5-9 15:33 编辑将 app 游戏数据解压到sd的升级改进
我们可以将任何assets下的 文件解压到 sdcard路径下 /sdcard/ 这里的 你可以定义为 txt ,so,*.* 任意文件
解压到的路径可以自己定义修改,这里就不多说
常见需要解压assets的文件到sd下的情况 过签名验证 遇到普通无法爆破签名验证的时候
还有的情况是 软件修改后,修改签名后 启动一会闪退 异常 功能无法使用之类。 不想手动放置原版 sign.apk 到 sdcard,
如何区分是包效验,文件效验之类,只需要搜索 X.509 有 getPackageInfo,就差不多是 首先将 getPackageinfo 改为 getPackageArchiveInfo定义路径为 /sdcard/sign.apk。
关于 getApplicationContext的 getPackageResourcePathmove-result-object vX 可以 返回 /sdcard/sign.apk 同理
getPackageResourcePath: 读取 data/app/ 已安装的安装包签名信息
AndroidManifest里然后插入代码:
<activity android:name="com.lenovo.extract.ExtractActivity"> // 这里是插入的Activity
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.e4a.runtime.android.StartActivity"> // 这里是要跳转的主Activity
<intent-filter>
<action android:name="OPEN_ACTIVITY_1" />
<category
android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
剩下添加权限,程序本身有则过滤,无则添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
ExtractActivity里的 NextActivity() 方法的代码 Lcom/lenovo/extract/ExtractActivity 替换为 要跳转的Activity
插入插件即可。
下面是我修改的插件代码。只改了一处。返回 sign.apk 这里就可以改成任意对应 assets下文件的 文件名称比如 libnative .so, 52pojie.txt
const-string v8, ".obb"
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v7
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
const-string v7, "sign.apk"
iput-object v7, p0, Lcom/lenovo/extract/ExtractActivity;->mData:Ljava/lang/String;
运行效果是 首次启动极速解压,然后二次启动不会再显示解压界面。二次启动后,APK直接读取 原版签名,绕过签名验证成功,此种方式适合过签名验证,APK完整性验证
代码下载:
链接:https://pan.baidu.com/s/1Iz9qvwIDZKTXyPr_stJTdg
提取码:wtc9
补充一下如何修改 Android/obb/包名/的路径如何修改 4.18更新
const-string v8, "/sdcard/"
//这里的路径就可以随便改了,如果 为空 "" 则支持Android系统 1.0 -9.0 + 默认解压到 sdcard下 修改插件里的代码只需要这样即可
如果写/sdcard/ 部分手机不会解压到sdcard
invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v7 // 删除位置自行对比
invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v7
iput-object v7, p0, Lcom/lenovo/extract/ExtractActivity;->mPath:Ljava/lang/String;
那么最终解压的路径,解压的文件名 完全可以实现自定义,欢迎讨论。因为软件启动就会立即读取 getPackageArchiveInfo的app
如果不存在,软件会闪退
所以推荐首先做一个 解压助手,首先启动解压助手解压app 到sd,再打开软件,实现免手动过验证
二次启动后,APK直接读取 原版签名,绕过签名验证成功,此种方式适合过签名验证,APK完整性验证
我也不太理解这句话的涵义 原app的每个getPackageinfo都要改吗,如果用的是getApplicationContext()该如何修改。 二次启动后,APK直接读取 原版签名,绕过签名验证成功,此种方式适合过签名验证,APK完整性验证
上面这句怎么理解。
谢谢大佬分享 感谢楼主的教程 谢谢楼主, 先收藏后学习!新手上路 感谢楼主的教程 谢谢楼主的分享 后学习献收藏 感谢分享 学习了! 认真学习了、感谢楼主的教程
页:
[1]
2