APK反編譯查看密碼加密方式
❶ apk鍔犲瘑鏂規硶 Android apk杞浠跺姞瀵嗘暀紼
鍓嶆墊椂闂磋嚜宸辮緵杈涜嫤鑻﹀紑鍙戠殑瀹夊崜杞浠惰浜虹牬瑙d簡錛屼綔涓轟竴涓瀹夊崜寮鍙戣呮潵璇存槸涓浠墮潪甯稿ご鐤肩殑浜嬫儏銆備負浜嗘彁楂榓pk鐨勫畨鍏ㄦэ紝閬垮厤琚鐮磋В銆佷簩嬈℃墦鍖呯瓑錛屾垜鍐沖畾瀵規垜鐨刟pk鍋氬姞瀵嗗勭悊銆傞槻姝㈠湪琚鍒浜虹牬瑙d慨鏀圭瓑錛岄『渚挎妸鎿嶄綔榪囩▼璁板綍涓嬫潵涓庡悓琛屾湅鍙嬪垎浜涓涓嬨
棣栧厛涓嬭澆瀹夎匒pk鍔犲瘑杞浠訛紝瀹夎呰繃紼嬮潪甯哥畝鍗曪紝鐩存帴榛樿ゅ畨瑁呭嵆鍙銆
瀹夎呭悗鎵撳紑杞浠訛紝濡傚浘錛
鐩存帴娣誨姞闇瑕佸姞瀵嗙殑APK鏂囦歡錛岀偣鍑繪祻瑙堟坊鍔狅紝鎴栬呯洿鎺ユ妸闇瑕佸姞瀵嗙殑apk鎷栧叆榪涙潵銆
閫夋嫨闇瑕佸姞瀵嗙殑Java綾伙紝涔熷彲浠ヤ笉閫夋嫨銆傚傚浘錛
鐐瑰嚮鈥滃姞瀵嗗嵆鍙鈥濄
鍔犲瘑鍚庝竴涓浼氱敓鎴愪袱涓獮PK鏂囦歡錛屼竴涓鏄甯︾懼悕鐨勶紝涓涓鏄涓嶅甫絳懼悕鐨勩傚傛灉浼氳嚜宸辯懼悕鐨勬湅鍙嬪彲浠ラ夋嫨涓嶅甫絳懼悕鐨勶紝濡傛灉涓嶆噦鐨勬湅鍙嬬洿鎺ヤ嬌鐢ㄥ甫絳懼悕鐨勫嵆鍙銆
涔嬪悗浣跨敤澶氫釜鍙嶇紪璇戝伐鍏峰弽緙栬瘧嫻嬭瘯閮藉弽緙栬瘧澶辮觸浜嗐傚熀鏈閮芥槸濡傚浘鏄劇ず涓鏍楓傚埌姝ゅ氨鎼炲畾浜嗐
❷ apk如何防止被破解
現在主要工具是接觸SDK,為了防止游戲包被破解編譯,以及發現加密串,我來分享下以下幾點:
防破解技術主要有四種實現方式:
1.代碼混淆(ProGuard)技術
2.簽名比對技術
3.NDK .so 動態庫技術
4.動態載入技術
5.第三方平台加密以及檢測漏洞
這個在Android 安全之如何反編譯與加密apk包這篇文章中也提及到了相關的知識點。
第一種: 代碼混淆技術(ProGuard) 該技術主要是進行代碼混淆,降低代碼逆向編譯後的可讀性,但該技術無法防止加殼技術進行加殼(加入吸費、廣告、病毒等代碼),而且只要是細心的人,依然可以對代碼依然可以對代碼進行逆向分析,所以該技術並沒有從根本解決破解問題,只是增加了破解難度。
第二種: 簽名比對技術 該技術主要防止加殼技術進行加殼,但代碼逆向分析風險依然存在。而且該技術並不能根本解決被加殼問題,如果破解者將簽名比對代碼注釋掉,再編譯回來,該技術就被破解了。
第三種: NDK .so動態庫技術,該技術實現是將重要核心代碼全部放在C文件中,利用NDK技術,將核心代碼編譯成.so動態庫,再用JNI進行調用。該技術雖然能將核心代碼保護起來,但被加殼風險依然存在。
第四種: 動態載入技術,該技術在Java中是一個比較成熟的技術,而Android中該技術還沒有被大家充分利用起來。
第五種: 第三方平台使用
主要講解第四種方法,該技術可以有效的防止逆向分析、被破解、被加殼等問題,動態載入技術分為以下幾步:
將核心代碼編譯成dex文件的Jar包
對jar包進行加密處理
在程序主入口利用NDK進行解密
再利用ClassLoader將jar包進行動態載入
利用反射技術將ClassLoader 設置成系統的ClassLoader。
❸ Android上,怎麼用16進制加密apk的dex文件讓別人無法反編譯或進內部查看原代碼
可以在Dex文件頭隱藏另一個DEX數據並在運行時載入附帶DEX數據。
構建非規范的Dex文件
通過反射調用DexFile類的方法載入附帶DEX數據
通過反射實際調用DexFile的openDexFile方法
該種方式允許通過byte[]解析dex數據,而無須在再把DEX數據存儲在設備的某個文件。
可以從安裝APK文件、內存或dalvik-cache等讀取dex數據。
該種方式將給自動化分析工具帶來一個問題,自動化工具會按照dex格式處理DEX文件而不會處理附帶的dex數據。需要特定的工具、16進制編輯器或手工提取嵌入的dex數據。
我們可以採用各種不同的方式增加嵌入數據的提取難度,比如:
對嵌入的DEX數據進行加密;
嵌入的DEX數據加密後在對其進行ZIP壓縮;
使用native代碼解密,直接從內存載入;
......等等
該種隱藏方式可以通過判斷Dex文件頭長度是否大於0x70檢測。
❹ app可以被反編譯到什麼程度
Android APK中的Java代碼可以被反編譯到什麼程度主要看APK的加密程度。
第一種情況:無混淆無加密無加殼。
直接利用Dex2jar和JD-GUI可把源碼從APK里摳出來,代碼邏輯清晰,基本上做到可復用,只是資源文件的引用需要計算一下。
第二種情況:混淆。
通常是利用Proguard做的防護。因為是對jar做的不可逆混淆(除非有mapping),因此不能還原成原來的代碼。但是代碼結構,代碼邏輯一致,只要花長時間對代碼進行梳理一樣可找准核心代碼,解密方法跟第一種一致。
第三種情況:加密。
這里以DexGuard為例。對於這種代碼加密的方法,在程序運行中必定會進行解密,只要抽出它解密的邏輯便可。PS:我自己做過DexGuard的解密,如果用Dex2jar反編譯看的話邏輯是不對的,一定要從Smali代碼看。後來發現網上已經有人做了。
解密的腳本:A look inside Dexguard
第四種情況:加殼。
這種情況跟第三種類似。無論你怎麼加殼,運行的時候必定是Dalvik可識別的Odex代碼,建議直接在內存里mp出來。這里推薦Xpose的ZjDroid。
加固可以在一定程度上保護自己核心代碼演算法,提高破解/盜版/二次打包的難度,緩解代碼注入/動態調試/內存注入攻擊等。
目前市面上有很多第三方加固的平台, 如果新應用發布前需要掃描或者加固的話,可以先試試免費的,例如騰訊御安全,建議自己先去掃描測試下。