安卓应用渗透第一篇:安卓逆向回顾和梳理-2211
Posted 区块链市场观察家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓应用渗透第一篇:安卓逆向回顾和梳理-2211相关的知识,希望对你有一定的参考价值。
文章目录
安卓开发课程回顾
安卓编程理念:逻辑和视图是严格分开的。
第一课:安卓项目文件结构(逻辑视图)
-
manifests(清单文件)
每个安卓应用系统都一定有androidManifest.xml文件,为Android系统提供应用的基本信息,系统必须获得这些信息才能运行任意应用代码。
举例:程序的activity必须在Manifest文件中定义,定义第一个activity的代码如下:(可以理解为进入app后的首个页面)
-
java
MainActivity存放第一个activity的代码,使用setContentView()函数定义activity的页面布局layout。系统执行java文件,然后寻找布局文件,将布局控件可视化。
-
res资源
drawable 图像包含两个文件,
前景图ic_launcher_foreground、后景图ic_launcher_background。
layout 布局文件
mipmap 图标,包含ic_launcher和ic_launcher_round两个文件。
此处引用了drawable的两个文件作为图标。
ic_launcher指桌面图标,包含foregroud、backgroud两个参数。
ic_launcher_round:圆形图。
values 变量包含colors.xml、strings.xml、styles.xml,添加控件需要定义变量名和变量值,这时候需要修改strings.xml文件:
全图:
第五课:文件读取和数据库存取
文件存取
文件存储是Android最基本的数据存储方式,不对存储的内容进行任何格式化处理。
指定的文件名不能包含路径,默认存储到 /data/data/<packagename>/files/
目录下。
写入文件的执行过程:
openFileOutput(filename, mode) ,返回文件输出流对象FileOutputStream -->输出流写入对象OutputStreamWriter() --> 缓冲区写入对象BufferedWriter(),关闭缓冲区写入对象.close()
读取文件的执行过程:
openFileInput(filename) ,返回文件输入流对象FileOutputStream --> 输入流写入对象InputStreamReader() --> 缓冲区读取对象BufferedReader() --> 把数据存放到StringBuilder对象,关闭缓冲区读取对象。
SQLite数据库存取
Android系统内置了数据库!SQLite是轻量级的关系型数据库,通常只需要几百KB的内存,因此特别适合在移动设备上使用。
Android专门提供SQLiteOpenHelper帮助类,可以简单地实现数据库的创建和升级。
SQLiteOpenHelper是一个抽象类,使用前提是创建自己的帮助类去继承他。
注意:通过内置类创建数据库和交互,无需数据库账号密码等。
安卓开发:案前资料库
《Android官方培训课程中文版(v0.9.7)》(貌似已过时)
官网Training:https://github.com/kesenhoo/android-training-course-in-chinese
文档在线阅读:http://hukai.me/android-training-course-in-chinese/
《第一行代码 Android 第2版》,郭霖著 (主要参考资料)
安卓逆向课程回顾
第一课:基础逆向工具(Apktool, Keytool, Jarsigner)
Apktool 是一个反编译Android Apk的第三方工具。它可以反编译资源,并在进行修改之后重新打包Apk。
功能:将资源解码成原形式,比如png和xml。将解码资源重新打包成apk/jar等。
安装地址:https://ibotpeaches.github.io/Apktool/install/
开启代理,下载apktool.bat,下载apk-tool_2.4.1.jar,重命名为apktool.jar,把apktool.bat和apktool.jar剪切到C:\\Windows目录下,就可以在命令行运行apktool软件啦。
值得一提的是,apktool.jar依赖Java1.8或更高版本。基础命令如下:
运行命令:apktool
反编译APK文件:apktool d test.apk
将反编译后的文件重新打包:apktool b test
使用 KeyTool 生成加密密钥,使用 Jarsigner 根据密钥进行签名:(入门时可以重新设置证书和签名,是因为没有防篡改机制,实战中多半会校验。当然如果能绕过的话,那就可以给 apk 种马然后发布了)
生成证书:keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore
对apk进行签名:(把test.apk替换为自己的apk名称,此处是app-debug.apk)
jarsigner -verbose -keystore abc.keystore -signedjar test.apk test.apk abc.keystore
第二课:破解登录的两种方式
1.通过审计 smali 代码,找到内嵌的用户名/口令常量。
2.破解证书和签名,通过修改关键语句,改变程序执行流程或执行内容,从而绕过验证。
第四课:反编译工具-Androidkiller
该反编译工具拥有 UI 界面,比 ApkTool
更加方便。
安装和使用,可以参考实验文章:【移动安全技术】_安卓逆向4-使用AndroidKiller插入广告页
第五课:破解支付流程、监控分析工具
破解支付流程:
- 第一步,反编译;
- 第二步,修改相关代码流程;
- 第三步,重新签名;
- 第四步,绕过签名检测,启动破解后的应用。
辅助逆向分析的监控工具:Monitor(Windows自带工具)。
进一步了解可参考:ADB、Android Monitor、DDMS、HierarchyViewer、MAT、SysTrace、TraceView 性能分析工具使用大全
第六课:动态调试(Smalidea、adb)
动态调试,可以分析数据流,对渗透测试的帮助较大。
可以参考实验文章:【移动安全技术】_安卓逆向6:使用smalidea动态调试
安卓逆向:案前资料库
反编译工具
:安卓逆向_2 — Androidkiller,apktool、dex2jar、jd-gui、jadx反编译工具 的 安装、设置及使用教程…
(动态)调试分析工具
:ADB、Android Monitor、DDMS、HierarchyViewer、MAT、SysTrace、TraceView 性能分析工具使用大全
小结:反编译后的渗透设想(前提是没壳或脱壳)
代码包含的常量数据(最常见)
第一版:
口令信息
敏感接口信息
破解签名(极少见但危害大)
重新打包并启动成功。
动态调试(下断点调试分析)
第一版:
可以掌握数据流进行篡改渗透
可以 Hook 前端代码
可以通过注释绕过各种检测?
甚至在登录校验时通过密码变量获取到非内置的用户密码?
以上是关于安卓应用渗透第一篇:安卓逆向回顾和梳理-2211的主要内容,如果未能解决你的问题,请参考以下文章
逆向&编程实战Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控