日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

發布時間:2025/6/17 Android 26 豆豆

文章目錄

  • 一、resources.arsc 資源映射表 混淆
  • 二、resources.arsc 資源映射表二進制格式分析
  • 三、參考資料



資源混淆時 , 需要修改混淆 resources.arsc 資源映射表 的 全局字符串池 和 包數據下的 資源名稱字符串池 ;





一、resources.arsc 資源映射表 混淆



在上一篇博客 【Android 安裝包優化】資源混淆 ( AAPT2 資源編譯工具 | resources.arsc 資源映射表 工作機制 ) 中分析了 Android 應用根據 ID 查找資源的機制 , 是從 resources.arsc 資源映射表 中查找相應資源的路徑 ;

資源混淆 的本質就是將 resources.arsc 資源映射表 中的 資源路徑 進行混淆 , 并且相應的將對應的 資源移動到對應的混淆后的路徑 中 ;


資源混淆步驟 :

① 解析二進制文件 : 解析 resources.arsc 資源映射表混淆 二進制文件 , 獲取字符串池中的資源名稱字符串 ;

② 混淆資源路徑 : 將字符串池中的資源路徑使用無意義的字符串替換 ;

③ 修改資源路徑 : 根據 ② 步驟中的無意義字符串路徑 , 修改 res 中目錄中的資源路徑 ;

④ 打包 : 使用 7-Zip 工具進行打包 , 對齊 , 簽名 , 然后就可以發布了 ;



ArscBlamer 開源項目 : https://github.com/google/android-arscblamer
;

Google 給出了解析 resources.arsc 資源映射表 的開源項目 ArscBlamer , 該工具一個命令行工具 , 用于解析 Android 應用的 resources.arsc 資源映射表文件 , 并且可以提取其中的相關信息 ;

借助 ArscBlamer 工具 , 可以輸出所有資源的配置信息 , 查看 類型 , 變量 , 大小 , 空實例 , 實例個數 , 屏幕像素密度 等資源信息 ;


Android 源碼中也有相關內容 : frameworks/base/include/androidfw/ResourceTypes.h





二、resources.arsc 資源映射表二進制格式分析



resources.arsc 資源映射表 二進制文件結構 :

  • 文件頭 : 文件開始是 文件頭 , 包含 121212 字節的數據 ;

  • 全局字符串池 : 文件頭后面是字符串池 , 內容是字符串 , 如 “res/mipmap/ic_launcher.png” , “res/layout/activity_main.xml” 等字符串 ;

  • 包數據 : 字符串池后面是包數據 , 其中包含包名等數據 ;

包數據中包含了 資源類型字符串池 , 資源名稱字符串池 , 以及資源分組匹配規范 等數據 , 這里我們關注 資源類型字符串池 和 資源名稱字符串池 ;

  • 類型字符串池 : 包含了資源的類型 , “anim” 動畫 , “attr” 屬性 , “drawable” 圖片 , “color” 顏色 , “mipmap” 圖片 , “layout” 布局 等類型字符串 ; 是 R.layout.activity_main.xml 中的中間部分組成 ;

  • 名稱字符串池 : 資源的名稱 , 如 “activity_main” , “ic_launcher” 等資源的名稱 , 注意該名稱不帶后綴 ; 是 R.layout.activity_main.xml 中的后面部分組成 ;

  • Spec 配置表 : 包含資源類型 ID , 指向資源類型字符串池 , 每個資源類型都有對應的一塊配置數據塊 , 數據塊中的內容就是該類型的具體的每個資源的名稱 ; drawable 類型有一個配置數據塊 , layout 類型也對應有一個配置數據塊 ; 每個資源類型數據塊都包含以下內容 , Spec 配置表中有若干如下數據塊 ;

Spec 配置表 的 drawable 資源類型對應的數據塊中存儲這資源 ID , 給定一個資源 ID , 如 R.drawable.ic_launcher , 在該 Spec 配置表 中查找到 該 ID , 然后 查找其對應的路徑 , 從 資源名稱字符串池 找到 ID 對應的字符串 ic_launcher , 則可以得到其最終路徑 res/drawable/ic_launcher ;


resources.arsc 資源映射表格式 :


給定一個 int 類型的 ID 常量 , 到 resources.arsc 資源映射表 中查詢對應的文件路徑 ;

要查找的文件的實際路徑在字符串池中 , 如 “res/mipmap/ic_launcher.png” , “res/layout/activity_main.xml” 等字符串文件路徑地址 ;

給定的 ID 如 : “kim.hsl.svg.R.layout.activity_main” , 可以分為 333 部分 ,

  • 包數據 “kim.hsl.svg.R” ,
  • 資源類型 “layout” ,
  • 資源名稱 “activity_main”

資源混淆時 , 需要修改混淆 resources.arsc 資源映射表 的 全局字符串池 和 包數據下的 資源名稱字符串池 ;





三、參考資料



參考官方文檔 :

  • 縮減、混淆處理和優化應用 : https://developer.android.google.cn/studio/build/shrink-code
  • APK 構建流程 : https://developer.android.google.cn/studio/build
  • AAPT2 工具官方文檔 : https://developer.android.google.cn/studio/command-line/aapt2?hl=zh_cn
  • ArscBlamer 開源項目 : https://github.com/google/android-arscblamer
    ;
    Android 源碼中資源類型相關內容 : frameworks/base/include/androidfw/ResourceTypes.h

參考之前的博客資源 :

  • 【Android 安全】DEX 加密 ( ProGuard 混淆 | -keepclassmembers 混淆效果 | -keepclasseswithmembernames 混淆效果 )
  • 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的報錯信息 | Proguard 混淆映射文件 mapping.txt )
  • 【Android 安全】DEX 加密 ( Proguard 混淆 | 將混淆后的報錯信息轉為原始報錯信息 | retrace.bat 命令執行目錄 | 暴露更少信息 )
  • 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的報錯信息 | Proguard 混淆映射文件 mapping.txt )

博客資源 :

  • GitHub 項目源碼 : https://github.com/han1202012/SVG

  • 下載地址 :

總結

以上是生活随笔為你收集整理的【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。