安卓相关环境配置

安卓相关环境配置

偶尔更新。。。

JEB(动态调试好用)

JEB动态调试Smali-真机/模拟器(详细,新手必看) 夜步城

JADX官网(静态分析)

https://github.com/skylot/jadx/releases/tag/v1.5.0

雷电模拟器自己去官网下

Magisk 面具

https://www.52pojie.cn/thread-1583586-1-1.html

LSPosed官网

https://github.com/LSPosed/LSPosed/releases/download/v1.8.6/LSPosed-v1.8.6-6712-zygisk-release.zip

MT管理器(吾爱破解论坛里搜)

adb (记得加环境变量)

https://developer.android.google.cn/tools/releases/platform-tools?hl=zh-cn#downloads

android studio(不太行,甚至打不开xml文件,环境难配)

https://developer.android.google.cn/studio?hl=zh-cn

吐槽一下插件套娃:Magisk->LSPosed->核心破解

文章目录

  • 安卓相关环境配置
    • 1. 模拟器环境配置
    • 2. 小概念
    • 3. smali语法
    • 4. 使用JEB进行动态调试
    • 5. debug模式调试
    • 参考

1. 模拟器环境配置

雷电模拟器9,设置把root权限开一下,然后重启

在这里插入图片描述

磁盘共享(可写入)

在这里插入图片描述

将magisk安装目录里的app-debug.apk拖入模拟器中。

点击magisk->永久记住选择->安装->允许

点击右下角的正方形按钮,然后中间向左拖动退回关掉。

在这里插入图片描述

点击magisk->安装->下一步->安装至系统分区->开始

然后重启雷电模拟器,进magisk设置,把Zygisk开启

更多->共享文件->打开电脑文件夹

在这里插入图片描述

把下载好的LSPosed.zip文件拖进共享文件夹

在这里插入图片描述

magisk点击右下角模块->从本地安装->选择Picture目录下的LSPosed.zip进行安装

在这里插入图片描述

重启雷电模拟器,下拉状态栏,打开LSPosed管理器

在这里插入图片描述

在LSPosed仓库里下载核心破解(MT管理器改了xml后,apk不用验证签名就可以安装)。

若模拟器没挂代理,则把网址复制一下,在主机访问进行下载,再把安装包拖进模拟器。

模拟器安装核心破解后,需要启动核心破解模块,然后重新启动。

2. 小概念

详见正己佬的视频

apk 全称 Android Package,它相当于一个压缩文件,只要在电脑上将apk后缀改为zip即可解压。

classes.dex是APK运行的主要逻辑。

Dalvik是Google专门为Android设计的一个虚拟机,Dalvik有专属的文件执行格式dex(Dalvik executable)

Art(Android Runtime)相当于Dalvik的升级版,本质与Dalvik无异

安卓四大组件

组件描述
Activity(活动)在应用中的一个Activity可以用来表示一个界面,意思可以理解为“活动”,即一个活动开始,代表 Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个Android应用必须通过Activity来运行和启动,Activity的生命周期交给系统统一管理。
Service(服务)Service它可以在后台执行长时间运行操作而没有用户界面的应用组件,不依赖任何用户界面,例如后台播放音乐,后台下载文件等。
Broadcast Receiver(广播接收器)一个用于接收广播信息,并做出对应处理的组件。比如我们常见的系统广播:通知时区改变、电量低、用户改变了语言选项等。
Content Provider(内容提供者)作为应用程序之间唯一的共享数据的途径,Content Provider主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的接口。Android内置的许多数据都是使用Content Provider形式,供开发者调用的(如视频,音频,图片,通讯录等)

3. smali语法

smali是Dalvik的寄存器语言,smali代码是dex反编译而来的。类似汇编

关键字

