【反编译步骤记录】修复Uni-app依赖包uniapp-v8-release.aar中WXSQLiteOpenHelper数据库注入漏洞

【反编译步骤记录】修复Uni-app依赖包uniapp-v8-release.aar中WXSQLiteOpenHelper数据库注入漏洞

业务场景

​ 近期APP安全检查扫描出了一系列漏洞,由于部分漏洞存在于第三方jar或aar中,Uni-app线上打包无法解决,只能通过本地安卓离线打包的方式,反编译依赖包中的.class文件为.java文件,修改业务代码后再重新编译为.class文件,最后替换原来的.class文件,重新打包即可

技术要求

​ Java

开发工具

​ Android Studio

版本参考

  • Android Studio:2021.3.1
  • Java:1.8
  • Gradle:6.5
  • Android-SDK@3.95.81954_20231030

以下是具体的操作流程

漏洞描述

在这里插入图片描述

在这里插入图片描述

由此可知,是由于Uni-app提供的离线aar依赖 uniapp-v8-release\jars\classes.jar!\com\taobao\weex\appfram\storage\WXSQLiteOpenHelper.class createTableIfNotExists方法的问题。虽然Android Studio提供的反编译视图让我们快速定位到了漏洞位置,可我们却不能编辑文件(File is read-only),因此我们需要反编译才行

在这里插入图片描述

首先,使用Android Studio创建一个空项目

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

切换至Project视图

在这里插入图片描述

在这里插入图片描述

app/src/main/java下创建与uniapp-v8-release.aar中WXSQLiteOpenHelper.class文件所在包中相同路径的包名,例如:WXSQLiteOpenHelper.class在com.taobao.weex.appfram.storeage包下,则app/src/main/java下也需要创建com.taobao.weex.appfram.storeage的包名

在这里插入图片描述

创建相同包名com.taobao.weex.appfram.storeage

在这里插入图片描述

在这里插入图片描述

在com.taobao.weex.appfram.storeage下创建WXSQLiteOpenHelper.class同名的java文件WXSQLiteOpenHelper.java

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将uniapp-v8-release.aar中WXSQLiteOpenHelper.class中的内容复制到WXSQLiteOpenHelper.java中,找到漏洞所在的createTableIfNotExists方法

在这里插入图片描述

修改sql查询语句,这里简单写的样例代码,具体根据实际业务需求写就行

在这里插入图片描述

private void createTableIfNotExists(@NonNull SQLiteDatabase db) {
        Cursor cursor = null;

        try {
            String sql = "SELECT DISTINCT tbl_name FROM sqlite_master WHERE tbl_name = ?";
            String[] selectionArgs = new String[]{"default_wx_storage"};
            cursor = db.rawQuery(sql, selectionArgs);
            if (cursor == null || cursor.getCount() <= 0) {
                db.execSQL("CREATE TABLE IF NOT EXISTS default_wx_storage (key TEXT PRIMARY KEY,value TEXT NOT NULL,timestamp TEXT NOT NULL,persistent INTEGER DEFAULT 0)");
                return;
            }
        } catch (Exception var7) {
            var7.printStackTrace();
            return;
        } finally {
            if (cursor != null) {
                cursor.close();
            }

        }

    }

至此,代码改好了,会发现有些地方爆红,没关系,这是因为新项目中没有导入依赖,导入一下uniapp-v8-release.aar即可

在这里插入图片描述

将原来的uniapp-v8-release.aar复制到app/libs目录下

在这里插入图片描述

app/build.gradle中加入以下代码,然后点击右上角的Sync Now同步一下

implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])

在这里插入图片描述

控制台显示BUILD SUCCESSFUL in 1s即为同步成功,这时候会发现WXSQLiteOpenHelper.java中的代码就不爆红了

在这里插入图片描述

在这里插入图片描述

接下来,我们需要重新打包将WXSQLiteOpenHelper.java编译生成一个新的WXSQLiteOpenHelper.class文件,在右上角gradle中先clean一下,然后再build

在这里插入图片描述

build过程中会报Type com.taobao.weex.appfram.storage.WXSQLiteOpenHelper is defined multiple times...命名冲突之类的错,没关系不用管,因为WXSQLiteOpenHelper.class已经生成了

在这里插入图片描述

找到app\build\intermediates\javac\debug\classes\com\taobao\weex\appfram\storage下的WXSQLiteOpenHelper.class文件,会发现build后的代码是我们新修改后的内容,则代表编译成功!

在这里插入图片描述

最后一步就是将WXSQLiteOpenHelper.class文件粘贴替换原有项目的uniapp-v8-release.aar\classes.jar\com\taobao\weex\appfram\storage中了,我这边是用的WinRAR打开替换的

在这里插入图片描述

替换后,打开原项目,会发现External LibraryWXSQLiteOpenHelper.class依旧是老代码,gradle并未更新依赖

在这里插入图片描述

将原项目simpleDemo/build.gradledependencies中的implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])这行代码注释一下,点击右上角的Sync Now,再将这行代码放开,再Sync Now一下

在这里插入图片描述

在这里插入图片描述

再打开External Library中WXSQLiteOpenHelper.class文件,代码更新成功!搞定!!

在这里插入图片描述

在执行某个步骤时也许会出现一些意外状况导致报错,不要慌,这在开发过程中是很正常的,善用搜索功能,汲取他人经验,咱也能行!!

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值