100天精通Andriod逆向——第5天:app逆向流程简介
Posted Amo Xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了100天精通Andriod逆向——第5天:app逆向流程简介相关的知识,希望对你有一定的参考价值。
目录
一、app 界面控件的查看
1.1 查看界面控件的作用
主要作用:分辨 app 是哪种形式、语言、工具开发的、对于不同方式开发的 app 需要采取不同的方式进行 nx。
原生方式开发的 app,使用 Java 和 C++ 开发,加密用的是 Java 和 C++
H5 的 app,使用 Webview 控件加载网页,加密用的是 JS
app 自动化测试,需要知道控件的 id,或者说需要定位到控件
如何查看呢? 使用 uiautomatorviewer.bat
查看,在 android SDK 根目录 tools\\bin
,如下图所示:
双击 uiautomatorviewer.bat
查看某 app 登录控件的 id,如下图所示:
禁止截屏操作:
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
二、app 分析的大致流程
2.1 抓包分析是否有需要逆向的加密字段
这里以某 app 登录为例,输入账号和密码,点击登录抓包,如下图所示:
观察发现此处是有密文的,所以需要我们逆向分析。
2.2 查壳分析是否有加固
使用软件查看即可,将要判断是否有加固的 app 拖入到软件中,如下图所示:
2.3 查看界面元素
通过查看界面元素,看是否是原生开发的 app,因为不同形式 app 分析方法不一样,在小节 一、app 界面控件的查看
中已经演示过,这里就不再赘述
2.4 关键代码定位
2.4.1 传统定位方法
- 通过控件绑定的事件代码,来一步步定位 关键:控件 id、setOnClickListener 等
- 人肉手工搜索字符串,如 api 接口、加密的参数名(当有多个可疑参数时,需要断点调试、动态调试、 Hook等)
- 搜索同一个数据包中,没有加密的参数名,如登录时,需要账号和密码,密码加密,账号没有,此时可尝试搜索账号变量名
局限性: app 可能被反编译 搜不到关键字,如: html5 的 APP、字符串被混淆加密(dex 的字符串加密可以用代码自动实现,需要使用到 dexlib2 这个库)、反射调用的相关类、app 被加固了、动态加载的 dex、热修复
由此可见,常规手段有着太多的局限性,hook 系统函数来定位关键代码才是最通用的。
2.4.2 关键代码快速定位
- 跑一下自吐算法插件
- Hook 常用系统函数,如果 app 有调用就打印函数栈
- 在自制的沙盒中运行,打印 app 运行过程中的指令、函数调用关系等
注意:逆向分析不是说非要一步到位,我们需要边分析、边调试、观察怀疑、不断推翻尝试、不断找新关键函数的过程,要慢慢来,铁杵磨成针。
2.4.2.1 Hook 可以用来做什么
- 可以用来判断 app 执行某个操作的时候,是否经过我们所怀疑的这个函数
- 可以用来修改被 hook 函数的运行逻辑
- 可以用来在运行过程中,获取被 hook 的函数传入的具体的参数和返回值
- 可以用来主动调用 app 中的某些函数
2.4.2.2 HooK 之 FridaHook 环境搭建
2.4.2.2.1 Python3.8 64 位的下载和安装
简单我就不赘述了,下载地址:https://www.python.org/downloads/
注意:3.8 64位的任意一个版本都行,不用管最后的小版本。
2.4.2.2.2 frida 的安装
注意版本匹配:
frida12.3.6 Android5-6 Python3.7
frida12.8.0 Android7-8 Python3.8
frida14+ Android9+ Python3.8
frida15+ Android12 也可以用,待测....
我这里是 Android10,Python3.8,安装命令如下:
pip install frida==14.2.18
pip install frida-tools==9.2.5(装frida-tools时会自动安装frida)
网络不好可能会卡住,安装离线 whl 包,离线安装包百度网盘下载地址:
链接:https://pan.baidu.com/s/1BIOkna2j5ykixqMu2r-53w
提取码:lvks
--来自百度网盘超级会员V8的分享
命令:
pip install frida_tools-9.2.5-py3-none-any.whl
pip install frida-14.2.18-cp38-cp38-win_amd64.whl
注意: 先安装指定版本 frida、再安装指定版本frida-tools,安装的 frida 版本要与 frida-tools 版本对应,如何查看呢?点击链接:frida-tools版本的查看、frida-tools版本的查看
判断 frida 是否安装成功:
- cmd 中执行 frida --version,能打印出版本号说明 frida-tools没有问题
- cmd 中执行 python,进入控制台 import frida,能导包成功,说明 frida 库没有问题,如下图所示:
卸载命令:
pip uninstall frida==14.2.18
pip uninstall frida-tools==9.2.5
2.4.2.2.3 pycharm_nodejs_Frida 代码提示配置
node.js 安装以及 pycharm 中使用 node.js 运行 js 代码参考文章:https://blog.csdn.net/xw1680/article/details/126070030
配置完成之后,进入你的项目目录,执行命令:npm i @types/frida-gum(不要全局安装、我全局安装不生效),如下图所示:
执行完毕之后,在 IDE 中写 frida hook 相关代码就会有相关提示了,如下图所示:
2.4.2.2.4 frida-server的配置
指定版本 frida-server 的获取:https://github.com/frida/frida/releases/tag/14.2.18(换成你自己的版本号)
frida-server(调试) 的运行平台要选对,frida-server 的版本与 frida 的版本要匹配,如下图所示:
通过usb连接真机不需要转发端口,通过ip连接需要转发,连接模拟器也需要转发,命令如下:
adb forward tcp:27042 tcp:27042
将下载好的 frida-server 包先解压,然后推送到手机,如下图所示:
执行完成之后,会有一个光标在闪动,就说明成功了,上述命令如下:
C:\\Users\\AmoXiang>adb push 你frida-server包的位置 /data/local/tmp/fsarm64
C:\\Users\\AmoXiang\\Desktop\\frida-server-14.2.18-a... 0 skipped. 32.9 MB/s (41387312 bytes in 1.201s)
C:\\Users\\AmoXiang>adb shell
sailfish:/ $ su
sailfish:/ # cd /data/lo
local/ lost+found/
sailfish:/ # cd /data/local/tmp/
sailfish:/data/local/tmp # ls
dalvik-cache fsarm64 uidump.xml
sailfish:/data/local/tmp # chmod 777 fsarm64
sailfish:/data/local/tmp # ./fsarm64
Pycharm 中写 js 代码进行测试,发现是 ok 的,如下图所示:
2.5 算法复现
通过观察找到一些疑似关键函数,通过 frida hook 来确认 app 执行某个操作的时候,是否调用了它们
如果没有触发这些方法,考虑以下问题:
- app 在执行这个操作的时候,真的没有调用这个函数,换一个其他的关键函数
- 代码写错了,导致 hook 函数没执行
- 一般可以通过主动调用上层函数,来触发这些 hook 函数
如果触发了这些函数,可以通过 hook 来打印执行过程中传入函数的参数和返回值
frida -U -F -I HookDemo.js:-U 代表远程USB设备、-F 代表附加到最前的这个app、-I 后面指明需要加载的JS脚本(写好的js脚本要注入手机端,并不是在 Node.js 中使用,所以只能用 v8 和 fridaAPI 支持的)
最后,利用以上得到的信息,来进行算法复现。
2.6 协议复现
当需要构造的参数准备完成之后,我们就可以编写脚本去模拟请求,获取相应的数据了。
以上是关于100天精通Andriod逆向——第5天:app逆向流程简介的主要内容,如果未能解决你的问题,请参考以下文章
100天精通Andriod逆向——第6天:Andriod 开发入门
100天精通Andriod逆向——第6天:Andriod 开发入门