码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【安卓应用渗透】第一篇:安卓逆向回顾和梳理-2211


    文章目录

      • 安卓开发课程回顾
          • 第一课:安卓项目文件结构(逻辑视图)
          • 第五课:文件读取和数据库存取
              • 文件存取
              • SQLite数据库存取
          • 安卓开发:案前资料库
      • 安卓逆向课程回顾
          • 第一课:基础逆向工具(Apktool, Keytool, Jarsigner)
          • 第二课:破解登录的两种方式
          • 第四课:反编译工具-Androidkiller
          • 第五课:破解支付流程、监控分析工具
          • 第六课:动态调试(Smalidea、adb)
          • 安卓逆向:案前资料库
      • 小结:反编译后的渗透设想(前提是没壳或脱壳)
          • 代码包含的常量数据(最常见)
          • 破解签名(极少见但危害大)
          • 动态调试(下断点调试分析)

    安卓开发课程回顾

    安卓编程理念:逻辑和视图是严格分开的。

    第一课:安卓项目文件结构(逻辑视图)
    • 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//files/ 目录下。

      写入文件的执行过程:
    openFileOutput(filename, mode) ,返回文件输出流对象FileOutputStream -->输出流写入对象OutputStreamWriter() --> 缓冲区写入对象BufferedWriter(),关闭缓冲区写入对象.close()
    
      读取文件的执行过程:
    openFileInput(filename) ,返回文件输入流对象FileOutputStream --> 输入流写入对象InputStreamReader() --> 缓冲区读取对象BufferedReader() --> 把数据存放到StringBuilder对象,关闭缓冲区读取对象。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    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
    
    • 1
    • 2
    • 3

    使用 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
    • 2
    • 3
    • 4
    第二课:破解登录的两种方式

    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 性能分析工具使用大全

    小结:反编译后的渗透设想(前提是没壳或脱壳)

    代码包含的常量数据(最常见)

    第一版:

    口令信息
    敏感接口信息
    
    • 1
    • 2
    破解签名(极少见但危害大)

    重新打包并启动成功。

    动态调试(下断点调试分析)

    第一版:

    可以掌握数据流进行篡改渗透
    可以 Hook 前端代码
    可以通过注释绕过各种检测?
    甚至在登录校验时通过密码变量获取到非内置的用户密码?
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    打码平台之图鉴的使用步骤
    代码拿走即用!Python推送内容到公众号实现自动化
    FPGA——SPI总线详解(概念)
    常用hivesql记录
    【手把手带你刷好题】Java刷题记录 21——>>27
    基于Java毕业设计音乐管理系统源码+系统+mysql+lw文档+部署软件
    多目标优化问题的研究概述(Matlab代码实现)
    2023/09/15 qt day1
    MySQL的general日志
    springboot参数校验的三种方式
  • 原文地址:https://blog.csdn.net/soldi_er/article/details/127931920
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号