android 加壳 方案,android加壳思路
8種機(jī)械鍵盤軸體對比
本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?
對java及dex代碼保護(hù)的技術(shù)發(fā)展:第一代
dex文件加密,打包。在運(yùn)作時通過一個自定義的類加載器進(jìn)行解密。
第二代
類級別的dex保護(hù)。把需要保護(hù)的核心函數(shù)抽離出來生成另外一個文件。利用虛擬機(jī)類加載機(jī)制,在運(yùn)行時調(diào)用修復(fù)函數(shù)進(jìn)行修復(fù)。
第三代
將dex的核心函數(shù)抽離出來,翻譯為自定義指令,運(yùn)行時通過自寫的解釋器解釋指令。
第四代
java2c,通過將核心函數(shù)轉(zhuǎn)為c代碼,編譯為so文件。
dex文件加殼
類PE殼
dex作為android程序運(yùn)行的主要文件,加殼尤為重要。從dex文件結(jié)構(gòu)來看,它和windows的pe文件有許多相似之處,而且更為簡單,所需數(shù)據(jù)的索引很方便。
類比PE文件,將原始數(shù)據(jù)加密后存放在文件內(nèi)部,可以是尾部,也可以是頭部(header結(jié)構(gòu)之下)。
使程序能夠正常執(zhí)行,首先是用殼來解密原始數(shù)據(jù),恢復(fù)原始程序。
放于文件尾部:
加殼程序工作流程:1.加密源程序APK文件得到加密的數(shù)據(jù)
2.把解加密的數(shù)據(jù)寫在解殼程序Dex文件末尾,并在文件尾部添加解殼數(shù)據(jù)的大小。
3.修改解殼程序DEX頭中checksum.signature 和file_size頭信息。
4.修改源程序AndroidMainfest.xml文件并覆蓋解殼程序AndroidMainfest.xml文件。
解殼DEX程序工作流程:1.讀取DEX文件末尾數(shù)據(jù)獲取加密數(shù)據(jù)長度。
2.從DEX文件讀取加密數(shù)據(jù),將數(shù)據(jù)解密。以文件形式保存解密數(shù)據(jù)到a.APK文件
3.通過DexClassLoader動態(tài)加載a.apk。
放于文件頭部:
加殼程序工作流程:1.加密源程序APK文件為解殼數(shù)據(jù)
2.計算解殼數(shù)據(jù)長度,并添加該長度到解殼DEX文件頭末尾,并繼續(xù)解殼數(shù)據(jù)到文件頭末尾。(插入數(shù)據(jù)的位置為0x70處)
3.修改解殼程序DEX頭中checksumsignaturefile_sizeheader_sizestring_ids_offtype_ids_offproto_ids_offfield_ids_offmethod_ids_offclass_defs_off和data_off相關(guān)項(xiàng)。 分析map_off 數(shù)據(jù),修改相關(guān)的數(shù)據(jù)偏移量。
4.修改源程序AndroidMainfest.xml文件并覆蓋解殼程序AndroidMainfest.xml文件。
解殼DEX程序工作流程:1.從0x70處讀取解殼數(shù)據(jù)長度。
2.從DEX文件讀取解殼數(shù)據(jù),解密解殼數(shù)據(jù)。以文件形式保存解密數(shù)據(jù)到a.APK
3.通過DexClassLoader動態(tài)加載a.APK。
動態(tài)加載
主要方式:1.將核心代碼編譯成dex文件的Jar包
2.對jar包進(jìn)行加密處理
3.在程序主入口利用NDK進(jìn)行解密
4.再利用ClassLoader將jar包進(jìn)行動態(tài)加載
5.利用反射技術(shù)將ClassLoader 設(shè)置成系統(tǒng)的ClassLoader
總結(jié)
以上是生活随笔為你收集整理的android 加壳 方案,android加壳思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android自定义弹窗模仿微信,And
- 下一篇: android 骨架屏刷新动画,ios