电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Android 資源混淆的方案及注意事項(xiàng)

瀏覽:6日期:2022-09-18 13:12:54
目錄原理注意事項(xiàng)使用方法一些細(xì)節(jié)附:美團(tuán)的資源混淆方案Android查找資源的流程AAPT資源混淆原理

Android的資源類型是很多的,比如說drawable,string,layout等,aapt在打包時(shí),會(huì)將這些資源的名稱,id和位置打包進(jìn)一個(gè)resources.arsc包。 通過AndroidStudio可以查看resouces.arsc文件的內(nèi)容。

Android 資源混淆的方案及注意事項(xiàng)

AndResGuard大致上做的就是修改資源的名稱和路徑,修改為a b c這種簡短的名稱。​

注意事項(xiàng)

如果你的資源,存在使用插件化的方式加載的,即:使用名稱去找id,再用id去加載資源,由于資源的名稱已經(jīng)修改過了,所以會(huì)無法找到id。這種情況不能混淆。框架中提供了添加白名單的方法。 但是三方sdk中隱藏的插件化方式有點(diǎn)防不勝防。官方提供了常見的sdk白名單​

使用方法

我使用的是gradle集成的方式

1.添加gradle配置2.設(shè)置白名單,我設(shè)置了除了layout以外所有的資源不進(jìn)行混淆,因?yàn)槲业男枨笫菓?yīng)付安全監(jiān)測,并且我們的項(xiàng)目中存在圖片插件加載,為了降低后期維護(hù)成本,就不進(jìn)行混淆了。3.執(zhí)行命令:resguardRelease 與assemble類似具體可以參考github

一些細(xì)節(jié) mappingFile要不要加?我選擇不加,加了之后,會(huì)keep住資源的路徑,如果對增量包大小有要求的,可以加。不加的話,包體積可以進(jìn)一步減小,并在一定程度上提高反編譯的難度。 mergeDuplicationedRes要不要加?我是加的。是否會(huì)造成什么問題?應(yīng)該是不會(huì)的。因?yàn)榭蚣鼙举|(zhì)上修改的是圖片的指向的路徑,圖片的名稱和id都沒有修改,所以不管是正常引用和插件化加載都是沒問題的。附:美團(tuán)的資源混淆方案Android查找資源的流程

在Android系統(tǒng)中,每一個(gè)應(yīng)用程序一般都會(huì)配置很多資源,用來適配不同密度、大小和方向的屏幕,以及適配不同的國家、地區(qū)和語言等等。這些資源是在應(yīng)用程序運(yùn)行時(shí)自動(dòng)根據(jù)設(shè)備的當(dāng)前配置信息進(jìn)行適配的。這也就是說,給定一個(gè)相同的資源ID,在不同的設(shè)備配置之下,查找到的可能是不同的資源。 這個(gè)查找過程對應(yīng)用程序來說,是完全透明的,這個(gè)過程主要是靠Android資源管理框架來完成的,而Android資源管理框架實(shí)際是由AssetManager和Resources兩個(gè)類來實(shí)現(xiàn)的。其中,Resources類可以根據(jù)ID來查找資源,而AssetManager類根據(jù)文件名來查找資源。事實(shí)上,如果一個(gè)資源ID對應(yīng)的是一個(gè)文件,那么Resources類是先根據(jù)ID來找到資源文件名稱,然后再將該文件名稱交給AssetManager類來打開對應(yīng)的文件的。 基本流程如下圖:

Android 資源混淆的方案及注意事項(xiàng)

通過上圖我們可以看到Resources是通過resources.arsc把Resource的ID轉(zhuǎn)化成資源文件的名稱,然后交由AssetManager來加載的。 而Resources.arsc這個(gè)文件是存放在APK包中的,他是由AAPT工具在打包過程中生成的,他本身是一個(gè)資源的索引表,里面維護(hù)者資源ID、Name、Path或者Value的對應(yīng)關(guān)系,AssetManager通過這個(gè)索引表,就可以通過資源的ID找到這個(gè)資源對應(yīng)的文件或者數(shù)據(jù)。

AAPT

AAPT是Android Asset Packaging Tool的縮寫,它存放在SDK的tools/目錄下,AAPT的功能很強(qiáng)大,可以通過它查看查看、創(chuàng)建、更新壓縮文件(如 .zip文件,.jar文件, .apk文件), 它也可以把資源編譯為二進(jìn)制文件,并生成resources.arsc, AAPT這個(gè)工具在APK打包過程中起到了非常重要作用,在打包過程中使用AAPT對APK中用到的資源進(jìn)行打包,這里不對AAPT這個(gè)工具做過多的討論,只看一下AAPT這個(gè)工具在打包過程中起到的作用,下圖是AAPT打包的流程:

Android 資源混淆的方案及注意事項(xiàng)

AAPT這個(gè)工具在打包過程中主要做了下列工作:

