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

您的位置:首頁技術文章
文章詳情頁

Android 資源混淆的方案及注意事項

瀏覽:44日期:2022-09-18 13:12:54
目錄原理注意事項使用方法一些細節附:美團的資源混淆方案Android查找資源的流程AAPT資源混淆原理

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

Android 資源混淆的方案及注意事項

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

注意事項

如果你的資源,存在使用插件化的方式加載的,即:使用名稱去找id,再用id去加載資源,由于資源的名稱已經修改過了,所以會無法找到id。這種情況不能混淆??蚣苤刑峁┝颂砑影酌麊蔚姆椒?。 但是三方sdk中隱藏的插件化方式有點防不勝防。官方提供了常見的sdk白名單​

使用方法

我使用的是gradle集成的方式

1.添加gradle配置2.設置白名單,我設置了除了layout以外所有的資源不進行混淆,因為我的需求是應付安全監測,并且我們的項目中存在圖片插件加載,為了降低后期維護成本,就不進行混淆了。3.執行命令:resguardRelease 與assemble類似具體可以參考github

一些細節 mappingFile要不要加?我選擇不加,加了之后,會keep住資源的路徑,如果對增量包大小有要求的,可以加。不加的話,包體積可以進一步減小,并在一定程度上提高反編譯的難度。 mergeDuplicationedRes要不要加?我是加的。是否會造成什么問題?應該是不會的。因為框架本質上修改的是圖片的指向的路徑,圖片的名稱和id都沒有修改,所以不管是正常引用和插件化加載都是沒問題的。附:美團的資源混淆方案Android查找資源的流程

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

Android 資源混淆的方案及注意事項

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

AAPT

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

Android 資源混淆的方案及注意事項

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

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

我們知道在系統的Proguard中,對APK中資源文件名使用簡短無意義名稱進行替換,給破解者制造困難,從而做到資源的相對安全。通過閱讀AAPT編譯資源的代碼,我們發現修改AAPT在處理資源文件相關的源碼是能夠做到資源文件名的替換,下面是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中添加資源文件時, 對資源文件名稱進行修改,這就能夠做到資源文件名稱的替換,這樣通過使用修改過的AAPT編譯資源并進行打包,從而達到保護資源的目的。

