androguard学习

This commit is contained in:
estomm
2021-12-14 17:16:10 +08:00
parent 5530e6f9e2
commit fbb06e0ee6
16 changed files with 272 additions and 62 deletions

BIN
Python/androguard/1.apk Normal file

Binary file not shown.

BIN
Python/androguard/2.apk Normal file

Binary file not shown.

BIN
Python/androguard/3.apk Normal file

Binary file not shown.

BIN
Python/androguard/4.apk Normal file

Binary file not shown.

BIN
Python/androguard/5.apk Normal file

Binary file not shown.

View File

@@ -0,0 +1,143 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1 Android编译原理\n",
"### 编译过程示意图\n",
"![](image/2021-12-11-11-29-01.png)\n",
"\n",
"1. 打包资源文件生成R.java文件。\n",
"2. 处理aidl文件生成相应的Java文件。\n",
"2. 编译工程源代码生成相应的class文件。\n",
"2. 转换所有的class文件生成classes.dex文件。\n",
"2. 打包生成APK文件。\n",
"\n",
"下面是更详细的编译示意图\n",
"![](image/2021-12-12-19-56-23.png)\n",
"\n",
"### 编译过程文件\n",
"1. Java文件-----应用程序源文件。Android本身相当一部分都是用java编写而成\n",
"2. Class文件------Java编译后的目标文件.不像J2sejava编译成class就可以直接运行android平台上class文件不能直接在android上运行。android的class文件实际上只是编译过程中的中间目标文件需要链接成dex文件后才能在dalvik上运行\n",
"3. Dex文件-----Android平台上的可执行文件.Android虚拟机Dalvik支持的字节码文件格式Google在新发布的Android平台上使用了自己的Dalvik虚拟机来定义 这种虚拟机执行的并非Java字节码 而是dex格式的字节码。在编译Java代码之后通过Android平台上的工具可以将Java字节码转换成Dex字节码。\n",
"4. Apk文件-------Android上的安装文件Apk是Android安装包的扩展名一个Android安装包包含了与某个Android应用程序相关的所有文件。apk文件将AndroidManifest.xml文件、应用程序代码(.dex文件)、资源文件和其他文件打成一个压缩包。一个工程只能打进一个.apk文件\n",
"\n",
"\n",
"### 相关工具介绍\n",
"* APTannotation processing tool是一种处理Java/android注解的工具它对源代码文件进行检测找出其中的Annotation后对Annotation进行额外的处理。Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件文件具体内容由Annotation处理器的编写者决定APT还会编译生成的源代码文件和原来的源文件将它们一起生成class文件。代码可能用到了面向切面变成可能有大量的注解通过APT处理源代码讲注解展开生成新的源代码。\n",
"* AspectJ最常用的字节码处理框架有 AspectJ、ASM 等等,它们的相同之处在于输入输出都是 Class 文件。并且,它们都是 在 Java 文件编译成 .class 文件之后,生成 Dalvik 字节码之前执行。AspectJ是一个面向切面的框架它扩展了Java语言。AspectJ定义了AOP语法它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。\n",
"* \n",
"\n",
"### 一些代码防护措施\n",
"\n",
"* 代码混淆\n",
"* 核心方法Native\n",
"* 动态加载dex加载dex之前dex文件加密\n",
"* 动态加载so\n",
"* 所有声明字符串加密\n",
"* 使用3方加固平台治标不治本\n",
"* 插入代码花指令jui工具编译方法报错\n",
"\n",
"### 反编译的目标\n",
"\n",
"1. 查看动态代码逻辑将apk里的dex文件转换成Jar包再通过工具查看编译前的java源文件。\n",
"2. 查看静态配置文件通过工具查看apk里对应的AndroidManifest.xml、resources.arsc、res各布局文件等二进制文件。\n",
"\n",
"### APK文件解析\n",
"![](image/2021-12-12-19-41-07.png)\n",
"\n",
"* assets文件夹原始资源文件夹对应着Android工程的assets文件夹一般用于存放原始的图片、txt、css等资源文件。\n",
"* lib存放应用需要的引用第三方SDK的so库。比如一些底层实现的图片处理、音视频处理、数据加密的库等。而该文件夹下有时会多一个层级这是根据不同CPU 型号而划分的,如 ARMARM-v7ax86等。\n",
"* META-INF保存apk签名信息保证apk的完整性和安全性。\n",
"* res资源文件夹其中的资源文件包括了布局(layout),常量值(values),颜色值(colors),尺寸值(dimens),字符串(strings),自定义样式(styles)等。\n",
"* AndroidManifest.xml文件全局配置文件里面包含了版本信息、activity、broadcasts等基本配置。不过这里的是二进制的xml文件无法直接查看需要反编译后才能查看。\n",
"* classes.dex文件这是安卓代码的核心部分,dex是在Dalvik虚拟机上可以执行的文件。这里有classes.dex 4个文件说明工程的方法数较多进行了dex拆分。如果apk的方法数超过了65535会生成多个dex文件反编译的话需要对这多个dex文件均进行转换Jar包处理。\n",
"* resources.arsc文件记录资源文件和资源id的映射关系。\n",
"\n",
"### 注解说明\n",
"运行时注解\n",
"通常被定义的注解需要通过反射来获取相关值\n",
"编译时注解\n",
"在代码构建编译过程的时候,生成java文件然后供需要的类进行调用\n",
"\n",
"两者根本区别在于,前者是程序员预先写好的java文件中,直接调用的,\n",
"而后者是程序员写好java代码的生成规则,程序员自己不写java文件,\n",
"交给编译器去写java文件,,java文件只有编译器编译完成后才能调用。\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 常用的命令行工具\n",
"* androguard:所有工具的集合\n",
" * androguard analyze交互式命令行Ipython工具\n",
" * androguard cz:create a call graph调用图工具\n",
" * androguard gui:图形界面工具\n",
" * androguard sign:证书管理工具\n",
" * androguard axml:manifest解析工具\n",
" * androguard arsc:resource解析工具\n",
" * androguard decompile:反编译工具并创建cfg\n",
" * androguard dissassemple:dex反编译工具\n",
"\n",
"它本身是一个ipython分析工具既可以作为命令行工具执行也可以嵌入到Python脚本中用于分析Python文件。以上命令都会开启一个ipython交互式命令行。"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"from androguard import misc\n",
"a,d,dx = misc.AnalyzeAPK('1.apk')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [],
"source": [
"dx.get_classes()\n",
"axml = a.get_android_manifest_xml()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"from androguard import cli"
]
}
],
"metadata": {
"interpreter": {
"hash": "5ef0042cb263260037aa2928643ae94e240dd3afaec7872ebebe4f07619ddd0c"
},
"kernelspec": {
"display_name": "Python 3.8.8 64-bit ('ml': conda)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB