志达IT
做快乐程序员

android api安卓逆向(安卓逆向有什么用)

androidapi安卓逆向

跟着app的广泛运用,运用进程中,难免会遇到些很不友爱的功用,比方:游戏充值、间断性弹窗广告、续费解锁下一回等等。
如何将这些功用给XX掉?Android逆向就能够做到,纵向丝滑。
当然这只是安卓逆向的非专业性效果之一,安卓逆向的效果不仅限于此,之所以以此引进,是因为激发学习最大的动力——爱好,有了爱好,你们想不学都不行。
网上教程上都这样讲,学习安卓逆向,不可避免的需求把握一定的java基础、等等这就话虽然没错,但关于零基础的小白,莫非要先学这些编程言语再去下手逆向吗?
我的想法是,选用理论实践相结合,边练边学,这样印象才愈加家喻户晓啊
当然此观念是在通过两节结构式常识铺垫的前提下,想了解andorid逆向,没有提前做功课可不行。接下来这篇文章呢,咱们就当科普内容,先了解下andnroid体系的运转机制、结构及andorid运用程序的相关常识。安卓逆向
目录
android体系架构
Dalvik虚拟机与ART虚拟机
android运用程序架构
android运用编译流程
android运用反编译流程及东西运用
android逆向概述
android体系
安卓(Android)是一种依据Linux内核(不包括GNU组件)的自由及敞开源代码的操作体系。主要运用于移动设备,如智能手机和平板电脑,由美国Google公司和敞开手机联盟领导及开发。
android体系架构
左边的便是android体系结构了,右边我加了补白,这样愈加明晰,咱们能够看到,android体系架构共分四层,从下往上分别是:Linux内核层、体系运转库层(程序库+android运转库)、运用程序结构层、运用层。
咱们重点重视下AndroidRuntime这一部分,其他的简略了解下就能够涉及到后边的解说:
Llnux内核层:Android体系是依据Linux内核的,它供给了根本的体系功用及与硬件交互的驱动,像图中DisplayDriver(显现驱动)、CameraDriver(摄像头驱动)、WiFiDriver(WiFi驱动)等,简略了解下就能够。
体系运转库层:像图中内核的上一层便是体系运转库层,它由程序库(绿色部分)和Android运转库(黄色部分)组成。
Librares(程序库):由C、C++编写,一系列程序库的调集,供Android体系的各个组件运用。其中包括:
Androidruntime(CoreLibrares+Dalvik虚拟机):翻译过来便是Android运转时,Android运用程序时选用Java言语编写,程序在Android运转时中履行,其运转时分为中心库和Dalvik虚拟机两部分。
Dalvik虚拟机(DVM):
而Dalvik虚拟机又是什么鬼?
它呢就类似java虚拟机,一切Android运用程序根本是在Dalvik虚拟机环境下运转的。下面会有单独一章给咱们介绍。
CoreLibrares(中心库):因为DVM也是兼容java言语的,所以Android中心库,它里边都集成了支撑JAVA言语的jar包,
applicationFramework(运用程序结构层):这一层呢主要是供给一些组件,建立结构,便利app开发人用再次基础上快速开发开发运用程序。而实践上便是一些AndroidAPI,简略了解下就能够
Applications(运用层):顶层中有一切的Android运用程序,如手机中的:电话、文件办理、信息等。
Dalvik虚拟机与ART虚拟机
Dalvik虚拟机
Dalvik是google专门为Android操作体系规划的一个虚拟机,简称DVM。在Android4.4及曾经的版别,一切的Android程序都是在Dalvik虚拟机环境下去运转的。DVM的指令是依据寄存器的,运转的是通过转换的.dex文件(.dex是专为Dalvik规划的一种紧缩格局,合适内存和处理器速度有限的体系),Dalvik虚拟机每次运用运转的时分,将代码编译成机器言语履行。
而DVM与JVM的差异:
JVM运转的是Java字节码,DM运转的是Dalvik字节码。
传统java程序通过编译,生成java字节码保存在class文件中,java虚拟机通过解码class文件来运转程序,而Dalvik虚拟机运转的是Dalvik字节码,一切的Dalvik字节码都由java字节码转换而来,并打包到一个dex可履行文件(.dex),Dalvik虚拟机通过解说DEX文件来履行字节码。
DVM是依据寄存器的虚拟机而JVM履行是依据虚拟栈的虚拟机。
寄存器存取速度比栈快的多,dvm能够依据硬件完成最大的优化,比较合适移动设备。
以下是同段代码经反编译构成的java字节码与Dalvik字节码比照
java字节码
Dalvik字节码
dvm履行的是.dex格局文件,jvm履行的是.class文件
dex文件,是DVM独有的履行文件格局,体积更小,速度跟快,占用空间更少
运转环境的差异
Dalvik通过优化,允许在有限的内存中一起运转多个虚拟机的实例,并且每一个Dalvik运用作为一个独立的Linux进程履行。独立的进程能够避免在虚拟机崩溃的时分一切程序都被封闭。
ART虚拟机
前面说到,当咱们运用手机每运转一个程序,Dalvik虚拟机都会发生一个实例,互不影响,这就或许会出现占用资源过多等问题,跟着人们日益增长的需求,dalvik无法满足人们对软件运转功率的需求。这是就诞生了ART虚拟机。
在Android4.4及以上版别,应运而生的ART(AndroidRunTime)虚拟机代替了Dalvik虚拟机,其处理机制根本上的差异是它选用AOT(AheadofTIme)技能,会在运用程序装置时就转换成机器言语,不再在履行时解说,从而优化了运用运转的速度。在内存办理方面,ART也有比较大的改进,对内存分配和收回都做了算法优化,降低了内存碎片化程度,收回时刻也得以缩短。
DVM与ART的差异:虽然ART替换了Dalvik虚拟机,并不意味着,其运用程序开发上也要发生改动,像android运用程序装置包(apk)中,依然仍是可履行的.dex文件。
履行方法:运转功率提高
DVM是在每逢程序运转时,通过解说器来履行Davlik字节码,从而转化成快速运转的机器码;而ART是在程序装置时将字节码预先编译成机器码,这样运转程序就不必再次编译
预装时刻:增加
ART装置程序的时刻会长一些,可是每次运转程序会快一点;dvm相反
占用存储空间:增加
art因为预编译,所以所占的存储空间会大一些
支撑64位CPU
DVM是为32位CPU规划的,而ART是支撑64位并且兼容32位CPU
Android运用程序架构
安卓运用程序运用JAVA言语编写。安卓的SDK东西担任将你编写的代码,用到的数据和资源文件编译进APK文件中,APK:androidpackage(运用程序装置包)。apk文件包括了一个安卓运用程序的一切内容,并且被安卓设备用来装置运用程序。
而apk实践上便是一个标准的zip格局,修正后缀名,进行解压就能够看到内部结构
而每个文件夹都有各自不同的效果,咱们能够了解下
assets文件夹:保存一些额外的资源文件,如游戏的声音文件,字体文件等等,在代码中能够用AssetManager获取assets文件夹的资源。
lib文件夹:寄存用C/C++编写的,用NDK编译生成的so文件,供java端调用。
META-INF文件夹:寄存apk签名信息,用来确保apk包的完整性和体系的安全。
在IDE编译生成一个apk包时,会对里边一切的文件做一个校验核算,并把核算结果寄存在META-INF文件夹内,apk在装置的时分,体系会按照同样的算法对apk包里边的文件做校验,假如结果与META-INF里边的值不一样,体系就不会装置这个apk,这就确保了apk包里的文件不能被随意替换。比方拿到一个apk包后,假如想要替换里边的一幅图片,一段代码,或一段版权信息,想直接解紧缩、替换再从头打包,根本是不或许的。如此一来就给病毒感染和歹意修正增加了难度,有助于保护系统的安全。
res文件夹:寄存资源文件,包括icon,xml文件
res/layout/:寄存被编译为屏幕布局(或屏幕的一部分)的XML文件
res/values/:寄存能够被编译成很多类型的资源文件
array.xml:界说数组
string.xml:界说字符串(string)值
AndroidManifest.xml文件:运用程序配置文件,每个运用都必须界说和包括的,它描绘了运用的姓名、版别、权限、引用的库文件等信息。
classes.dex文件:传统Class文件是由一个Java源码文件生成的.Class文件,而Android是把一切Class文件进行合并优化,然后生成一个终究的class.dex文件。它包括APK的可履行代码,是剖析Android软件时最常见的方针。因为dex文件很难看懂,可通过apktool反编译得到.smali文件,smali文件是对Dalvik虚拟机字节码的一种解说(也能够说是翻译),并非一种官方标准言语。通过对smali文件的解读能够获取源码的信息。
resources.arsc文件:二进制资源文件,包括字符串等。
smali:smali是将Android字节码用可阅读的字符串形式表现出来的一种言语,能够称之为Android字节码的反汇编言语。运用apktool或许AndroidKiller,反编classes.dex文件,就能够得到以smali为后缀的文件,这些smali文件便是Dalvik的寄存器言语。
Android运用编译流程
Android运用编译流程按图中的例子便是一个app运用的生成进程。在运用程序上架的时分都需求程序通过编译、签名、生成一个后缀为apk的文件才能发布到运用市场。
下面给咱们简略解说下:
第一步:打包资源文件,生成R.java文件
通过运用aapt资源打包东西,将文件目录中的Resource文件(便是工程中res中的文件)、Assets文件、AndroidManifest.xml文件、Android基础类库(Android.jar文件)进行打包,生成R.java
第二步:aidl生成Java文件
AIDL是AndroidInterfaceDefinitionLanguage的简称,是Android跨进程通讯的一种方法。检索工程里一切的aidl文件,并转换为对应的Java文件
第三步:编译Java文件,生成对应的.class文件
将R.java、aidl生成的Java文件、Java源文件通过JDK携带的Javac编译生成.class文件
第四步:把.class文件转化成DavikVM支撑的.dex文件
通过dx东西将.class文件生成为classes.dex
第五步:打包生成未签名的.apk文件
运用apkbuilder东西,将resources.arsc、res目录、AndroidManifest.xml、assets目录、dex文件打包成未签名的apk
第六步:对未签名.apk文件进行签名
运用apksigner为装置包增加签名信息。
第七步:对签名后的.apk文件进行对齐处理
运用zipalign东西对签名包进行内存对齐操作,即优化装置包的结构。
Android运用反编译流程及东西运用
而Android运用反编译流程便是上面所讲的app生成进程的逆进程。Android运用程序的反编译,算是咱们下手Android逆向打开实践的第一步。
下面给咱们简略解说下流程:
首先能够看到最左边的方针unsignedapk,即未签名apk。全体能够看出有两条反编译道路。
反编译方法一:图中上面这条道路是通过运用apktool这款东西,可直接对方针apk直接进行反编译,能够看到除apk自身的资源文件,还生成了smali文件,而smali文件里边包括的都是程序履行的中心代码。咱们能够通过直接剖析.smali文件中的smali代码,从而修正代码,改动其运转逻辑。
apktool东西下载地址:
https://bitbucket.org/iBotPeaches/apktool/downloads/
运用方法:cmd运转指令
apktooldtarget.apk
反编译完结后会生成文件夹
反编译方法二:图中下面这条道路是通过修正apk后缀名,对其解压后,将文件夹中的资源文件,通过运用AXMLPrinter2进行剖析,从而反编译,而关于解压后的class.dex文件,运用Dex2jar反编译东西对其进行反编译得到jar文件。接着将生成的jar文件直接拖到JD-GUI文件中,可主动生成源码,咱们可通过剖析其源码,了解其程序的运转逻辑,但咱们修正逻辑,终究仍是需求在smali文件中进行修正。
dex2jar下载地址:https://sourceforge.net/projects/dex2jar/files/
运用方法:cmd运转指令
dex2jar.batclasses.dex
目录生成新的jar
而jd-gui反编译东西的运用方法,可直接将jar文件拖到东西中,会主动进行反编译出源码进行查看
jd-gui下载地址:http://java-decompiler.github.io/
东西推荐
以上便是传统的Android反编译流程,若想详细了解进程,可通过上述流程进行自我复现。
而在Android逆向的实践运用中,个人比较推荐Androidkiller与jadx-gui这两款东西
Androidkiller:是集Apk反编译、Apk打包、Apk签名,编码互转,ADB通讯(运用装置-卸载-运转-设备文件办理)、源码查看等特色功用于一身,支撑logcat日志输出,语法高亮,依据关键字(支撑单行代码或多行代码段)项目内查找,可自界说外部东西;吸收融汇多种东西功用与特点,是一款可视化的安卓运用逆向东西。
能够说在Android逆向,这款东西可完成上述反编译流程一把梭,这大节操省了操作时刻,也提高了咱们的功率。
AndroidKiller下载地址:https://down.52pojie.cn/Tools/Android_Tools/AndroidKiller_v1.3.1.zip
jadx-gui:是一款能够将apk,dex,aar和zip文件将Dalvik字节码反编译为Java类的JAVA反编译东西。
而它是支撑apk、dex、aar、zip等格局,所以咱们在运用进程中,可直接将待测apk拖入的东西中,会主动履行反编译
jadx-gui下载地址:https://down.52pojie.cn/Tools/Android_Tools/jadx_v1.3.4.zip
Android逆向概述
ok,根本的常识结构体系现已烦琐完了,现在开始咱们的重点——Android逆向。
什么是Android逆向呢?
官方话语:Android逆向是对现已打包好的APP进行反编译、源码剖析了解APP完成逻辑的一门技能。
浅显了解呢:便是玩具(app)通过零件组装(源码编译)、加工刷漆(打包、签名)生成制品的逆进程。咱们把制品的app,再将它打回零件形状——源码,通过更改它的零件(代码),再进行重组装(重编译),使它能够飞天、遁地等等(改动运转逻辑)
当然,这儿的更改零件,指的可不是app的源码,而是经反编译后的smali代码。
而在实践运用中,咱们逆向的话,需求用到解密、反编译、解紧缩等技能,想要100%还原APK的源码几乎是不或许的,所以在实践进行逆向剖析的时分,一般都是依据想完成的意图,剖析出APK的部分源码和完成逻辑,然后对这一部分源码进行修正后与原始的APK打包在一起,这样就获得了一个完成自己特定意图的APP。
总结与考虑
以上文章就介绍的到这儿,读到这儿或许你们都觉得本篇涉及逆向的常识点并不多,而我也说过,了解Android逆向,要先了解Android,之所以这样说呢,是因为Android逆向的学习,终究仍是要归到Android自身,有了前面的了解,信任会对接下来Android逆向剖析上有着很大协助。
后边要讲的便是逆向剖析的手法以及详细流程,实践与理论结合的边练边学了,咱们能够自己针对Android运用程序的反编译流程练习一番,备好东西,下一篇开搞。安卓逆向

