安卓逆向4:app加固原理,app脱壳原理 |
您所在的位置:网站首页 › 手机app逆向破解 › 安卓逆向4:app加固原理,app脱壳原理 |
#### app加固原理#### 首先是为什么要加固app? 加固,就是为了防止被很容易的被逆向,逆向就是说把app的源代码抠出来,比如游戏app,如果别人想要抄袭我,逆向之后,把代码拿去,然后就可以用,后台都有,这是很危险的, 所以要加固,让你难以逆向,这不是完全杜绝,而是相对比较难, ### 然后是一般app都是怎么加固的? 一般不会自己公司加固,而是用的第三方加固, 比如应用市场的加固,所以你发布上去应用市场,要求是没有加固的,防止这个app有一些敏感的功能,违法的功能,做坏事的功能, 然后是应用市场给你加固,加固之后然后发布出去, 有的应用市场不严格,可能允许你上传加固的app,这是为了让别人上传更多的app, 可以选择用还是不用他们应用市场的加固方案,可以不用,所以不是所有的app都有加固的, 每一个应用市场,都有自己的加固方案, 比如360,腾讯,这两个搞定了,其他的都不用管,因为大部分app都在这些应用市场了, 加固的方案基本就是dex加固和so加固, 加固还分为收费和免费,要更好的加固,是收费的,
为什么360应用市场,会看到腾讯乐加固的app, 这是为了丰富生态,有些应用市场,会抓取别的应用市场的,
还有脱壳的时候,可以在不同的应用市场,下载app,因为不同的应用市场,是不同的,脱壳难度也是不同的, 有的应用市场什么是没有加固的,所以要注意技巧,
#### 怎么判断一个app有没有加固? 举例: 使用反编译的方法,比如jadx工具,apktool反编译,看目录结构 找到lib文件夹,如果里面有libsharea.so,这个就是腾讯的乐加固, ### 在没有加固之前,jadx反编译之后,是可以看到源代码的 但是加固之后的app,你是看不到源代码的,只能看到加固厂商的一些信息,根本就没有源代码的目录
加固之后,你是看不到源码的,只能看到壳的内容,
#### 这个时候我们看看这个加固的apk的,application文件, 如果没有加固,肯定是直接去找这个xml文件了, 但是现在加固了,现在要先进加固的壳,然后才能去找这个xml, 这个时候application文件,安卓name就是壳的入口了,往下找,就会有原来app的安卓name的入口, #### 而且你去看Androidmanifest.xml文件,发现是进入这个壳的application了,不是进入app原本的application了,
加固之后相当于是两个apk了, 要先启动壳的apk,然后通过这个壳apk,把源app的内容加载起来,放到内存里面,
这个就是下一步加载的源app的application,
### 加固原理 你上传你的源apk到应用市场, 应用市场有自己的加固壳程序,用这个壳去加密你的源apk,这个壳程序主要是读取源apk的dex文件,加密成为一个新的dex文件, 最后生成一个新的apk, ### 加固之后的app运行原理 这个apk先加载壳app,壳app读取源dex文件,然后解密出来源app的dex,运行源apk, ### 现在加固了之后,你反编译就不行了,看不到源代码了, 所以必须要解决脱壳的问题, ### 加固方式, 一般就是dex加固和so加固。 最普遍的是dex加固,因为so加固需要一个公司的开发会c语言,
### app脱壳原理:脱壳的原理
在壳app解密源apk的dex之后,源apk被加载之前,拦截这个过程中的系统函数,把内存中的dex文件dump拿出来, 这个中间的流程是很长的,你要在哪一层hook,这个也需要你选择, 因为只有壳app知道如何解密,所以这一步脱壳,还是需要知道这个原理,
####### 怎么脱壳? 还有脱壳的时候,可以在不同的应用市场,下载app,因为不同的应用市场,是不同的,脱壳难度也是不同的, 有的应用市场什么是没有加固的,所以要注意技巧,
脱壳主要是两种方式, 脱壳分为两个方法 一个是手动脱壳, 一个是工具脱壳 ### 脱壳必须要对加固的流程熟悉,你越熟悉越知道怎么脱壳, 脱壳的方法很多,可以在不同层脱壳,但是方法原理都是一样的,就是从内存里面把解密的源app代码拿出来, ### 脱壳,要了解dex文件的格式, dex文件包含校验位,签名,还有文件大小, 这个签名就是app签名,这个签名会进入这个dex文件, 因为这个原理,可以根据大小来计算内存偏移量,从内存拿取数据,
### 脱壳-手动脱壳 通过动态调试,跟踪计算Dex源文件的内存偏移地址,从内存中Dump出Dex文件 难度大,寄存器,汇编,反调试,反读写 IDA动态调试:反调试,汇编,计算内存地址 动态调试,你要从内存里面拿代码了,这种内存里面的代码就是汇编了,甚至是机器码,就不容易了, 而且可能人家还有反调试,这种就很困难, 跟着app加载流程走,把内存中的文件提出来,这个难度大,
---->常用的脱壳方法,还是hook, #### 脱壳-工具脱壳工具脱壳又有两种, 第一种:脱壳-工具脱壳-Xposed框架 Fdex2:Hook ClassLoader loadClass方法 通用脱壳 dumpDex:https://github.com/WrBug/dumpDex 这两个工具就是apk,直接安装就可以了,很简单,不用处理,这两个是在java层脱壳, 重点介绍一下fdex2,这个工具, 很好用,基本腾讯的乐加固,360的加固,都是可以脱壳的, 要使用这个工具,首先是要安装这个Xposed,而手机要安装这个,要先root,否则安装不了, 使用已有工具会有问题:会发现很多的新的apk,都无法脱壳,技术晚半代至一代,可以脱老版本APP xposed框架也可以自己写代码脱壳,但是这个java不会,所以不考虑,
具体这个fdex2,脱壳的原理是什么? 后续还是要研究一下, #### 第二种:脱壳-工具脱壳-frida框架一个是hook技术, 改变程序执行流程的一种技术 在函数被调用前,通过HOOK技术,先得到该函数的控制权,实现该函数的逻辑改写 我们之前绕过签名是,改了人家的smali文件,这样不好,还好没有做其他的校验,否则你不一定能绕过, frida框架 主要系统函数都已HOOK/基于xposed frida开发脱壳工具/有大神已开发上层应用模块
所以两种办法,还是hook技术比较好,既不需要修改源码,还不是太困难, #### hook,一般是可以hook两层, 1个是java层,这个比较好hook, 1个native层,也就是so库,这个难度大一点,难在看不到源代码,内部的逻辑都是汇编, hook的基础是要看到源代码,找到函数,所以hook的前提首先是要脱壳, 这个地方有一个疑点,既然是用hook脱壳,而hook又要先脱壳,这不是悖论了???
#### 加固后的apk的so文件是有特征的, 那可能会从360应用市场下载下来的apk是使用的腾讯的加固方案,这是怎么回事? 可能是应用市场为了丰富自己的apk的生态,然后扫描别的应用市场,然后把自己没有的包,拿过来, 可以多个应用市场都下载一下apk,有的apk在别的应用市场是没有加固过的,这样就方便了, ### dex加固,这种就是第三方的加固, so加固,主要是把核心代码放到so文件,保护代码,是c语言写的, 大部分加固都是dex加固,大厂的产品可能使用so加固,因为需要有c工程师才可以, ### hook一般是两种 一个是hook java层,这个就是hookapk的源代码,这个比较简单 一个是hook,native层,so库,这个比较难,需要看懂c语言,看懂汇编代码, hook 的前提,你必须要知道函数或者方法名是什么,否则你怎么hook呢, ### 脱壳的原理就是因为不管怎么加固apk,你都要把源apk的代码加载到内存,运行源apk,这就是脱壳的原理,
### 大厂的app为什么不常加壳,但是小app加壳, 因为大厂的app代码很大,加壳的话会有性能问题,而且兼容性会报错, 所以大厂宁愿牺牲一些安全性,但是防止客户的流失率, 那怎么保证安全性,就是混淆,混淆的比较厉害,
##### |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |