Android 逆向学习【1】——版本/体系结构/代码学习

#Android 历史版本

参考链接:一篇文章让你了解Android各个版本的历程 - 知乎 (zhihu.com)

三个部分:api等级、版本号、代号(这三个东西都是指的同一个系统)

API等级:在APP开发的时候写在清单列表里面的

版本号:在创建工程的时候是写的版本号

需要特别注意的是从安卓5.0开始,Android系统开始改用ART虚拟机,安卓系统也开始分32位和64位版本。

#安卓体系结构

一、应用层

应用层包括手机上的所有APP,无论是系统自带的还是用户开发的。他们都是基于第二层应用框架层开发的。除了用到java的一些代码之外还会用到android提供的一些api。(指纹js就是要取浏览器东西,比如取cookie)

二、应用框架层

Android开发人员接触最多的就是框架层,该层提供了各种各样的系统API,开发人员通过使用这些API来构建上一层的各种各样的APP。这些API包括且不限于:Activity Manager(控制Activity的生命周期等)、Notification Manager(提供通知相关的功能)、Content Provider(实现应用程序间的数据共享)、Resource Manager(管理非代码资源,比如布局文件,图片资源,字符资源等等)、View(提供常见的视图控件)、Alarm Manager(提供闹钟相关服务)等等。

三、库层

第三层包含两部分内容:

        第一部分是Native C\C++系统库层,主要提供一系列第三方类库,常见的有系统C库、多媒体库(播放媒体文件)、SGL(2D图像引擎)、Free Type(渲染位图和矢量字体)、Sqlite(轻量级数据库)、SSL(Secure Socket Layer)、Webkit(提供网络工具)等等;

       第二部分是运行环境,包括Dalvik虚拟机和Java核心库。关于Dalvik虚拟机和JVM的区别:Dalvik是基于寄存器的,JVM是基于栈的。JVM运行.class文件,每个.class文件对应一个类;Dalvik虚拟机将.class文件转为.dex文件,只有一个.dex文件,包含了所有的类,并且通过性能优化转为.odex文件。基于寄存器的虚拟机运行速度更快,文件更小,效率更高,适合移动端。另外Dalvik虚拟机需要更多的指令空间。

四、内核层

Android系统底层是基于Linux系统的,主要提供各种硬件驱动。

#需要学习的代码

java   (java不能直接操控底层的一些代码 所以需要用到C++)

JNI     (java和C、C++之间不能直接调用  需要中间人JNI)

C/C++ (so文件  PC端的一些线程写好的一些库文件 可以直接拿来用 java调用一下C即可 就不用再写代码了)C、C++反编译的难度比较大 java反编译比较容易  一些重要的业务逻辑的代码会放到C或者C++里面去写    如果so里面调用的不是现成的加密库,那就还需要自己学一点ARM汇编的知识  C代码反编译的难度比较大 反编译出来的还是伪C的代码  伪C的代码还是不太靠谱 所以需要学到一些汇编的知识。但是只是在so使用自定义算法的时候。如果使用的是现成的加密库,那我们通过IDEA 的f5插件反编译出来的c的代码就可以简单的猜一下,调用了那个加密库,传进去什么值,给了什么密钥,使用了哪种模式,哪种填充方式,再配合一下动态调式即可。

Android  (这里面许多so文件就是用C或者C++写的 )

打包成一个APK  反编译之后 正常的代码是smali代码  并不是java源代码

smali   我们在动态调试的时候也是smali代码 不是源代码 所以也需要对smali代码了解

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值