APP是指应用程序(Application),是指能够在手机、平板电脑、电脑等移动设备上运行的软件。APP可以帮助用户进行各种功能操作,如社交媒体、游戏、购物、学习、工作等。用户可以通过应用商店或者在线下载安装APP,然后在设备上使用它们。APP的种类非常丰富,能够满足用户不同的需求和兴趣。
APP的安装文件格式有多种,具体取决于不同的操作系统和平台。
对于iOS(苹果)设备,APP的安装文件格式是IPA(iOS App Store Package),它是一种压缩格式的文件,包含了应用程序的二进制代码和资源文件。
对于Android设备,APP的安装文件格式是APK(Android Package Kit),它也是一种压缩格式的文件,包含了应用程序的二进制代码、资源文件和清单文件。
此外,针对其他平台如Windows、Mac等,APP的安装文件格式可能是EXE(Windows可执行文件)或DMG(Mac磁盘映像),具体取决于应用程序的开发和发布方式。
总之,不同操作系统和平台对应的APP安装文件格式可能不同,但它们都是以某种压缩格式打包应用程序的二进制代码和相关资源文件。
逆向分析,即拿到应用程序apk文件时,使用一些第三方工具进行反编译、抓包、注入等手段,对应用程序逻辑、数据结构、攻击方式进行分析。
常用的分析方法为静态分析和动态分析
在不运行代码的方式下,进行程序代码分析,进而得到线索
在运行代码的方式下,进行网络流等动态的分析,进而得到线索
APK加固是对APK代码逻辑的一种保护。原理是将应用文件进行某种形式的转换,包括但不限于隐藏、混淆、加密等操作
APK加固的初衷是防止APK被逆向、防篡改、实现数据保护。早期电诈APP中很少有加固的应用,而近期加固的电诈APP明显增多。
apk本质是个.ZIP格式的的压缩包,直接修改后缀解压就能看到完整的文件结构
AndroidManifest.xml 全局清单文件
classes.dex运行在dalvik虚拟机上的可执行文件
META-INF 签名信息(安装验证)
resources.arsc 二进制资源索引文件
res 资源文件夹
Asssets 资源文件夹
lib 存放so文件
是每个Android程序中必须的文件,它位于整个项目的根目录。该文件配置程序运行所必要的组件、权限、以及一些相关信息。
主要包括:
SDK是软件开发工具包(Software Development Kit)的缩写。它是一组开发工具和文档的集合,用于帮助开发者创建特定软件系统、框架、库或应用程序的工具。SDK通常包括各种库、API、示例代码、开发者文档和工具。
通过使用SDK,开发者可以简化软件开发过程,提供了一些常见功能的封装,如网络通信、图形界面、数据存储等。SDK还可以提供开发环境、调试工具和模拟器等,帮助开发者测试和调试应用程序。
SDK通常针对特定的平台或技术,如移动应用程序开发(如Android或iOS)、Web开发、游戏开发等。开发者可以使用SDK来访问平台的特定功能和服务,加快开发速度并提高应用程序的质量。
在Android系统中,不同app之间是依靠包名、数字签名共同来进行区分的,签名用来保证apk包的完整性和系统的安全性,里面包含了三个文件,MANIFEST.MF、CERT.SF、CERT.RSA
包括图片、颜色等等,在这个目录中的所有文件,最终会被映射到Android工程中的R文件中,生成对应的int型的ID,在程序中访问这些资源文件的时候,直接使用资源的ID就能进行调用
目录 | 功能 |
res/anim/ | 定义的是预置的动画对象。一般是逐帧动画或补间动画。而实际使用上,都是一些淡入淡出,缩放和移动等的补间动画居多 |
res/color | 定义一些Android view状态变化时,使用的颜色值。这通常是绑定到一个界面元素上的,比如一个button被按下,弹起或disable时的颜色 |
res/drawable res/drawable-hdpi res/drawable-land-hdpi res/drawable/mdpi res/drawable/ldpi res/drawable/port ... |
定义要被用到的位图资源文件。这些位图资源可以是 |
bitmap,也可以是用xml描述的bitmap | |
注意:文件后缀为9.png是一种特殊的位图,一般是通 | |
过draw9patch生成的,是一种可自动伸缩的位图资源 | |
Drawable的其他目录形式,land是横屏的,port是竖屏 | |
的;hdpi是高分辨率的,ldpi是低分辨率的。这里可以放置为特定情况下的界面优化资源 | |
res/layout/ | 定义的UI layout,被aapt parser后,可由Android直接render成view界面。 这里也有横竖屏和dpi之分 |
这个目录中存放着应用依赖的native文件,这些以.so结尾的文件是用C或C++语言编写的,一个简单的Android应用可能不需要这些库,但功能全面而又追求性能,单纯依靠JAVA会很吃力,这时就依赖C/C++。在涉案的APK文件中,一些数据因需要加密也会使用SO文件进行封装处理。
根据手机CPU的架构,lib库大体上可分为四种:ARM、ARM-V7、MIPS和x86,对应目录分别是:armeabi、armeabi-v7a、mips和x86
运行在dalvik虚拟机上的可执行文件,是java源码编译后生成的java字节码文件(首先是java文件通过jdk编译成字节码文件,然后通过dex编译成classes.dex)。页是逆向分析的主要对象。如分析APK文件运行链接的域名、IP、敏感静态信息及解密算法和实现方式等
主程序/入口程序:通过Android Manifest配置清单文件:确定入口程序,一般是一个Activity活动
入口方法:参考Activity的生命周期,一般入口方法是onCreate()