Android加固和簽名的那些坑(防掉坑技巧)

上個月公司一個項目突然要找第三方進行安全漏洞的檢測,于是打包了一個apk文件,發(fā)到第三方結(jié)構(gòu)進行了安全檢測,這項目我入職前就已經(jīng)快完成的階段,我后面基本是維護和小更新.比較坑的是之前的哥們連混淆都沒有,更不要說加固了,最后掃出了30多個漏洞,看到檢測報告都懵逼了.

自己對混淆和加固之前也只是知道皮毛沒有深究,這次修復漏洞踩了不少坑,都是邊上網(wǎng)搜資料邊踩坑,總算搞定了,寫出來防止后人踩坑,這里主要講加固簽名的坑,混淆這里不說了(自己對混淆還不熟)


混淆簽名導出

  • Q: 進行混淆,怎么混淆?

    A: 我也是不太熟簡單說一下自己的做法,先google一下常用的第三方框架的混淆代碼找到自己需用的,剩下不常用的就上項目引用的框架對應的github項目地址找對應的混淆代碼.

  • Q: 導出的時候怎么選v1和v2?區(qū)別在哪?

    A: 我自己是把v1和v2都勾上,區(qū)別是v1是7.0之前就存在的簽名方式,v1相比v2安全系數(shù)要低,建議打包的時候v1和v2都勾上,只勾其中一個有可能會出現(xiàn)兼容問題,具體自己上網(wǎng)查

加固

  • Q: 怎么加固?

    A: 網(wǎng)上很多加固方式 (360,愛加密,梆梆..)都是傻瓜式的操作,可以找自己合適的.

  • Q:加固有哪些坑?

    A: apk進行加固之后簽名信息都會丟失,加固完成之后要對apk重新進行簽名,沒有簽名的apk是不能在手機上跑的

    A: 我開始用的是某數(shù)字公司的加固,加固完重新簽名就發(fā)給第三方機構(gòu)檢測了,報告說我沒有進行v2簽名,一直很懵逼,明明勾了v2的簽名為什么一直說我沒進行v2簽名,最后發(fā)現(xiàn)原來有些公司的提供的簽名工具不支持v2簽名,你用了他的簽名工具他會說你簽名成功,但實際上他只進行了v1的簽名,真的很蛋疼,也不說明一下.

自己進行簽名檢查和加固后重新對apk進行簽名

檢查是否簽名成功:

方法1:利用android sdk自帶的工具

  • 用命令行進入本地的Android sdk目錄(我用的是mac) 地址如下 cd /Users/用戶名/sdk/build-tools/27.0.3/lib

    • 27.0.3是你的自己的sdk版本,不一定和我一樣
  • 檢查是否簽名成功 java -jar apksigner.jar verify -v my.apk (my.apk為本地安裝包的路徑)

    • 如果出現(xiàn):mac 下終端訪問文件出現(xiàn)“Permission Denied”解決方案的話:

    • 一個文件有3種權(quán)限粹断,讀、寫希柿、可執(zhí)行养筒,你這個文件沒有可執(zhí)行權(quán)限,需要加上可執(zhí)行權(quán)限晕粪。

    • 終端下先cd到該文件的目錄下,執(zhí)行命令 chmod a+x ./apksigner.jar(文件名)

    • 重新執(zhí)行步驟2檢查是否有簽名,會出現(xiàn)下面類似的結(jié)果:

      • Verifies
      • Verified using v1 scheme (JAR signing): true //已進行v1簽名
      • Verified using v2 scheme (APK Signature Scheme v2): false //沒有進行v2簽名

很容易理解,ture是已簽名,false是未簽名,都為true的話說明v1,v2都成功簽名了.

方法2:

  • 下載GetApkInfo.jar

  • 用命令行進入GetApkInfo.jar文件目錄 cd /Users/xxxx/GetApkInfo.jar

  • 執(zhí)行 java -jar GetApkInfo.jar my.apk檢查是否有v2簽名

    • 如果出現(xiàn):mac 下終端訪問文件出現(xiàn)“Permission Denied”解決方案的話:

    • 一個文件有3種權(quán)限巫湘,讀、寫衅斩、可執(zhí)行怠褐,你這個文件沒有可執(zhí)行權(quán)限,需要加上可執(zhí)行權(quán)限奠涌。

    • 先cd到該文件的目錄下,執(zhí)行命令 chmod a+x ./apksigner.jar(文件名)

    • 再次執(zhí)行 java -jar GetApkInfo.jar my.apk

         執(zhí)行結(jié)果: 成功
         應用信息: 
         包名: com.xxx.xx.xx
         版本名: 2.0.1
         版本號: 2
         簽名文件MD5: e093xxxb53xxxxxf5bxxxe17xxx7d
         V1簽名驗證通過: true
         使用V2簽名: true
         V2簽名驗證通過: true
      
  • 如果你要確保自己沒用錯簽名文件(雖然一般不會這么智障)這種方法比較適合你,能看到已簽名的md5值

  • keytool -v -list -keystore /Users/xxxx/MyAPP/test.jks(路徑是你的進行簽名的秘鑰路徑)

      有效期開始日期: Mon May 08 09:35:21 CST 2017, 截止日期: Fri May 02 09:35:21 CST 2042
      證書指紋:
           MD5: E0:93:xx:xx:xx:22:xx:xx:xx:5F:xx:xx:xx:xx:15:7D
           SHA1: xx:xx:xx:xx:xx:xx:C0:A4:xx:33:6Exx02:80:xx:DA:xx:xx:5F:xx:C3
           SHA256: 39:xx:3A:xx:xx:BA:xx:A8:6C:xx:D0:C6:xx:BC:xx:76:25:xx:xx:A3:86:xx:xx:A0:xx:E8:xx:xx:4F:xx:xx:9C
           簽名算法名稱: SHA256withRSA
           版本: 3 
    

