相关文章推荐
调皮的凉面  ·  Error: Unknown ...·  1 年前    · 
帅气的火腿肠  ·  【Java AWT ...·  1 年前    · 

【错误记录】Android 应用运行报错 ( java.lang.VerifyError: Verifier rejected class androidx. | 逆向中遇到的问题 )

文章目录

一、报错信息

二、问题分析





一、报错信息


从 DEX 文件加载 Activity 组件 , 运行时报如下错误 ;


2021-12-12 14:02:52.432 5342-5342/com.example.classloader_demo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.classloader_demo, PID: 5342
    java.lang.VerifyError: Verifier rejected class androidx.appcompat.app.WindowDecorActionBar: androidx.appcompat.view.ActionMode androidx.appcompat.app.WindowDecorActionBar.startActionMode(androidx.appcompat.view.ActionMode$Callback) failed to verify: androidx.appcompat.view.ActionMode androidx.appcompat.app.WindowDecorActionBar.startActionMode(androidx.appcompat.view.ActionMode$Callback): [0x2A] register v0 has type Precise Reference: androidx.appcompat.app.WindowDecorActionBar$ActionModeImpl but expected Reference: androidx.appcompat.view.ActionMode (declaration of 'androidx.appcompat.app.WindowDecorActionBar' appears in /data/app/com.example.classloader_demo-F2fgfWcEO4AIIt49r9aB1w==/base.apk)
        at androidx.appcompat.app.AppCompatDelegateImpl.initWindowDecorActionBar(AppCompatDelegateImpl.java:557)
        at androidx.appcompat.app.AppCompatDelegateImpl.getSupportActionBar(AppCompatDelegateImpl.java:537)
        at androidx.appcompat.app.AppCompatDelegateImpl.onPostResume(AppCompatDelegateImpl.java:679)
        at androidx.appcompat.app.AppCompatActivity.onPostResume(AppCompatActivity.java:241)
        at android.app.Activity.performResume(Activity.java:7325)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3814)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3854)
        at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:51)
        at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:145)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)






二、问题分析


这是从 Dex 文件中加载 Activity 组件类 , 然后启动该 Activity 组件 , 报上述错误 ;


Activity 组件类加载成功 , 执行时报错 ;


错误是与类加载方式相关 ;


加载该 Activity 组件类时 , 先创建 DexClassLoader , 并设置其 父类节点为 BootClassLoader , 然后使用 DexClassLoader 实例对象作为 PathClassLoader 的父节点 ;


最终加载到该 Activity 组件并启动该组件时 , 报上述错误 ;

image.png



使用 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 替换 LoadedApk 中的类加载器 | 加载 DEX 文件中的 Activity 类并启动成功 ) 中的方案是可以执行成功的 ;


【Groovy】xml 序列化 ( 使用 StreamingMarkupBuilder 生成 xml 数据 | mkp.xmlDeclaration() 生成 xml 版本数据 ) 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 ) 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 设置 xml 标签内容 | 设置 xml 标签属性 ) 【Groovy】json 字符串反序列化 ( 使用 JsonSlurper 进行 json 字符串反序列化 | 根据 map 集合构造相关类 ) 【Groovy】json 序列化 ( 类对象转为 json 字符串 | 使用 JsonBuilder 进行转换 | 使用 JsonOutput 进行转换 | 将 json 字符串格式化输出 ) Android逆向:resource.arsc文件解析(Config List)
resource.arsc是APK打包过程中生成一个重要的文件,主要存储了整个应用哦中的资源索引。但是这个文件是一个二进制文件,并不可读,所以本文就通过解析它的二进制内容来读懂这个文件。
是时候来一波逆向技术分析了之Android Resources.arsc
近日,我国在中国文昌航天发射场,用长征五号遥四运载火箭成功发射首次火星探测任务天问一号探测器,火箭飞行约2167秒后,成功将探测器送入预定轨道,开启火星探测之旅,迈出了我国行星探测第一步
【Groovy】xml 序列化 ( 使用 StreamingMarkupBuilder 生成 xml 数据 | mkp.xmlDeclaration() 生成 xml 版本数据 ) 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 标签闭包下创建子标签 | 使用 MarkupBuilderHelper 添加 xml 注释 ) 【Groovy】xml 序列化 ( 使用 MarkupBuilder 生成 xml 数据 | 设置 xml 标签内容 | 设置 xml 标签属性 ) 【Groovy】json 字符串反序列化 ( 使用 JsonSlurper 进行 json 字符串反序列化 | 根据 map 集合构造相关类 ) 【Groovy】json 序列化 ( 类对象转为 json 字符串 | 使用 JsonBuilder 进行转换 | 使用 JsonOutput 进行转换 | 将 json 字符串格式化输出 )