名称注释
.class类名
.super父类名,继承的上级类名名称
.source源名
.field变量
.method方法名
.local v0,"bytes":[B定义局部变量v0为字节数组,"bytes"是局部变量的名称(调试时有用)
.register寄存器
.end method方法名的结束
public公有
protected半公开,只有同一家人才能用
private私有,只能自己使用
.parameter方法参数
.prologue方法开始
.line xxx位于第xxx行

数据类型对应

smali类型java类型注释
Vvoid无返回值
Zboolean布尔值类型,返回0或1
Bbyte字节类型,返回字节
Sshort短整数类型,返回数字
Cchar字符类型,返回字符
Iint整数类型,返回数字
Jlong (64位 需要2个寄存器存储)长整数类型,返回数字
Ffloat单浮点类型,返回数字
Ddouble (64位 需要2个寄存器存储)双浮点类型,返回数字
stringString文本类型,返回字符串
Lxxx/xxx/xxxobject对象类型,返回对象
[Iint[]int数组
[[Iint[][]二维整型数组
[Ljava/lang/StringString对象数组

常用指令

关键字注释
const重写整数属性,真假属性内容,只能是数字类型,const/4为4bit数字
const-string重写字符串内容
const-wide重写长整数类型,多用于修改到期时间。
return返回指令
if-eq全称equal(a=b),比较寄存器ab内容,相同则跳
if-ne全称not equal(a!=b),ab内容不相同则跳
if-eqz全称equal zero(a=0),z即是0的标记,a等于0则跳
if-nez全称not equal zero(a!=0),a不等于0则跳
if-ge全称greater equal(a>=b),a大于或等于则跳
if-le全称little equal(a<=b),a小于或等于则跳
goto强制跳到指定位置
switch分支跳转,一般会有多个分支线,并根据指令跳转到适当位置
iget获取寄存器数据

调用方法

invoke-virtual {v0, v1}, Ljava/lang/String;->length()I
//调用`v0`对象的实例方法`length()`,传参为`v1`,返回值类型为`Int`invoke-super {v0, v1}, Ljava/lang/Object;->toString()Ljava/lang/String;
//v0重写了Object类的toString方法,这里调用了Object类原本的toString方法invoke-direct {v0}, Lcom/example/MyClass;-><init>()V
//调用实例的私有方法、构造方法或者父类的私有方法invoke-static {}, Ljava/lang/Math;->random()D
//调用静态方法,由于静态方法属于类而非类的实例,因此调用时不需要对象引用。invoke-interface {v0}, Ljava/util/List;->size()I
//v0是实现了List接口的对象的引用,调用List接口中的方法size()invoke-custom {v0, v1}, Ljava/lang/invoke/LambdaMetafactory;->metafactory(...)Ljava/lang/invoke/CallSite;
//用于动态绑定方法调用

结果处理

invoke-virtual {p0}, Ljava/lang/Object;->toString()Ljava/lang/String;
move-result-object v0
//将这个返回的字符串对象引用移动到寄存器v0中move-result v0
//将前一个函数调用返回的基本数据类型的结果移动到指定的寄存器中。const/4 v1, 0x5
move v0, v1  //将v1中的值0x5移动到v0中

​ 在smali里的所有操作都必须经过寄存器来进行:本地寄存器用v开头数字结尾的符号来表示,如v0、 v1、v2。 参数寄存器则使用p开头数字结尾的符号来表示,如p0、p1、p2。特别注意的是,p0不一定是函数中的第一个参数,在非static函数中,p0代指“this",p1表示函数的第一个 参数,p2代表函数中的第二个参数。而在static函数中p0才对应第一个参数(因为Java的static方法中没有this方法)

4. 使用JEB进行动态调试

想要动态调试,首先得修改debug权限

​ 法一:在AndroidManifest.xml里添加可调试权限

android:debuggable="true"

在这里插入图片描述

​ 法二:XappDebug模块hook对应的app

​ 法三:Magisk命令(重启失效)

1.  adb shell #adb进入命令行模式
2.  su #切换至超级用户
3.  magisk resetprop ro.debuggable 1
4.  stop;start; #一定要通过该方式重启

自行下载吾爱破解第五课的课后作业

安装配置好JEB

shift+鼠标滚轮	代码横向滚动
Ctrl+B	打断点
Tab 根据java代码找到smali代码所在处

jadx全局搜索无效后,全局搜索unsuccessed,追踪onClick函数

在这里插入图片描述

在这里插入图片描述

jadx追踪checkSN

private boolean checkSN(String userName, String sn) {  // 如果用户名为空,直接返回false  if(userName == null) {  return false;  }  try {  // 检查用户名非空且SN非空且长度为16  if(userName.length() != 0 && (sn != null && sn.length() == 16)) {  // 获取MD5 MessageDigest实例  MessageDigest digest = MessageDigest.getInstance("MD5");  digest.reset();//注意:reset()在这里实际上是多余的,因为每次new MessageDigest实例时,它都是初始化的 digest.update(userName.getBytes()); // 这里使用默认字符集编码,可能在不同环境中导致不同结果  // 将字节数组转换为十六进制字符串  String hexstr = MainActivity.toHexString(digest.digest(), "");  // 尝试将十六进制字符串转换为字符数组StringBuilder sb = new StringBuilder();  int i;  for(i = 0; true; i += 2) { // 无限循环,直到i超出hexstr长度  if(i >= hexstr.length()) {  // 这里应该是比较整个转换后的字符串与sn  return sb.toString().equalsIgnoreCase(sn);  }  // 这里直接将单个十六进制字符转换为字符,而不是每两个十六进制字符转换为一个字节的字符sb.append(((char)hexstr.charAt(i))); //(char)会将十六进制字符转换为ASCII字符  }  }  }  catch(NoSuchAlgorithmException e) {  // MD5算法通常总是可用的,这里的catch块可能永远不会执行  e.printStackTrace();  }  // 如果没有匹配,返回false  return false;  
}

在这里插入图片描述

JEB反编译一下并找到return sb.toString().equalsIgnoreCase(sn); 的位置,按Tab键,使左侧smali代码跟踪到该函数位置,然后Ctrl+B打断点。

在这里插入图片描述

雷电模拟器启动apk程序,JEB附加进程调试

在这里插入图片描述

程序输入用户名,注册码(必须16位),点击注册

在这里插入图片描述

JEB查看v5寄存器的值,实际就是注册的sn码。

在这里插入图片描述

a96fa7cd071995a2

在这里插入图片描述

5. debug模式调试

  • **普通模式:**无法调试界面的 创建,即 onCreate 函数
  • **debug 模式:**可以调试 界面的 onCreate 函数,即刚开始创建界面是就开始调试

下载攻防世界android-app-100的附件。

模拟器设置里面,版本号点击7次以上进入开发者模式。

系统->高级->开发者选项->打开USB调试

模拟器MT管理器->安装包提取->查看附件安装包->修改AndroidManifest.xml

加上android:debuggable="true"

在这里插入图片描述

可以选择不签名,然后虽然校验不通过,但是可以安装(已经核心破解)。

把修改后的安装包通过共享文件夹的方式传到主机。

jadx查看应用程序包名/应用程序入口界面,因为MT没充会员,xml与真实的有出入。

在这里插入图片描述

主机开启cmd

adb shell am start -D  -n 应用程序包名/应用程序入口界面
adb shell am start -D -n com.example.ctf2/.MainActivity

然后模拟器打开程序,JEB附加调试

在这里插入图片描述

在这里插入图片描述

然后在输入框输入东西,再点login就会断在断点处。

但是这题IsCorrect函数在运行时加载,没法步入函数,需要IDA打开libadnjni.so才能看到逻辑。

在这里插入图片描述

是个字符串比较函数

ef57f3fe3cf603c03890ee588878c0ec就是注册码

参考

  1. 吾爱破解安卓逆向入门教程《安卓逆向这档事》一、模拟器环境搭建

  2. 《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修 正己

  3. 最新Windows安装adb方法 飞⑧风暴

  4. JEB动态调试Smali-真机/模拟器(详细,新手必看) 夜步城

  5. Smali基础语法总结 bmjoker

  6. 安卓逆向_5 — jeb 和 AndroidStudio 动态调试 smali 擒贼先擒王

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/403087.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB多项式拟合

订阅专栏或下载资源可以获得源代码:https://download.csdn.net/download/callmeup/89632160 拟合和插值 拟合和插值是两种常见的数学方法,用于以某种方式近似或估计实际数据。 拟合是在给定一组已知数据点的情况下,通过选择一个合适的数学模型来拟合数据。拟合的目标是找到…

民航管理局无人机运营合格证技术详解

1. 证书定义与意义 民航管理局无人机运营合格证&#xff08;以下简称“合格证”&#xff09;是对符合民航法规、规章及标准要求的无人机运营单位或个人进行资质认证的重要证明。该证书旨在确保无人机运营活动的安全、有序进行&#xff0c;保护国家空域安全&#xff0c;维护公众…

Linux·权限与工具-yum与vim

1. Linux软件包管理器 yum 1.1 什么是软件包 在Linux下安装软件&#xff0c;一个通常的办法是下载到程序的源代码&#xff0c;并进行编译&#xff0c;得到可执行程序。但这样做太麻烦了&#xff0c;于是有些人把一些常用的软件提前编译好&#xff0c;做成软件包(可以理解成Win…

超有性价比深度学习卡特斯拉 P100,16G大显存,Stable Diffusion AI 绘画利器

超有性价比深度学习卡特斯拉 P100&#xff0c;16G大显存&#xff0c;Stable Diffusion AI 绘画利器 在当今数字化创作的时代&#xff0c;AI 绘画技术正以惊人的速度发展&#xff0c;为艺术家和创作者们带来了全新的可能性。而要实现高效的 AI 绘画&#xff0c;一款性能卓越的显…

Camera基础知识系列(5)——景深

目录 一. 前言 二. 景深 2.1 弥散圆 2.2 容许弥散圆 2.2 景深(DoF) 三. 如何控制景深 1. 光圈因素 2. 容许弥散圆因素 四. 总结 一. 前言 在摄影中&#xff0c;我们有时会有模糊背景、突出主体的需求&#xff0c;即背景虚化。如下图所示&#xff0c;左边是没有做背景虚化…

序列建模之循环和递归网络 - 递归神经网络篇

序言 在序列建模的广阔领域中&#xff0c;递归神经网络&#xff08; Recursive Neural Network, RNN \text{Recursive Neural Network, RNN} Recursive Neural Network, RNN&#xff09;&#xff0c;注意此处的 RNN \text{RNN} RNN与常用于序列处理的循环神经网络在命名上有所…

打包时未添加camera模块,请参考https://ask.dcloud.net.cn/arss/1ooticle/283

今天在app打包使用的时候突然发现app在拍照上传照片的时候遇到这个问题 遇到这种情况通常是因为app打包的时候manifestjson文件中App模块配置中的Camera&Gallery配置没有打开&#xff0c;点击相应选项勾选即可 然后再上传打包就好了! 哈哈哈好久没写博客了最近太忙了&…

使用 Hugging Face 和 Milvus 构建 RAG 系统

Milvus 是一个广受欢迎的开源向量数据库&#xff0c;为人工智能应用提供高性能和可扩展的向量相似性搜索。在本教程中&#xff0c;我们将向您展示如何使用 Hugging Face 和 Milvus 构建 RAG&#xff08;检索增强生成&#xff09;流程。 RAG 系统将检索系统与 LLM 相结合。该系统…

android13 禁用wifi

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 3.代码分析 3.1 代码位置1 3.2 代码位置2 3.3 代码位置3 4.代码修改 5. 彩蛋 1.前言 这个文章讲的是,在frameworks里面禁止打开wifi。 2.情况分析 我们打开wifi一般是 public static void turnOnWifi(Co…

x64汇编语言与逆向工程实战指南(四)

目录 1. 数组的存储与遍历1.1 编写数组数据写入内存1.2 汇编循环遍历数组元素 3. Lea指令4. mul指令与imul指令4.1 mul 指令4.2 imul 指令总结 5. div指令5.1 div 指令的基本原理5.2 8 位除法5.3 16 位除法5.3 32 位除法特点和要求 1. 数组的存储与遍历 1.1 编写数组数据写入内…

day28-lsync服务+scp命令

假设nfs服务器挂了&#xff0c;就要走backup服务器也部署nfs 这种情况下&#xff0c;rsync和nfs要用到同一个文件夹&#xff0c; 所以他俩管理文件夹权限必须一样 1. lsyncrsyncnfs rsync服务 10.0.0.41 1.安装rsync [rootbackup:~]#yum -y install rsync 2.配置rsync[root…

2024年8月18日历史上的今天大事件早读

648年8月18日 唐初名相房玄龄逝世 1850年8月18日 法国作家巴尔扎克逝世 1868年8月18日 英法天文学家发现“氦”元素 1905年8月18日 反清革命组织共进会成立 1914年8月18日 美国总统宣布在“一战”中保持中立 1925年8月18日 国民革命军正式组建 1926年8月18日 北伐军攻克汀…

Open3D 格网法计算点云的占地面积

目录 一、概述 1.1原理 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2数据显示 Open3D点云算法汇总及实战案例汇总的目录地址&#xff1a; Open3D点云算法与点云深度学习案例汇总&#xff08;长期更新&#xff09;-CSDN博客 一、概…

详解语义安全(semantically secure)

目录 一. 引入 二. 密文与明文 2.1 通俗性理解 2.2 定理 2.3 定理理解 三. 语义安全的第一个版本 3.1 基本理解 3.2 定理 3.3 定理理解 四. 语义安全的第二个版本 4.1 直观解释 4.2 小结 一. 引入 密码学中安全加密要求&#xff1a;敌手&#xff08;adversary&…

串(4/6)

目录 1. 串的概念及应用实例 1.1 串的定义 1.2 应用实例 2. 串的基本操作 2.1 创建和读取 2.2 串的拼接 2.3 串的比较 2.4 插入和删除 2.5 查找子串 3. 串的存储结构及实现 3.1 顺序存储结构 3.2 链式存储结构 3.3 存储结构的选择 4. 串的模式匹配算法 4.1 朴素匹…

Hive3:常用的内置函数

1、查看函数列表 -- 查看所有可用函数 show functions; -- 查看count函数使用方式 describe function extended count;2、数学函数 -- round 取整&#xff0c;设置小数精度 select round(3.1415926); -- 取整(四舍五入) select round(3.1415926, 4); -- 设置小数精度4位(四…

应急响应-DDOS-典型案例

某单位遭受DDoS攻击事件如下 事件背景 2019年2月17日&#xff0c;某机构门户网站无法访问&#xff0c;网络运维人员称疑似遭受DDoS攻击&#xff0c;请求应急响应工程师协助。 事件处置 应急响应工程师在达到现场后&#xff0c;通过查看流量设备&#xff0c;发现攻击者使用僵…

汇编语言:call、call far ptr、call word ptr、call dword ptr、call 寄存器

引言 call指令是转移指令&#xff0c;CPU执行call指令&#xff0c;进行两步操作&#xff1a; &#xff08;1&#xff09;将当前IP或当前CS和IP压入栈中 &#xff08;2&#xff09;转移。call指令不能短转移&#xff0c;除此之外&#xff0c;call指令转移的方法跟jmp指令的原理…

Java流程控制09:练习题:打印三角形

本节视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p44&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p44&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 通过嵌套for循环可以实现打印三角形&#xff…

使用C#禁止Windows系统插入U盘(除鼠标键盘以外的USB设备)

试用网上成品的禁用U盘的相关软件&#xff0c;发现使用固态硬盘改装的U盘以及手机等设备&#xff0c;无法被禁止&#xff0c;无奈下&#xff0c;自己使用C#手搓了一个。 基本逻辑&#xff1a; 开机自启&#xff1b;启动时&#xff0c;修改注册表&#xff0c;禁止系统插入USB存…