然后把兩個md5的值進行比對,如果一致說明你的簽名沒用錯秘鑰 - -||

4.手動進行簽名操作:

  • 進入本地的sdk目錄 cd /Users/xxxx/sdk/build-tools/27.0.3/lib
  • 執(zhí)行簽名操作:

java -jar apksigner.jar sign --ks /Users/xxxx/Desktop/key.jks --ks-key-alias test --ks-pass pass:123456 --key-pass pass:123456 --out /Users/xxxx/Desktop/簽名后的安裝包.apk /Users/xxxx/Desktop/需要進行簽名的安裝包.apk

上面的命令會執(zhí)行同時執(zhí)行v1,v2簽名

注意仔細看上的命令行:進了黑色加粗的文字需要替換成實際的信息

  • 第一個加粗的是秘鑰的路徑
  • 第二個是秘鑰的別名
  • 第三個是秘鑰的密碼
  • 第四個是秘鑰的密碼
  • 第五個是進行了簽名的安裝包保存的路徑
  • 第六個是需要進行簽名的安裝包路徑

說個小插曲,我們的項目找的是一個規(guī)模很大的公司進行檢測,開始用了網(wǎng)上的免費的加固工具加固拿去檢測,別人拿去測試之后全部都脫殼了,說這種免費的加固安全沒有保障,要用他們的加固服務可以解決,要收費..呵呵,因為項目比較特殊只能答應了,打包簽名了apk,發(fā)到他們那邊進行了加固后他們把apk發(fā)回來讓我重新簽名,簽名后apk用不了,閃退....老板說別人大公司應該不會出現(xiàn)這種小問題,是我的問題.恩,自己也懷疑是我的錯. 當天折騰到凌晨才下班,經(jīng)歷了上面的一頓折騰后發(fā)現(xiàn)v1,v2都簽名了,并且md5值也沒問題. 這時就有底氣的去質(zhì)問那家公司,最后發(fā)現(xiàn)是他們的加固出問題.

一般來說進行了上面的方法重新簽名并且檢查md5值沒錯,應該不會出問題了這時候可以去質(zhì)疑一下加固方的問題.

github參考鏈接1

github參考鏈接2

先寫這些記錄一下,后面有需要再更新,有什么問題可以在下面留言討論.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市慈格,隨后出現(xiàn)的幾起案子遥金,更是在濱河造成了極大的恐慌,老刑警劉巖稿械,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異页眯,居然都是意外死亡,警方通過查閱死者的電腦和手機科阎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門锣笨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來道批,“玉大人,你說我怎么就攤上這事隆豹。” “怎么了判哥?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵碉考,是天一觀的道長。 經(jīng)常有香客問我锌仅,道長墙贱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任伊脓,我火速辦了婚禮魁衙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榄笙。我一直安慰自己祷蝌,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布米丘。 她就那樣靜靜地躺著糊啡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棚蓄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天稍算,我揣著相機與錄音役拴,去河邊找鬼。 笑死科平,一個胖子當著我的面吹牛姜性,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播部念,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼印机,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了射赛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤竣灌,失蹤者是張志新(化名)和其女友劉穎秆麸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屯烦,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年温眉,在試婚紗的時候發(fā)現(xiàn)自己被綠了翁狐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡闯冷,死狀恐怖懈词,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蒂窒,我是刑警寧澤荞怒,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站衰抑,受9級特大地震影響荧嵌,放射性物質(zhì)發(fā)生泄漏呛踊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赃春。 院中可真熱鬧,春花似錦锥涕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谦趣。三九已至旧乞,卻和暖如春磅氨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背理疙。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挫以,地道東北人窃祝。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓粪小,卻偏偏與公主長得像,于是被迫代替她去往敵國和親探膊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345