安卓逆向有什么用

这是伪出题,因为这两个方向仅仅搭载的渠道不同,许多重要的知识点都是想通的,乃至能够说你没有Windows逆向的根底,可能安卓逆向也不见得做的多好。\r\n前景的话一半一半,商场机会的话安卓更好一些,现在很多公司,尤其是安全公司都在做安卓安全这块,商场相对空白。你能够参照于15PB课程体系,看看自己把握到什么程度,以及为什么说安全逆向也要具备Windows逆向的一些内容了
学安卓逆向要会java吗
需求学习JAVA,C,等语言,前期能够框架式的学习,中后期深入需求好好学了解正向开发,包括通讯协议等,以及各类smali,arm,asm等汇编语言。找工作的话,一般是协议和脱壳加固方向了,文件结构,虚拟机这些通通得深入学习。当然,现在能找安卓逆向工作的都是有正向开发根底的。欢迎追问
什么叫android逆向开发
便是ANDROID程序的目标代码反向到JAVA源程序,不是反汇编,是返JAVA。\r\n一般WINDOWS下.exe只能反汇编。但JAVA是解说执行,伪编译生成的是中间\r\n机器码,能够逆向到源程序,但没有了注释

赞(0)
未经允许不得转载:志达IT网站 » android api安卓逆向(安卓逆向有什么用)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

志达IT网站 每天分享编程和互联网的IT技术博客

登录/注册联系我们