没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
导读导读
Android里的代码隐藏方案可以说有很多种实现方式,我在这里尝试了一种类似加壳的方式。在此方式上,可以作更多的扩展,
如加密等。因为为了最大限度保持兼容性,很多地方没有作更深入地发掘,被逆向人员找出隐藏的代码不是难事。但此方法在某些
场景还是有用的,例如规避超64k方法数限制,部分代码从网上加载再执行等。
此方法当作抛砖引玉,希望有更多人分享自己的想法。
0、作用概述
1、实现隐藏流程
2、壳作了哪些工作及原理
3、释放原代码的工作及原理
4、注意事项
5、参考资料
0、作用概述、作用概述
唯品会Android客户端隐藏代码前与隐藏代码后的dex2jar对比 如图
1、实现隐藏流程、实现隐藏流程
本人写了个脚本来跑整个隐藏代码的过程,脚本的流程就是实现隐藏的流程:
逆向原apk包获得AndroidManifest
修改AndroidManifest里的Application入口为壳
把原apk包的classes.dex经过压缩(加密)后放在assets文件夹(网络)里
把原apk包的classes.dex替换为壳的classes.dex
重打包
2、壳作了哪些工作及原理、壳作了哪些工作及原理
壳主主要作了两个工作:
释放隐藏的原代码
还原运行环境给原代码
调用原代码的Application
这里感谢一下lucifazhang(张强)和darongchen(陈春荣)的指导,因本人之前没接触过这方面知识所以连google哪些关键词也不太
懂。
还原运行环境的原理:
我们需要通过java反射修改的变量如下,分析下面说明
ActivityThread.mInitialApplication Application
ActivityThread.mAllApplications ArrayList<Application>
ContextImpl.mOuterContext Context
LoadedApk.mApplication Application
首先,我们需要对程序的Application何时创建有个完整的了解。
newApplication调用链一 如图
我们看到在SystemSever和ActivityThread的main函数中都会最终调用newApplication,但通过源码分析ActivityThread.main
调用的是attach(false)并不会newApplication,而ActivityThread.systemMain调用attach(true)会调用newApplication,因
此源头为SystemSever.main。
经过对SystemSever的一番搜索探究,可得出SystemSever为Zygote进程启动过程的其中一个步骤,因此整个调用的逻辑清晰浮现。
4.8隐藏代码 2015/2/3
滚菩提哦呢
- 粉丝: 64
- 资源: 341
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0