把”assets”和”res/raw”目錄下的所有資源進(jìn)行打包(會(huì)根據(jù)不同的文件后綴選擇壓縮或不壓縮),而”res/”目錄下的其他資源進(jìn)行編譯或者其他處理(具體處理方式視文件后綴不同而不同,例如:”.xml”會(huì)編譯成二進(jìn)制文件,”.png”文件會(huì)進(jìn)行優(yōu)化等等)后才進(jìn)行打包; 會(huì)對除了assets資源之外所有的資源賦予一個(gè)資源ID常量,并且會(huì)生成一個(gè)資源索引表resources.arsc; 編譯AndroidManifest.xml成二進(jìn)制的XML文件; 把上面3個(gè)步驟中生成結(jié)果保存在一個(gè)*.ap_文件,并把各個(gè)資源ID常量定義在一個(gè)R.java中; 資源混淆

我們知道在系統(tǒng)的Proguard中,對APK中資源文件名使用簡短無意義名稱進(jìn)行替換,給破解者制造困難,從而做到資源的相對安全。通過閱讀AAPT編譯資源的代碼,我們發(fā)現(xiàn)修改AAPT在處理資源文件相關(guān)的源碼是能夠做到資源文件名的替換,下面是Resource.cpp中makeFileResources()的修改的代碼片段:

static status_t makeFileResources(Bundle* bundle, const sp<AaptAssets>& assets, ResourceTable* table, const sp<ResourceTypeSet>& set, const char* resType) {String8 type8(resType);String16 type16(resType);bool hasErrors = false;ResourceDirIterator it(set, String8(resType));ssize_t res;while ((res=it.next()) == NO_ERROR) { if (bundle->getVerbose()) {printf(' (new resource id %s from %s)n', it.getBaseName().string(), it.getFile()->getPrintableSource().string()); } String16 baseName(it.getBaseName()); const char16_t* str = baseName.string(); const char16_t* const end = str + baseName.size(); while (str < end) {if (!((*str >= ’a’ && *str <= ’z’)|| (*str >= ’0’ && *str <= ’9’)|| *str == ’_’ || *str == ’.’)) { fprintf(stderr, '%s: Invalid file name: must contain only [a-z0-9_.]n', it.getPath().string()); hasErrors = true;}str++; } String8 resPath = it.getPath(); resPath.convertToResPath(); String8 obfuscationName; String8 obfuscationPath = getObfuscationName(resPath, obfuscationName); table->addEntry(SourcePos(it.getPath(), 0), String16(assets->getPackage()), type16, baseName, // String16(obfuscationName), String16(obfuscationPath), // resPath NULL, &it.getParams()); assets->addResource(it.getLeafName(), obfuscationPath/*resPath*/, it.getFile(), type8);}return hasErrors ? UNKNOWN_ERROR : NO_ERROR; }

上述代碼是在ResourceTable和Assets中添加資源文件時(shí), 對資源文件名稱進(jìn)行修改,這就能夠做到資源文件名稱的替換,這樣通過使用修改過的AAPT編譯資源并進(jìn)行打包,從而達(dá)到保護(hù)資源的目的。

以上就是Android 資源混淆的使用及注意事項(xiàng)的詳細(xì)內(nèi)容,更多關(guān)于Android 資源混淆的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | LED太阳能中国结|发光红灯笼|灯杆造型灯|节日灯|太阳能灯笼|LED路灯杆装饰造型灯-北京中海轩光电 | 水厂污泥地磅|污泥处理地磅厂家|地磅无人值守称重系统升级改造|地磅自动称重系统维修-河南成辉电子科技有限公司 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 苗木价格-苗木批发-沭阳苗木基地-沭阳花木-长之鸿园林苗木场 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 微妙网,专业的动画师、特效师、CG模型设计师网站! - wmiao.com 超声波电磁流量计-液位计-孔板流量计-料位计-江苏信仪自动化仪表有限公司 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 称重传感器,测力传感器,拉压力传感器,压力变送器,扭矩传感器,南京凯基特电气有限公司 | 共享雨伞_共享童车_共享轮椅_共享陪护床-共享产品的领先者_有伞科技 | 长城人品牌官网| 心得体会网_心得体会格式范文模板 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 真空泵维修保养,普发,阿尔卡特,荏原,卡西亚玛,莱宝,爱德华干式螺杆真空泵维修-东莞比其尔真空机电设备有限公司 | 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 生产自动包装秤_颗粒包装秤_肥料包装秤等包装机械-郑州鑫晟重工科技有限公司 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 【365公司转让网】公司求购|转让|资质买卖_股权转让交易平台 | 全国冰箱|空调|洗衣机|热水器|燃气灶维修服务平台-百修家电 | 制冷采购电子商务平台——制冷大市场 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 江西自考网-江西自学考试网| hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 焊接减速机箱体,减速机箱体加工-淄博博山泽坤机械厂 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 色油机-色母机-失重|称重式混料机-称重机-米重机-拌料机-[东莞同锐机械]精密计量科技制造商 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 岸电电源-60HZ变频电源-大功率变频电源-济南诚雅电子科技有限公司 | 玖容气动液压设备有限公司-气液增压缸_压力机_增压机_铆接机_增压器 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 雨燕360体育免费直播_雨燕360免费NBA直播_NBA篮球高清直播无插件-雨燕360体育直播 | 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 河南中专学校|职高|技校招生-河南中职中专网 | 协议书_协议合同格式模板范本大全 | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 |