拿到一個apk包後,怎麼判斷其是否加殼了?是否做了代碼混淆?

R.T.


先談加殼,很多加殼廠商都會將自己包名加入到被加殼的APP中去,比如百度如:

阿里加固的:

騰訊加固的:

當然其他也是如此,加殼還會加入特定的so文件進入。所以可以根據包名或者SO名來判斷是否加殼以及加了什麼殼(但不是說apk中有so就是加殼的,很多apk為了提升性能,增強安全性,也會用so來實現一些重要的功能)。用一些工具比如GDA(自己寫的)、apk查殼PKiDApk、Detecter查殼工具等等可以直接識別出殼,甚至還能識別版本號。

至於混淆,現在大部分都是a、b、c、d之類替換了原始的包名、類名、方法名以及成員變數名。如:

當然還有很多其他比較奇葩的混淆:

等等,當然還有資源混淆,位元組碼流程混淆,so層的混淆等等。

混淆的識別就不用說了吧,一看就出來。


謝邀。

你反編譯出來,然後看能不能看到源代碼就就知道有沒有加殼了,最直接的辦法是查看清單文件里的主Activity的名字,然後到反編譯目錄里看有沒有這個Activity,沒有的話就表明加殼了,通常加了殼的Apk都只有一個外殼Application,然後在裡面載入了一個so,解密代碼都放在裡面,很容易判斷的。

代碼混淆。。這個就更不需要判斷了,混淆過的代碼類名和變數名都是abcdefg這種毫無意義東西,讓你搞不懂它究竟是幹嘛用的。


反一下不就知道了么?apktools還是啥的。免費的也不少吧。有時候把自己的apk拿來反編譯一下還能發現一些問題。感覺還蠻好玩的


難道不是直接apktool d一下,然後翻下文件夾就看出來了嘛。。。


一般如果是經過proguard混淆的代碼包名類名和變數名之類的會變成a,b,c這種增加閱讀難度 , 另外如果是用加密平台加密過的你是看不見代碼的 , 只能看見加密平台生成的入口Application


推薦閱讀:

如何通過自學成為一名 Android 應用開發工程師?
Android 和 iOS 應用開發有哪些不同?
想開發一款安卓社交類的APP需要有哪些準備?
如何實現 Medium for iOS 那般的下劃線效果?
一個android工程師除了需要編寫代碼的技能,還需要什麼?

TAG:破解 | Android開發 | Android | 軟體安全 |