当前位置: 移动技术网 > 移动技术>移动开发>Android > 安卓逆向学习之认识apk文件

安卓逆向学习之认识apk文件

2020年11月26日  | 移动技术网移动技术  | 我要评论
安卓逆向学习之认识apk前言一、apk是什么?二、apk内部文件介绍1.assets文件夹2.lib文件夹3.META-INF文件夹4.res文件夹5.AndroidManifest.xml主程序文件6.classes.dex文件7.resources.arsc文件结尾前言作者介绍的安卓逆向基本是和apk相关的,所以逆向针对于apk,我们首先得了解它得结构和工作原理才能更好得学习安卓逆向,后期会针对于apk内的文件和内部代码做介绍的一、apk是什么?其实apk就是安卓平台可以运行的应用程序,它是


前言

作者介绍的安卓逆向基本是和apk相关的,所以逆向针对于apk,我们首先得了解它得结构和工作原理才能更好得学习安卓逆向,后期会针对于apk内的文件和内部代码做介绍的


一、apk是什么?

其实apk就是安卓平台可以运行的应用程序,它是基于java和安卓编写的,其实真正的安卓还是比较复杂的,我们想要深入学习还是需要比较多的时间去研究的,apk和压缩包是一样的,它也是由开发工具和签名工具一起打包成的应用程序,我们可以将apk的后缀改为rar/gz等压缩包格式,然后解压到本地
apk
我们直接将后缀名修改成压缩包格式,使用压缩包工具或者点击查看就可以看到内部的一些文件
压缩格式

二、apk内部文件介绍

1.assets文件夹

这个文件夹下存放的是静态资源文件,他是不需要appt编译的静态资源,我们可以看到一些基本的图片资源等等
静态资源
我们还可以看到一些静态的js文件和页面
静态资源文件
内部的代码会先分析你是ios系统还是android系统或者是其他平台
js判断
后面作者会继续分析此app的内部代码的,这里作者提一点,安卓开发虽然是基于java和安卓,但是基本的前端还是会涉及到的,针对于这一点,作者建议了解下前端还是比较好的,这里作者将代码放在下面,方便各位学习

// An highlighted block
    UKNative.getApiInterface = function(){
        var UKNativeAPI = null;
        if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.UKNativeIOS) {
            //IOS
            UKNativeAPI = window.webkit.messageHandlers.UKNativeIOS;
        }
        else if (window.UKNativeAndroid && window.UKNativeAndroid.postMessage) {
            //ANDROID
            UKNativeAPI = window.UKNativeAndroid;
        }
        else{
            //其它平台

        }
        return  UKNativeAPI;
    }

2.lib文件夹

此文件夹和assets完全相反,它是存放动态资源的,windows的动态资源很常见的比如dll,安卓底层是unix,所以它的动态资源都是so,so需要动态调试的方法来查看

动态文件
这里作者就先不动态调试so文件了,后面会继续写文章讲解的,这里并不是作者偷懒,只是为了方便大家学习,基础肯定要一步步来


3.META-INF文件夹

这个文件夹是专门拿来存放签名文件夹的,一般apk编译打包成apk的时候并不是完整的,需要签名工具签名标识才算是完整的apk,.MF即为签名文件,比较显眼,一打开文件夹就可以看到
安卓逆向签名文件


4.res文件夹

这里面存放的是xml布局文件,图片,字符串信息,需要使用appt编译的资源文件,它会在resource.arsc(资源索引表)中生成索引id
xml布局
这里作者要简单介绍下res内部每个文件夹

文件夹作用
anim这个文件夹下存放的是预置动画
color这是安卓view发生变化时用的颜色值,通常绑定到界面元素上的,比如button按下,弹起,diable的时候会怎么怎么变化
res/drawable/ res/drawable-hdpi res/drawable-land-hdpi res/drawable/mdpi res/drawable/ldpi res/drawable/port这些文件都是定义位图资源的,可以是bitmap,也可以是xml描述的bitmap,Drawable 的其他目录形势, land 是横屏的, port 是竖屏的; hdpi 是高分辨率的, ldpi 是低分辨率的, hdpi 是高分辨率的
res/layout定义的是ui的layout,被appt parser之后,可由安卓直接render成view,这里也是竖屏和dpi之分的
res/values/这个文件夹下是可以被编译成很多类型的xml文件的,array.xml 定义数组, styles.xml 定义 样式 (style) 对象
res/xml/任意的xml文件,可以使用Resource.getXML()获取
res/raw/可以直接由外部存放的资源文件,使用Resource.openRawResource(),填写资源的id即可使用,例如R.raw.someoffiles

可以简单看一下raw文件夹下的一些资源文件
资源文件
内部还有一些js文件可以看看

wifi
这里的代码大致看了一下,应该是收集wifi,设备的状态信息,作者其实拿来当案列的app其实是bc的app,是作者之前无意间在第三方平台上整到的,此apk没有加壳
信息
这个app会收集很多用户的隐私和环境信息,作者提醒大家远离bc,这玩意儿一碰很容易会让你上瘾,好了,我们继续讲apk


5.AndroidManifest.xml主程序文件

这个文件其实就相当于一个配置清单,大致介绍了主程序入口,apk使用的权限,四大基本组件的信息
权限
可以简单的看到请求的有网络权限,读取电话的权限,以及文件权限,下面还会记录主程序的入口点,这个比较重要,方便我们逆向分析
主程序
这里说一下找主程序入口的方法,我们首先可以搜索android:name="“的属性里面查找action.Main和intent.category.LAUNCHER属性,这两个一般都是在一起的,如果对应的activity标签下拥有这两个属性,那么毫无疑问对应的activity中的android:name=”"属性里面就是主程序的入口点
主程序

这里作者提示大家不要安装来历不明的apk文件,许多木马是可以直接插入到apk中去的,而且apk木马制作比较简便,网上也有许多教程


6.classes.dex文件

这个文件有没有感觉很熟悉呢,这就是源代码文件,我们拿到这个文件基本就相当于拿到源码了,不过这个文件大于65535好像会分包处理这里作者也没去仔细研究
源码
这里的dex我们可以使用dex2jar工具将dex反编译为java文件,这样我们就可以直接使用java开发工具或者编译工具打开查看源代码了,这里作者就不放工具了,网上其实都有,作者建议没有的可以去吾爱搜索下逆向工具包,或者去看雪论坛搜素下工具包,论坛的各位大佬都有放出工具包
源代码
这里我们已经可以看到源代码了,之后就可以在代码层进行各种审计和调试了


7.resources.arsc文件

这就是之前说的索引文件,里面记录了要使用的资源id

索引
这里作者使用的是hex的编辑器,可以看到一些内容,不过大多是乱码,需要专门的工具查看索引表,这里作者就不去整了


结尾

作者大致介绍了一下apk的构成,怎么查看apk,如何查找主程序入口点,每个文件是干什么用的,下一篇作者将介绍apk的打包流程和java基础,作者写文章的初衷只是为了更好的交流学习,文章存为手写,如有相同纯属巧合,文章都是作者的学习笔记,写的不好还望大家见谅,有兴趣的也可以留言交流和学习,互相学习一起进步

本文地址:https://blog.csdn.net/qq_42815324/article/details/110202347

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网