利用动态加载技术实现APK安全加固

原理分析见《利用动态加载技术加固APK原理解析》

源代码地址:https://github.com/mars-ma/ApkSecure/

bin目录下是直接可用的工具,注意readme.txt的说明,需要配置好java运行环境。

config.xml注意这里需要安装WinRAR对APK压缩,需要给出安装好的WinRAR的路径。签名和密码的配置也在这里。

dex/apksecure下是壳dex的源码

java_tool/ApkSecure下是java工具类的源码

加固技术实现(基础)

Java加壳工具的实现

实现Java加壳程序需要壳Classes.dex,以及相关so库。Java加固工具的工作流程如下:

反编译原APK,将AndroidManifest.xml中的Application Name改为壳中的Application Name。

在<application>标签下增加<meta-data>,存入原Application Name,以便在解壳后恢复原始Application。

将反编译的APK再次编译得到新的Apk。

将新的Apk解压,将原Classes.dex(可能是多个)拷贝到assets下,并用加密算法加密为新的文件,再用zip压缩。

用壳classes.dex替换新APK中的classes.dex。

将解压的新的Apk用压缩工具压缩成zip,更改后缀名为.apk,用jarsigner签名。

壳DEX的实现

壳dex负责逆向解密出dex,上述加固思路已经详细说明,通过构造DexClassLoader,并用反射技术替换调默认的ClassLoader。执行流程如下:

将assets下加密的.dex文件拷贝至自己的数据目录,先用java.util.zip解压文件并用解密算法解密出原.dex文件。

以解密出的原.dex为路径,构造DexClassLoader,并用反射技术替换调默认的PathClassLoader。

将ActivityThread中ApplicantsInfo的Class Name替换为存在下中的应用名,并用新的ClassLoader加载原Application替换调现有Application,最后执行原Application对象的onCreate函数。

最初版本遇到的问题:

壳dex中不能包含和原dex相同的全限定类名

java.util.zip压缩的apk无法被系统识别资源,后续使用了zip4j可以正常工作。

JNI反射内部类的签名格式是"a/b/C$D"

压缩后apk明显大于原始apk,因为增加了解密用的so文件。

Android4.4及以下使用HashMap类,以上使用ArrayMap类,反射时要适配不同的API版本。


2017.5.19 

支持multidex,但是未做ART虚拟机下DexClassLoader加载.dex时跳过编译.oat的优化,对于使用ART虚拟机,且体积较大的dex存在加载缓慢的问题。

待优化:

绕过ART虚拟机编译OAT文件

防止so的动态调试

防止dump dex

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容