傲世V雄哥720 发表于 2019-4-8 01:07

【过验证 更新】将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,再打开软件,实现免手动过验证

十三月的风 发表于 2019-4-8 21:39

二次启动后,APK直接读取 原版签名,绕过签名验证成功,此种方式适合过签名验证,APK完整性验证

我也不太理解这句话的涵义 原app的每个getPackageinfo都要改吗,如果用的是getApplicationContext()该如何修改。

jackie1 发表于 2019-4-8 13:55

二次启动后,APK直接读取 原版签名,绕过签名验证成功,此种方式适合过签名验证,APK完整性验证


上面这句怎么理解。

宇甫一 发表于 2019-4-8 06:20

谢谢大佬分享

jghdhr 发表于 2019-4-8 06:35

感谢楼主的教程

葱头呀 发表于 2019-4-8 08:27

谢谢楼主,

fei8255 发表于 2019-4-8 08:31

先收藏后学习!新手上路

维C糖果 发表于 2019-4-8 08:49

感谢楼主的教程

kakayeye 发表于 2019-4-8 09:07

谢谢楼主的分享

goldengod 发表于 2019-4-8 09:08

后学习献收藏 感谢分享

yiranww 发表于 2019-4-8 10:34

学习了!

ts0001 发表于 2019-4-8 10:50

认真学习了、感谢楼主的教程
页: [1] 2
查看完整版本: 【过验证 更新】将assets下的任意文件解压到 sd目录下的教程