安卓相关环境配置

news2025/1/11 16:46:33

安卓相关环境配置

偶尔更新。。。

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进行动态调试
    • 参考

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

在这里插入图片描述

参考

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

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

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

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

  5. Smali基础语法总结 bmjoker

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Upload-Lab第3关:如何巧妙应对黑名单文件后缀检测?

关卡介绍 在Pass03中,我们面临的挑战是绕过文件上传功能的黑名单检测机制。黑名单检测是一种常见的安全措施,它通过检查上传文件的后缀来阻止特定类型的文件(如 .php, .exe)被上传。在这一关,我们需要找到一种方法,上传一个可以执行的恶意文件,同时绕过黑名单检测。 …

Vue3学习 Day01

创建第一个vue项目 1.安装node.js cmd输入node查看是否安装成功 2.vscode开启一个终端&#xff0c;配置淘宝镜像 # 修改为淘宝镜像源 npm config set registry https://registry.npmmirror.com 3.下载依赖&#xff0c;启动项目 访问5173端口 第一个Vue项目的目录结构 我们先打…

C++ | Leetcode C++题解之第336题回文对

题目&#xff1a; 题解&#xff1a; //字典树节点 class TrieNode { private:bool isEnd;//单词结束标记int index;//单词序号vector<TrieNode*> children;//子节点 public://构造TrieNode():index(-1),isEnd(false),children(26,nullptr){}//析构~TrieNode(){for(int i…

php连接sphinx的长连接事宜以及sphinx的排除查询以及关于sphinx里使用SetSelect进行复杂的条件过滤或复杂查询

一、php连接sphinx的长连接事宜以及sphinx的排除查询 在使用php连接sphinx时&#xff0c;默认的sphinx连接非长连接&#xff0c;于是在想php连接sphinx能否进行一些优化 publish:January 9, 2018 -Tuesday: 方法&#xff1a;public bool SphinxClient::open ( void ) — 建立到…

24/8/15算法笔记 复习_决策回归树

from sklearn.tree import DecisionTreeRegressor from sklearn import tree import numpy as np import matplotlib.pyplot as plt#创建数据 X_train np.linspace(0,2*np.pi,40).reshape(-1,1)#训练数据就是符合要求的二维数据 #二维&#xff1a;[[样本一].[样本二]&#xff…

Elasticsearch、Easy-es 快速入门 SearchAfterPage分页 若依前后端分离 Ruoyi-Vue SpringBoot

一、环境安装 Elasticsearch ik分词器 1.1 下载解压Elasticsearch-7.x版本&#xff0c;越高越好&#xff0c;低版本有Log4j漏洞&#xff0c;Easy-es目前支持7.x 1.2 IK中文分词器 将对应Elasticsearch版本IK放进文件夹&#xff0c;Elasticsearch-7.6.1&#xff0c;ik对应版…

GPT-SoVITS

文章目录 model archS1 ModelS2 model model arch S1 model: AR model–ssl tokensS2 model: VITS&#xff0c;ssl 已经是mel 长度线性相关&#xff0c;MRTE(ssl_codes_embs, text, global_mel_emb)模块&#xff0c;将文本加强相关&#xff0c;学到一个参考结果 S1 Model cla…

Lora 全文翻译

作者&#xff1a; 地点&#xff1a;hby 来源&#xff1a;https://arxiv.org/pdf/2106.09685 工具&#xff1a;文心 LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 摘要 自然语言处理的一个重要范式包括在通用领域数据上进行大规模预训练&#xff0c;并适应特定任务或…

Qt自定义控件:关于大佬“飞扬青云“的自定义UI控件的使用教程(MinGw,MSVC)

前言 最近在搞自定义控件&#xff0c;无意间发现大佬飞扬青云的开源项目&#xff0c;Qt/C编写超精美自定义控件 这里先贴出大佬项目地址和博客 码云&#xff1a;wwlzq5/qucsdk (gitee.com)&#xff08;旧版下载地址Qt4.7到Qt5.14&#xff09; github&#xff1a;https://git…

攻克面试:高频面试题与常见算法深度剖析

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

第1章 大模型的概念、发展历程和应用领域

