日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:40日期: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這種簡(jiǎn)短的名稱。​

注意事項(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)測(cè),并且我們的項(xiàng)目中存在圖片插件加載,為了降低后期維護(hù)成本,就不進(jìn)行混淆了。3.執(zhí)行命令:resguardRelease 與assemble類似具體可以參考github

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

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

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

通過上圖我們可以看到Resources是通過resources.arsc把Resource的ID轉(zhuǎn)化成資源文件的名稱,然后交由AssetManager來加載的。 而Resources.arsc這個(gè)文件是存放在APK包中的,他是由AAPT工具在打包過程中生成的,他本身是一個(gè)資源的索引表,里面維護(hù)者資源ID、Name、Path或者Value的對(duì)應(yīng)關(guān)系,AssetManager通過這個(gè)索引表,就可以通過資源的ID找到這個(gè)資源對(duì)應(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對(duì)APK中用到的資源進(jìn)行打包,這里不對(duì)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ì)對(duì)除了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中,對(duì)APK中資源文件名使用簡(jiǎn)短無意義名稱進(jìn)行替換,給破解者制造困難,從而做到資源的相對(duì)安全。通過閱讀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í), 對(duì)資源文件名稱進(jìn)行修改,這就能夠做到資源文件名稱的替換,這樣通過使用修改過的AAPT編譯資源并進(jìn)行打包,從而達(dá)到保護(hù)資源的目的。

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

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久久国产一区二区| 国产国产精品| 青青草视频一区| 日韩va欧美va亚洲va久久| 亚洲网址在线观看| 亚洲网址在线观看| 婷婷综合福利| 国产精品自在| 麻豆成人av在线| 9999国产精品| 久久精品国产www456c0m| 伊伊综合在线| 成人日韩av| 久久99偷拍| 欧美日韩99| 国产一区久久| 国产成人久久精品一区二区三区| 97国产精品| 国产乱人伦精品一区| 免费的成人av| 日韩午夜免费| 日韩欧美一区二区三区在线观看| 成人台湾亚洲精品一区二区| 亚洲自啪免费| 精品一区亚洲| 国产精品毛片视频| 国产精品久久久久久久久免费高清| 精品久久久久久久| 日韩高清成人在线| 日韩精品久久久久久| 久久性天堂网| 久久xxxx| 麻豆精品网站| 青草综合视频| 国产日韩欧美一区二区三区 | 亚洲精华国产欧美| 日本精品不卡| 日产午夜精品一线二线三线| 国产一区二区三区免费在线| 欧美激情日韩| 国际精品欧美精品| 免费福利视频一区二区三区| 日韩一区二区三区免费播放| 人人精品亚洲| 一区二区视频欧美| 今天的高清视频免费播放成人| 日本欧美在线看| 亚洲精品一二三区区别| 视频一区国产视频| 日韩久久99| 日本免费一区二区视频| 国产精品嫩草影院在线看| 国产毛片精品| 精品网站aaa| 精品久久97| 国产精品久久久久av电视剧| 精品欧美激情在线观看| 日本欧洲一区二区| 国产精品久久乐| 日韩电影免费在线观看| 女人天堂亚洲aⅴ在线观看| 老牛国产精品一区的观看方式| 久久精品福利| 97人人精品| 中文日韩欧美| 久久精品av麻豆的观看方式| 国产精品网站在线看| 国产在线观看www| 国产麻豆综合| 日韩精品视频在线看| 久久午夜影院| 久久精品国产99久久| 天海翼精品一区二区三区| 免费在线欧美黄色| 久久要要av| 亚洲欧洲专区| 美女国产精品久久久| 婷婷成人在线| 日韩一区精品| 97国产成人高清在线观看| 亚洲深夜影院| 国产美女亚洲精品7777| 亚洲91久久| 日本a口亚洲| 成人美女视频| 日韩影片在线观看| 亚洲va中文在线播放免费| 综合激情五月婷婷| 精品国产精品久久一区免费式| 日韩精品五月天| 精品久久久网| 米奇777超碰欧美日韩亚洲| 亚洲免费毛片| 免费日韩成人| 石原莉奈一区二区三区在线观看| 99久精品视频在线观看视频| 日韩精品一卡二卡三卡四卡无卡| 国产二区精品| 国产日韩亚洲| 天堂日韩电影| 88久久精品| 国产一区久久| 精品九九在线| 中文字幕日韩欧美精品高清在线| 99视频精品视频高清免费| 视频精品一区二区| 精品视频免费| 日本一区福利在线| 久久精品影视| 免费在线观看一区| 亚洲三级网站| 久久精品国产68国产精品亚洲| 丝袜美腿诱惑一区二区三区| 日韩高清成人在线| 女人天堂亚洲aⅴ在线观看| 成人污污视频| 中文字幕亚洲在线观看| 久久久夜精品| 成人综合一区| 亚洲精选成人| 婷婷成人在线| 成人免费电影网址| 91精品一区| 免费视频一区二区| 午夜av一区| 国产综合色区在线观看| 卡一精品卡二卡三网站乱码| 日韩一区二区三区精品| 另类亚洲自拍| 久久精品中文| 成人午夜在线| 欧美国产日韩电影| 亚洲日产av中文字幕| 蜜桃一区二区三区| 91看片一区| 国产一区二区三区精品在线观看| 中文在线免费视频| 国产精品久久久久久模特 | 国产精品一区二区三区美女 | 久久久天天操| 麻豆精品一区二区综合av| 日韩激情啪啪| 免费视频最近日韩| 久久国产精品99国产| 欧美午夜不卡| 激情欧美丁香| 成人羞羞视频播放网站| 成人日韩av| 国产一区二区三区四区| 久久精品国产久精国产| 国产精品久久久免费| 国产精品亚洲综合久久| 日韩国产精品久久久久久亚洲| 久久不见久久见免费视频7| 天堂va蜜桃一区二区三区| 伊人久久成人| 制服诱惑一区二区| 久久国产精品亚洲77777| 日韩中文字幕不卡| 亚洲综合五月| 亚洲欧洲专区| 亚洲综合中文| 日韩欧美中文字幕在线视频| 亚洲区国产区| 人人精品久久| 国产精品一区亚洲| 久久精品二区亚洲w码| 国模大尺度视频一区二区| 精品久久中文| 国产一区二区三区四区五区| 国产精品99久久免费| 久草精品视频| 蜜臀国产一区| 亚州av乱码久久精品蜜桃| 亚洲一级在线| 日韩专区在线视频| 日本三级亚洲精品| 精品久久久久久久| 香蕉成人av| 中文字幕一区二区三区四区久久| 卡一卡二国产精品| 久久国产生活片100| 国产精品一站二站| 极品av在线| 久久九九国产| 黄色欧美日韩| 青青草91久久久久久久久| 精品视频97| 久久精品导航| 亚洲精品综合| 久久亚洲人体| 欧美精品一区二区久久| 亚洲综合小说| 久久精品国产网站| 99久久激情| 日本中文字幕不卡| 国产高潮在线| 国产农村妇女精品一区二区| 国产欧美一区二区三区国产幕精品| 国产v综合v|