IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 安卓应用逆向过程-(以某班为例) -> 正文阅读

[系统运维]安卓应用逆向过程-(以某班为例)


安卓应用逆向过程

本篇文章仅作以记录我的一次安卓应用逆向过程,供学习使用,请勿用做任何非法违规事物,违规者法律必将严惩。

搭建手机虚拟环境

  • 作者在这里采用的是Vmos_pro+xpose作为手机虚拟环境。
  • Vmos_pro推荐设置root且允许xposed,建议选择极客模式+安卓7x/安卓5x
    配置图像

软件查壳

在直接进行反编译的过程中直接用androidkiller或者apktool进行反编译可能会遇到许多无效的反编译结果或者反编译失败的问题,这个结果中可能是因为软件被进行了加壳。所以建议首先进行软件查壳,pkid的查壳效果还是挺不错的。因此此处以pkid为例进行介绍。

  • 作者使用PKid进行查壳,资源包位置资源包中除了查壳工具以外还含有多种脱壳工具。
  • 操作流程还是比较简单的,打开软件输入链接或者直接将安装包拖入PKid之中。
  • 运行后结果图片参考,本次遇到的应用加壳为腾讯御安全加固方式。
    如果应用未被加固的话可以跳到后面的常规方式进行反编译。
    pkid

脱壳(本教程适合腾讯御安全的加壳)

  • 安装好环境之后打开虚拟机,安装mt管理器反射大师资源包地址并在xposed中激活反射大师模块并重启虚拟机。

  • 使用反射大师并选中目标应用,清除后台目标应用的活动。

  • 再次点击目标应用选择打开。

  • 打开目标应用之后等待屏幕上出现的红色六芒星,点击红色六芒星。

  • 选中当前Activity然后点击导出dex,关闭应用与反射大师。

  • 打开mt管理器并为其授权超级用户,选中导出的classes.dex文件,本过程中我选择的是使用其dex模块并将dex转化为jar,除了本方式外也可以采用下方操作将dex文件转化为jar方便后续打开。

  • 也可以参考吾爱破解大佬的文章 实战腾讯御安全脱壳与修复,多图详细解说进行更具体d\的操作。

  • 【安卓逆向】腾讯御加固脱壳修复,实战逆向同声翻译超级版,全网最详细!等视频教程

软件抓包(与主题关系不太大)

  • 在本地安装httpcanary,在虚拟机内安装justTrustMe资源包位置,在xposed中激活justTrustMe模块后重启Vmos
  • 因为在虚拟机内无法进行网络代理操作,因此选择将抓包工具安装在本地。
  • 打开httpcanary->目标应用->com.vmos.pro
  • 点击httpcanary右下角开始抓包。
  • Vmos内打开目标应用,正常打开,一定记得安装justTrustMe并打开xposed中的模块,在打开xposed后一定要重启Vmos防止抓包错误情况。

常规方式进行反编译

class.dex文件反编译

  • 在这一步之前首先需要你的电脑已经配置好java环境,如果没配置可以参考【Java安装教程】
  • 下载dex2jar并解压,资源地址
  • 将需要反编译的classes.dex文件复制到dex2jar文件夹内。
  • 在地址栏输入cmd并回车,打开dos界面。
d2j-dex2jar classes.dex
  • 文件输出为jar文件

androidManifest.xml提取程序入口

  • 直接打开apk文件中的androidManifest.xml可能会输出乱码字符串
  • 因此我们使用 apktool进行逆向apk获得其完整的 androidManifest.xml文件,apktool文件资源在此。
java -jar apktool.jar d **.apk # **为apk安装包名称
  • 将输出的文件夹之中的androidManifest.xml打开即为所需的文件。
  • 在这一步能够获得程序入口,后续也方便对一些文件进行更改。
  • xml文件格式通常如下,对照xml格式的字段即可找到程序入口为MainActivity.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.it123cp.logintest"
    android:versionCode="1"
    android:versionName="1.0">
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    <!-- 设置MainActivity包中的MainActivity类为Activity(src\MainActivity\MainActivity.java) -->
        <activity android:name="MainActivity$MainActivity">
            <intent-filter>
    <!-- 设置MainActivity为应用程序的入口点 -->
                <action android:name="android.intent.action.MAIN" />
    <!-- 设置应用程序图标显示在手机主界面上(可以打开应用程序) -->
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

jd-gui

  • 在这一步对以上步骤过程中拿到的.jar文件进行打开。
  • 通过androidManifest.xml提取的程序入口开始按照函数逐步打开每个函数。
  • 本次逆向过程中主要是为了获取密码的加密字段
  • 因此对login函数进行定位。密码加密函数
  • 获取到加密函数以及加密方式,我们期望能够获得其加密的Key值。加密函数
  • 我们继续进行溯源获得最末端位置,直到最后还是没有找到加密的key值。
  • 但是我们获得了如下信息,他动态的加载了**共享库
  • **库
  • 我们在apk文件中找到了lib**.so并对其进行处理。

.so文件反编译以及遇到的坑

python的ctypes库

  • 可以考虑使用ctypes库的cdll函数读取lib**.so文件。
  • 代码如下
from ctypes import cdll

cur=cdll.LoadLibrary('lib**.so')

print(cur.xxx)#lib**.so 的xxx模块
# windows
OSError: %1 不是win32应用程序。
# linux
OSError: ./lib**.so:wrong ELF class: ELFclass32.
  • 因此我采用 ida_pro打开我的lib**.so文件。

ida_pro

  • 下载ida_pro工具包,资源地址,打开并解压。
  • 点击ida.exe->ok->Go->file->open打开目标.so文件点击ok->yes
  • 我们使用ida.exe而不是ida64.exe作为工具打开lib**.so文件.,请注意区别,防止后续步骤出错。
  • 以下为我的步骤,与读者需求可能有所不同,推荐使用大佬的思路进行逆向Android逆向之旅—破解某应用加密算法(动态调试so和frida hook so代码)
  • 根据前面所获得的信息,我们打开了如下函数获取公钥。
    pwd
  • 直接打开后是这样
    pwdpubilc
  • 这样不利于我们获取Key,当然也有大佬是直接翻伪汇编语言的。我们则选取捷径,按下f5即可跳转到c代码页面(捷径的缺点在于ida无法识别的函数字段可能会省略跳过,请自行斟酌)
    key
  • 如上图所示区域即为所求Key值。

参考资料
【安卓逆向教程】
【安卓逆向工具】
【腾讯应用加固的脱壳分析和修复】
【从安卓运行时出发进行脱壳处理】
【怎样反编译 Android APK】
【安卓逆向工程】

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 17:05:23  更:2021-08-12 17:06:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 12:28:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码