当前位置: 首页 > news >正文

安卓逆向 - 基础入门教程

一、引言

1、我们在采集app数据时,有些字段是加密的,如某麦网x-mini-wua x-sgext x-sign x-umt x-utdid等参数,这时候我们需要去分析加密字段的生成。本篇将以采集的角度讲解入门安卓逆向需要掌握的技能、工具。

2、安卓(Android)是一种基于Linux内核操作系统,架构图(了解即可)

3、安卓应用程序使用JAVA语言编写(重要),作为一名安卓逆向人员我们必须掌握Java语言基础(基本语法、类、接口、面向对象、网络类库、加密解密等等)

4、安卓逆向是对已经打包好的APP进行反编译,分析源码了解应用逻辑的一门技术,这一部分我们需要学习静态分析,动态分析。各种反编译工具(推荐 jadx),Frida Hook。

二、静态分析,学习jadx反编译

1、安装jadx,github地址: Releases · skylot/jadx · GitHub,下载 jadx-1.4.7.zip 解压即可。

2、调整jadx最大内存,打开bin目录下的 jadx-gui.bat文件,搜索DEFAULT_JVM_OPTS。

将 -XX:MaxRAMPercentage=70.0 修改成 -Xmx16g 

 3、jadx使用,打开apk,jadx会自动反编译apk

 全局搜索:点击左上角的导航 - 文本搜索,输入关键字,并且下方可以筛选检索的位置

根据关键字定位到关键代码后,我们就可以进行分析加密参数的生成啦。

三、动态分析,Frida 初使用

1、安装 adb (Android Debug Bridge),通过命令行使用adb,对安卓设备进行操作

2、下载模拟器,我使用的逍遥模拟器 (有Root好的真机更棒)

模拟器启动后,在命令行依次执行命令:

adb forward tcp:27043 tcp:27043
adb forward tcp:27042 tcp:27042
adb connect 127.0.0.1:21503
adb devices

再执行 adb shell,即可进入模拟器, #字符代表已 Root 

 3、安装Frida

本地直接使用 pip install frida 命令安装 (需有Python环境)

模拟器(手机)端下载对应的Frida-server: Releases · frida/frida · GitHub

低版本安卓推荐下载:12.8.13,高版本安卓直接下载最新版

模拟器是 x86架构,真机是 arm架构,请下载对应的 frida-server

4、开启Hook,动态分析应用运行时数据

1、将frida-server传到手机 /data/local/tmp 目录,转到本地frida-server存放的目录,依次执行以下命令

adb push frida-server-12.8.13-android-x86 /data/local/tmp
adb shell
cd /data/local/tmp
chmod 777 frida-server-12.8.13-android-x86
./frida-server-12.8.13-android-x86

2、编写 hook脚本,使用js方式启动,本例为 hook URL的构造方法:

function hook1(){var URL = Java.use('java.net.URL');URL.$init.overload('java.lang.String').implementation= function(a){console.log('加密前:'+a)               console.log('                    ')this.$init(a)}
}function main(){Java.perform(function(){hook();})
}setImmediate(main);

3、开始 hook,注意高版本 frida不需要带 --no-pause 

frida -U -l dm_hook.js -f cn.damai --no-pause

其中 dm_hook.js是 hook脚本的文件名,cn.damai是apk的包名。

滑动应用,正常打印出 url信息。

http://www.lryc.cn/news/107048.html

相关文章:

  • 验证码安全志:AIGC+集成环境信息信息检测
  • R-Meta分析教程
  • 【3维视觉】3D空间常用算法(点到直线距离、面法线、二面角)
  • Nodejs 第四章(Npm install 原理)
  • [深度学习] GPU处理能力(TFLOPS/TOPS)
  • js:获取浏览器默认语言
  • 【U8+】用友U8重新注册加密锁,提示:写卡失败,请重新配置客户端控件。
  • uniapp小程序console.log在微信开发者工具中不打印问题
  • 从零基础开始开发自己的第一个微信小程序
  • 无涯教程-Lua - Arrays(数组)
  • 0基础学习VR全景平台篇 第76篇:全景相机-圆周率全景相机如何直播推流
  • 超详细|ChatGPT论文润色教程
  • MMDeploy安装、python API测试及C++推理
  • [openCV]基于拟合中线的智能车巡线方案V3
  • vite+typescript项目 :找不到模块“./***.vue”或其相应的类型声明——解决方案
  • Gradio-YOLOv5-YOLOv7 搭建Web GUI
  • HTML模板生成word,pdf文档
  • ssl单向证书和双向证书校验测试及搭建流程
  • 【2种方法,jmeter用一个正则提取器提取多个值!】
  • 012-堆,结构体
  • GDAL C++ API 学习之路 OGRGeometry 多边形类 OGRPolygon
  • 文件传输协议FTP与托管文件传输MFT有什么区别?
  • js实现按照句号将一段文本进行分段
  • 环形链表的进一步探究
  • flink任务性能优化
  • vue2 el-carousel轮播图和文字一起改变
  • LangChain:打造自己的LLM应用 | 京东云技术团队
  • 字节跳动测试岗,3面都过了,HR告诉我这个原因被刷了...
  • Android 14重要更新预览
  • 快速上手字符串函数