Android 加壳初解

前言

       为了方便新手理解加壳,本篇文章打算从反编译入手,通过场景问答的形式来讲解加壳。

场景一

         如果一个Android新手,想要查看一个APK的代码,他会怎么做?

         搜索引擎走起:通过Google/Baidu,发现一堆"反编译APK"的文章。

         这些文章基本思路:

            1:解压缩APK包,获取Dex文件,通过dex2jar,转换成jar文件

            2:上面获取到的jar文件,通过 JD-GUI进行查看

            3:通过ApkTool反编译APK,获取到资源文件,再重新打包,签名

         那么走一遍,尝试一下(新建APP,走一遍工具,得到如下图)

反编译结果图

场景二

         不想APK源码被查看,能怎么办?

         整理下反编译代码链路:APK->DEX->JAR>JD-GUI查看


         思路一:在APK->DEX这一步的时候,能不能让DEX文件获取不到?

         尝试:把DEX文件干掉,重新签名->安装->安装失败(否定)

         尝试:把DEX文件放到assets下,重新签名->安装->安装失败(否定)

         结论:APK按照一定的格式才能被安装


         发散思路:能不能把DEX文件藏起来,用其他的DEX文件代替?

         尝试:新建工程B,把A的DEX文件放到assets下,再把B的DEX放到A中,重新签名->安装->安装成功

         打开崩溃?A中类找不到?

         解决:可以通过B的DEX,反射加载A中的DEX文件,这边先给出代码截图。

         具体思路会在文章:<APK中类的查找与加载>中讲解)

反射加载DEX
反射加载DEX

         那么走一遍,尝试一下

          1:B工程新建Application,在onCreate里面通过反射加载assets里面的classes.dex文件(见上2张截图)

          2:A工程先生成一个Release包,再提取classes.dex放到A工程assets里面

          3:A工程在AndroidManifest.xml里面,添加B的Application

          4:A工程打包,用B工程的classes.dex替换掉A的classes.dex,A重新打包,安装,正常加载

            (见截图)


B.Apk


A工程


合并之后的包

         思路与结果:

             APP启动时,先加载B的Application,在通过B的Application加载A的Dex文件,达到加壳的目的

             这样可以让用户不能直接反编译源码,这就是最简单的加壳(具体代码:见Gitlab)

总结与拓展    

         上面虽然说明了最简单的加壳,但如果想实用的话,还有非常多的问题。

         例如:

             1:对壳DEX进行反编译,查看代码,还能找到真正的DEX,怎么处理?

             2:怎么去加壳支付宝APK?

             3:这只是最基本的代码加壳了,那资源能加壳吗?

             4:上面只是在APK->DEX这一步做文章,那么能不能让DEX转换成JAR的时候失败?能不能让JAR文件不能被JD-GUI查看?


欢迎查看加壳系列文章

1:自动加壳工具

2:加壳后APP启动优化

3:加壳二代之壳加解密

4:dex2jar原理与破坏

5:加壳之SO库加壳

6:加壳三代之指令抽离

7:加壳四代之指令转换

相关文章

1:APK中类的查找与加载

2:最简单的插件

3:最简单的热更新

4:Tinker原理讲解一

5:Tinker原理讲解二

6:Tinker原理讲解三

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

推荐阅读更多精彩内容