大模型&#xff1a;塑造未来的智能力量 目录 引言&#xff1a;大模型的定义与影响大模型的发展历程 早期探索&#xff1a;深度学习的起步中期发展&#xff1a;算法的革新与计算能力的提升当代突破&#xff1a;大模型的崛起 大模型的影响与未来展望 引言&#xff1a;大模型的定…

【设计模式】六大原则之依赖倒置原则(Dependency Inversion Principle,‌DIP)

设计模式是对相关问题提出的解决方案。 一般而言&#xff0c;一个模式有四个基本要素&#xff1a; 模式名称 &#xff08;pattern name&#xff09; 一个助记名&#xff0c;它用一两个词语来描述模式问题、解决方案和效果。问题&#xff08;problem&#xff09;描述了应该在何…

Unity中对Spine动画播放、暂停、事件处理管理类

Unity中对Spine动画播放、暂停、事件处理管理类 介绍Spine的事件处理动画师制作沟通Unity前端使用事件 Unity中动画播放Unity中动画暂定和继续Unity中停止动画Unity中动画转向Unity中获取骨骼和设置插槽附件完整管理类分享总结 介绍 最近在做设计spine动画的抖音小程序&#x…

RecyclerView的缓存机制(面试常客)

在构建滚动列表时&#xff0c;我们常首选RecyclerView&#xff0c;出于它优秀的缓存复用机制。 核心机制 RecyclerView的缓存机制又称回收复用机制&#xff0c;RecyclerView构建列表视图分为以下三步&#xff1a; 第一步的创建ViewHolder是RecyclerView构建视图时最耗时的操作…

鸿蒙(API 12 Beta3版)【使用通话设备切换组件】使用投播组件

基本概念 系统不再提供音频输出设备切换的API&#xff0c;如果需要应用内切换音频输出设备&#xff0c;请实现AVCastPicker组件&#xff0c;相关参数可参考[ohos.multimedia.avCastPicker]和 [ohos.multimedia.avCastPickerParam]。 本文将主要介绍AVCastPicker组件接入&…

【论文笔记】:PVswin-YOLOv8s:基于无人机的行人和车辆检测,使用改进的YOLOv8在智能城市中进行交通管理

摘要 在智慧城市中&#xff0c;有效的交通拥堵管理取决于熟练的行人和车辆检测。无人机 &#xff08;UAV&#xff09; 提供了一种具有移动性、成本效益和宽视野的解决方案&#xff0c;然而&#xff0c;优化识别模型对于克服小型和遮挡物体带来的挑战至关重要。为了解决这些问题…

推出 SAM 2:适用于视频和图像的下一代 Meta Segment Anything 模型

继图像元分割模型(SAM) 取得成功之后&#xff0c;我们发布了SAM 2&#xff0c;这是一个用于在图像和视频中实时提示对象分割的统一模型&#xff0c;可实现最先进的性能。 为了秉承我们的开放科学方针&#xff0c;我们通过宽松的 Apache 2.0 许可证共享代码和模型权重。 我们还…

嵌入式linux系统镜像制作day2

点击上方"蓝字"关注我们 01、前言 嵌入式linux系统镜像制作day1这一节先了解,后面实操 02、Yocto项目快速启动 Yocto项目通过OpenEmbedded构建系统为各种平台(包括x86-64和仿真平台)提供了一个针对ARM、MIPS、PowerPC和x86架构的开源开发环境。您可以使用Yocto项…

WebDeveloper:1靶机渗透测试

一、靶机下载地址 https://www.vulnhub.com/entry/web-developer-1,288/ 二、信息收集 1、主机发现 # 使用命令 nmap 192.168.145.0/24 -sn | grep -B 2 "00:0C:29:54:22:E9" 2、端口扫描 # 使用命令 nmap 192.168.145.216 -p- -sV 3、指纹识别 # 使用命令 wha…

【SpringCloud】什么是MQ

RabbitMQ 1.什么是MQ 1.1 同步和异步通信 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就例如打电话一样&#xff0c;需要实时响应异步通讯&#xff1a;就例如发邮件一样&#xff0c;不需要马上回复 1.1.1同步通讯 Feign的远程调用就属于同步通讯…