加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 域百科网 (https://www.yubaike.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

android-加壳加固

发布时间:2022-12-09 11:18:54 所属栏目:Asp教程 来源:
导读:  comments: false

  mathjax: true

  toc: true

  android-加壳

  前篇 浅谈 Android Dex 文件 - Android dex,odex,oat,vdexasp压缩壳,art文件结构分享一个自己做的函数抽取壳 - 通过
  comments: false
 
  mathjax: true
 
  toc: true
 
  android-加壳
 
  前篇 浅谈 Android Dex 文件 - Android dex,odex,oat,vdexasp压缩壳,art文件结构分享一个自己做的函数抽取壳 - 通过内存加载DEX文件技术,完成一键DEX加固脚本 - 用AppComponentFactory实现变种爱加密壳保护的策略分析 - dpt-shell抽取壳项目源码及其逆向分析 - Android APP漏洞之战(11)——整体加壳原理和脱壳技巧详解 - #msg_header_h2_1Android App加固原理与技术历程 - APP加固种类甄别与侦查 (好文) - Android垃圾代码生成插件 - as 原生混淆 Proguard 没啥卵用
 
  Proguard的混淆方法就是对其中的类名和方法名去除其对应的意思,因为,逆向工作者可以根据类名和方法名猜出函数的意思,可以大大降低逆向难度,但是Proguard并没有对指令进行改变,所以使用Proguard进行混淆的强度比较低。
 
  整体流程
 
  ClassLoader so 文件查看符号表
 
  查看命令
 
  $ nm -D libx8a3pjbix.so
  as
 
  只显示 T (方法), 加个 awk
 
  $ nm -D libx8a3pjbix.so | awk '{if($2=="T"){print $3}}'
  踩坑 java 壳 套 kotlin 源 闪退
 
  报错找不到资源 id: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jared.testshell/com.jared.apktest.MainActivity}: android.content.res.Resources$NotFoundException: Drawable com.jared.apktest:dimen/abc_text_size_display_4_material with resource ID #0x7f050040
 
  so 库开发 so 库里脱壳 ida 分析 so hook 插件化 插件框架对比 源码记录 混淆 实测加固流程
 
  直接把 apk 当成 zip 解压到一个 目录 a 中
 
  让后对 dex, so 加固处理
 
  然后把 目录 a 用 zip 压缩为 apk 文件
 
  压缩过程中, resources.arsc 文件不能压缩, 要以文档形式存储 ZIP_STORED, 不然会出现这个错误 [安装到 安卓 11+ (API 级别 30) 机子未 4 字节对齐 或者 resources.arsc 被压缩了](#安装到 安卓 11+ (API 级别 30) 机子未 4 字节对齐 或者 resources.arsc 被压缩了)
 
  对压缩好的 apk 进行 4 字节对齐
 
  $ zipalign.exe -p -f -v 4 I:/unalign.apk I:/align.apk
  对 4 字节对齐好的 apk, 用 apksigner (不是 jarsigner) 进行签名.
 
  $ java -jar apksigner.jar sign -verbose --v1-signing-enabled false --v2-signing-enabled true --ks "E:/test_jks.jks" --ks-key-alias test_alias --ks-pass pass:test_pass --key-pass pass:test_pass --out I:/signed.apk --in I:/align.apk
  踩坑 apktool 编译 apk 时报 values-v31 错误
 
  报错: res\values-v31\colors.xml:3: error: Error: Resource is not public.
 
  这个错误时 sdk 使用了 31+ 造成的, apktool 还不支持 31+,
 
  apktool 编译 apk 时引用库 sdk 超过 30
 
  报错
 
  Execution failed for task ':app_shell:checkDebugAarMetadata'.
  > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
     > The minCompileSdk (31) specified in a
       dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
       is greater than this module's compileSdkVersion (android-30).
       Dependency: androidx.appcompat:appcompat:1.4.1.
       AAR metadata file: C:\Users\wilker\.gradle\caches\transforms-3\34a5f42d2f1863af6e2f0b71a2ab8437\transformed\appcompat-1.4.1\META-INF\com\android\build\gradle\aar-metadata.properties.
  壳 apk 里引用库 androidx.appcompat:appcompat:1.4.1 是使用 sdk 31 编译的
 
  apktool 编译 apk 时报错 requestLegacyExternalStorage
 
  报错: AndroidManifest.xml:42: error: No resource identifier found for attribute 'requestLegacyExternalStorage' in package 'android'
 
  壳运行时 启动 activity 失败
 
  报错
 
  Process: com.rmgrummy.pro, PID: 15023
      java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.rmgrummy.pro/com.yang.androidaar.ReferrerActivity}: java.lang.ClassNotFoundException: Didn't find class "com.yang.androidaar.ReferrerActivity" on path: DexPathList[[zip file "/data/user/0/com.rmgrummy.pro/app_payload_odex/payload.apk"],nativeLibraryDirectories=[/data/user/0/com.rmgrummy.pro/app_payload_lib, /system/lib, /vendor/lib]]
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2570)
  因为在 源 apk 中配置了启动项为 com.yang.androidaar.ReferrerActivity, 而壳中有没有去 loadClass
 
  脱壳后运行 源 apk 时不支持 kotlin 反射
 
  报错: kotlin.jvm.KotlinReflectionNotSupportedError: Kotlin reflection implementation is not found at runtime. Make sure you have kotlin-reflect.jar in the classpath
 
  报错 java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter cookieJar
 
  可能是 源 apk 里引用的 第三方 sdk 里面有使用 kotlin 编译的库, 所以报了这个错误
 
  脱壳后运行 源 apk 时找不到对应 cpu 的 so 库
 
  报 Android 错找不到对应 cpu so 的弹窗提示
 
  虽然脱壳后有对应的 so 库在指定 cpu 目录, 但是报错
 
  脱壳后运行 源 apk 时找不到对应 cpu 的 dex
 
  报错
 
  java.lang.IncompatibleClassChangeError: Structural change of androidx.fragment.app.Fragment is hazardous (/data/user/0/com.rmgrummy.pro/app_payload_odex/payload.dex at compile time, /data/app/com.rmgrummy.pro-1/oat/x86/base.odex at runtime): Virtual method count off: 179 vs 184
      Landroidx/fragment/app/Fragment; (Compile time):
       Static fields:
  在调用显示界面的代码时报了这个错误, 是因为 源 apk 打包时没有打运行机子 cpu 的 so
 
  安装到 安卓 11+ (API 级别 30) 机子未 4 字节对齐 或者 resources.arsc 被压缩了
 
  报错: adb: failed to install xxx.apk: Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]
 
  apk 包未 4 字节对齐
 
  $ zipalign -p -f -v 4 in_unalign.apk out_align.apk
  参考: Android之通过 apksigner 对 apk 进行 手动签名 -
 
  安装到 安卓 11+ 机子报错至少要 scheme v2
 
  报错: ERROR: Target SDK version 32 requires a minimum of signature scheme v2; the APK is not signed with this or a later signature scheme
 
  解压 native 库失败
 
  报错: INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2
 

(编辑:百客网 - 域百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章