以上就是Android 資源混淆的使用及注意事項的詳細內容,更多關于Android 資源混淆的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品一线| 欧美91在线| 亚洲黄色免费av| 国产一区国产二区国产三区| 精品国产麻豆| 成人在线超碰| 国产粉嫩在线观看| 久久精品影视| 午夜精品网站| 石原莉奈在线亚洲三区| 亚洲香蕉视频| 国产日韩免费| 国产精品一区二区三区av| 国产日韩欧美一区| 美女高潮久久久| 国产aⅴ精品一区二区三区久久| 精品久久亚洲| 精品少妇一区| 激情黄产视频在线免费观看| 91精品推荐| 亚洲色诱最新| 亚洲精品伊人| 国产麻豆一区| 欧美激情另类| 在线视频观看日韩| 亚洲欧洲一区二区天堂久久| 中文精品电影| 久久99偷拍| 欧美精品日日操| 极品裸体白嫩激情啪啪国产精品| 欧美一级专区| 欧美一区自拍| 精品一区二区三区的国产在线观看 | 色偷偷偷在线视频播放| 欧美成人基地| 亚洲人亚洲人色久| 国产精品久久免费视频| 日韩一区电影| 亚洲免费毛片| 国产精品yjizz视频网| 一本一道久久a久久精品蜜桃| 亚洲精品影视| 国产一区二区三区日韩精品| 播放一区二区| 性欧美长视频| 免费在线播放第一区高清av| 免费一区二区视频| 国产精品videosex极品| 国产成人精品亚洲日本在线观看| 亚洲专区在线| 国产精品日本一区二区不卡视频 | 国产探花在线精品一区二区| 欧美一区免费| 日本成人中文字幕| 在线日韩中文| 国产精品人人爽人人做我的可爱| 国产+成+人+亚洲欧洲在线| 日韩高清一区在线| 久久精品国产网站| 日本不卡中文字幕| 国产麻豆一区| 波多野结衣一区| 国产激情一区| 欧美日本不卡高清| 国产精品女主播一区二区三区| 日韩一区二区在线免费| 激情黄产视频在线免费观看| 国产精品日韩| 热久久久久久久| 欧美精品黄色| 日韩激情中文字幕| 九色porny丨国产首页在线| 午夜av一区| 国产亚洲毛片| 午夜久久影院| 日本一区二区中文字幕| 国产精品亚洲二区| 亚洲激情五月| 久久在线91| 午夜欧美精品| 久久99免费视频| 伊人久久成人| 美女在线视频一区| 亚洲大全视频| 精品国产欧美日韩一区二区三区| 蜜乳av另类精品一区二区| 亚洲精品福利电影| 国产精品久久久久久模特| 超碰99在线| 精品美女在线视频| 日韩欧乱色一区二区三区在线| 成人小电影网站| 日本成人精品| 欧美亚洲人成在线| 日韩精品一级中文字幕精品视频免费观看 | 97精品国产| 日韩国产91| 亚洲一级在线| 亚洲福利一区| 久久精品欧美一区| 精品国模一区二区三区| 精品国产乱码久久久久久樱花| 日韩av一级片| 国产色综合网| 欧美特黄一区| 亚洲高清av| 999视频精品| 久久精选视频| 999久久久亚洲| 91精品国产自产在线观看永久∴| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 久久免费国产| 日韩中文视频| 日韩精品诱惑一区?区三区| 国产66精品| 欧美国产一级| 亚洲黄色网址| 视频小说一区二区| 久久精品观看| 欧美高清一区| 91精品高清| 性欧美精品高清| 亚洲乱码久久| 日韩欧美中文字幕一区二区三区| 亚洲综合福利| 亚洲精品日韩久久| 人人爱人人干婷婷丁香亚洲| 欧美专区一区| 久久xxx视频| 国产精品久久久久久久免费观看 | 亚洲精品三级| 国产欧美二区| 日韩av二区| 欧美日韩色图| 好看的亚洲午夜视频在线| 日韩午夜av在线| 午夜一级久久| 免费国产亚洲视频| 亚洲精品成人一区| 国产欧美一区二区三区米奇| 国产福利资源一区| 蜜桃视频在线网站| 午夜久久一区| 婷婷亚洲成人| 麻豆久久一区二区| 免费在线小视频| 九九久久婷婷| 亚洲精品动态| 美女久久久精品| 亚洲天堂一区二区| 激情五月色综合国产精品| 亚洲综合精品| 亚洲一区导航| 欧美国产日本| 成人精品中文字幕| 亚洲一区二区免费看| 日韩**一区毛片| 精品视频一区二区三区在线观看 | 欧美va天堂在线| 日韩精品亚洲专区| 精品一区二区三区中文字幕视频 | 91一区二区| 日韩午夜高潮| 国产精品亚洲综合久久| 91精品韩国| 日本伊人久久| 日韩美女一区二区三区在线观看| 亚洲一区国产| 免费在线亚洲| 美女亚洲一区| 欧美中文高清| 日韩中文在线电影| 蜜臀国产一区二区三区在线播放| 国产精品网在线观看| 视频一区中文| 国产精品qvod| 99国产精品| 精品丝袜久久| 久久国产66| 精品视频99| 日本大胆欧美人术艺术动态| 精品日本视频| 亚洲精选91| 亚洲电影有码| 欧美日韩亚洲一区| 99热精品在线| 国产精品亚洲产品| 亚洲欧美一区在线| 久久久久黄色| 一级欧美视频| 色88888久久久久久影院| 日韩精品视频中文字幕| 日本一区二区高清不卡| 日韩在线网址| 久久精品动漫| 99精品在线免费在线观看| 成人av动漫在线观看| 激情偷拍久久| 香蕉久久久久久久av网站| 亚州国产精品|