安卓应用渗透第一篇:安卓逆向回顾和梳理-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 开发者指南

《第一行代码 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的主要内容,如果未能解决你的问题,请参考以下文章

APP渗透抓不到包/安卓逆向--Frida

逆向&编程实战Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控

安卓逆向之酷狗signature

Android安卓应用渗透Hook:使用frida进行绕过和解密

安卓逆向 | Protobuf协议逆向和仿真&举个栗子

什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战