39.安卓逆向-壳-smali语法3(方法)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:38.安卓逆向-壳-smali语法2(条件语句和for循环)

上一个内容里写了java的条件语句和for循环的smali的样子,本次接着继续认识smali

本次是方法调用的smali,下方是smali的关键字

invoke-virtual 主要用于非私有实例方法的调用。实例方法指不是构造方法、父类方法等的属于

这个类的一般方法。

invoke-direct 主要用于构造方法(包括父类的构造方法)和私有方法的调用

invoke-static 主要用于静态方法的调用

invoke-super 主要用于父类成员方法(不包括父类构造方法)的调用

invoke-interface 主要用于接口方法的调用

实例方法调用

invoke-virtual {参数}, 方法所属类的全包名路径->方法名(参数类型)方法返回值类型

当有多个参数时,格式为 {参数1,参数2} ,使用其他关键字调用时相同

下图实例调用非静态方法

.class public Lcom/example/course1/SmailTest;
.super Ljava/lang/Object;
.source "SmailTest.java"# direct methods
.method public constructor <init>(Ljava/lang/String;)V.registers 2.param p1, "a"    # Ljava/lang/String;.prologue.line 5invoke-direct {p0}, Ljava/lang/Object;-><init>()V.line 6invoke-virtual {p0}, Lcom/example/course1/SmailTest;->getName()Ljava/lang/String;.line 7return-void
.end method# virtual methods
.method public getName()Ljava/lang/String;.registers 2.prologue.line 10const-string v0, "hello"return-object v0
.end method
public class SmailTest {//SmailTest类的构造方法,调用getName方法public SmailTest(String a){getName();}//非私有实例方法getName()public String getName(){return "hello";}
}

下图实例调用静态方法,没什么好说的,和上方非静态的方法一样,区别如下图红框

.class public Lcom/example/course1/SmailTest;
.super Ljava/lang/Object;
.source "SmailTest.java"# direct methods
.method public constructor <init>(Ljava/lang/String;)V.registers 2.param p1, "a"    # Ljava/lang/String;.prologue.line 5invoke-direct {p0}, Ljava/lang/Object;-><init>()V.line 6invoke-static {}, Lcom/example/course1/SmailTest;->getNames()Ljava/lang/String;.line 7return-void
.end method.method private static getNames()Ljava/lang/String;.registers 1.prologue.line 14const-string v0, "hello world"return-object v0
.end method# virtual methods
.method public getName()Ljava/lang/String;.registers 2.prologue.line 10const-string v0, "hello"return-object v0
.end method
public class SmailTest {//SmailTest类的构造方法,调用getName方法public SmailTest(String a){getNames();}//非私有实例方法getName()public String getName(){return "hello";}private static String getNames(){return "hello world";}}

然后来一个复杂点的方法,如下图红框

对应关系

完整smali代码

.class public Lcom/example/course1/SmailTest;
.super Ljava/lang/Object;
.source "SmailTest.java"# direct methods
.method public constructor <init>(Ljava/lang/String;)V.registers 2.param p1, "a"    # Ljava/lang/String;.prologue.line 13invoke-direct {p0}, Ljava/lang/Object;-><init>()V.line 14invoke-static {}, Lcom/example/course1/SmailTest;->func3()V.line 15invoke-virtual {p0}, Lcom/example/course1/SmailTest;->getName()Ljava/lang/String;.line 16invoke-static {}, Lcom/example/course1/SmailTest;->getNames()Ljava/lang/String;.line 17return-void
.end method.method public static func3()V.registers 14.prologueconst/4 v10, 0x1const/4 v9, 0x0.line 28const-string v7, "http://appapi.yndaily.com/api/v2/articles/10?pageToken=&size=20&headPageSize=&clientVersionCode=409&pjCode=code_ynrb&device_s ize=1080.0x2236.0&deviceOs=10&channel=qq&deviceModel=Google\u0002Pixel+4&clientVersion=4.0.9&udid=11ec2adac162837a&platform=android".line 30.local v7, "url":Ljava/lang/String;new-instance v3, Ljava/util/HashMap;invoke-direct {v3}, Ljava/util/HashMap;-><init>()V.line 31.local v3, "paramMap":Ljava/util/Map;, "Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;"const-string v8, "\\?"invoke-virtual {v7, v8}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;move-result-object v4.line 32.local v4, "parts":[Ljava/lang/String;array-length v8, v4if-le v8, v10, :cond_41.line 33aget-object v8, v4, v10const-string v10, "&"invoke-virtual {v8, v10}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;move-result-object v5.line 34.local v5, "queries":[Ljava/lang/String;array-length v10, v5move v8, v9:goto_1cif-ge v8, v10, :cond_41aget-object v6, v5, v8.line 35.local v6, "query":Ljava/lang/String;const-string v11, "="invoke-virtual {v6, v11}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;move-result-object v2.line 36.local v2, "kv":[Ljava/lang/String;array-length v11, v2const/4 v12, 0x2if-ne v11, v12, :cond_39.line 38const/4 v11, 0x0:try_start_2baget-object v11, v2, v11const/4 v12, 0x1aget-object v12, v2, v12const-string v13, "UTF-8"invoke-static {v12, v13}, Ljava/net/URLDecoder;->decode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;move-result-object v12invoke-interface {v3, v11, v12}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;:try_end_39.catch Ljava/io/UnsupportedEncodingException; {:try_start_2b .. :try_end_39} :catch_3c.line 34:cond_39:goto_39add-int/lit8 v8, v8, 0x1goto :goto_1c.line 39:catch_3cmove-exception v0.line 40.local v0, "e":Ljava/io/UnsupportedEncodingException;invoke-virtual {v0}, Ljava/io/UnsupportedEncodingException;->printStackTrace()Vgoto :goto_39.line 47.end local v0    # "e":Ljava/io/UnsupportedEncodingException;.end local v2    # "kv":[Ljava/lang/String;.end local v5    # "queries":[Ljava/lang/String;.end local v6    # "query":Ljava/lang/String;:cond_41invoke-virtual {v3}, Ljava/lang/Object;->toString()Ljava/lang/String;move-result-object v8invoke-virtual {v8}, Ljava/lang/String;->getBytes()[Bmove-result-object v8invoke-static {v8, v9}, Landroid/util/Base64;->encodeToString([BI)Ljava/lang/String;move-result-object v1.line 48.local v1, "encodedParams":Ljava/lang/String;const-string v8, "Base64"invoke-static {v8, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I.line 49return-void
.end method.method private static getNames()Ljava/lang/String;.registers 1.prologue.line 24const-string v0, "hello world"return-object v0
.end method# virtual methods
.method public getName()Ljava/lang/String;.registers 2.prologue.line 20const-string v0, "hello"return-object v0
.end method

完整java代码

package com.example.course1;import android.util.Base64;
import android.util.Log;import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;public class SmailTest {//SmailTest类的构造方法,调用getName方法public SmailTest(String a){func3();getName();getNames();}//非私有实例方法getName()public String getName(){return "hello";}private static String getNames(){return "hello world";}public static void func3() {String url = "http://appapi.yndaily.com/api/v2/articles/10?pageToken=&size=20&headPageSize=&clientVersionCode=409&pjCode=code_ynrb&device_s ize=1080.0x2236.0&deviceOs=10&channel=qq&deviceModel=GooglePixel+4&clientVersion=4.0.9&udid=11ec2adac162837a&platform=android";// 解析查询参数Map<String, String> paramMap = new HashMap<>();String[] parts = url.split("\\?");if (parts.length > 1) {String[] queries = parts[1].split("&");for (String query : queries) {String[] kv = query.split("=");if (kv.length == 2) {try {paramMap.put(kv[0], URLDecoder.decode(kv[1], "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}}// 使用Base64编码String encodedParams =Base64.encodeToString(paramMap.toString().getBytes(), Base64.DEFAULT);Log.d("Base64", encodedParams);}
}

img

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

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

相关文章

QT QLineEdit失去焦点事件问题与解决

本文介绍如何获得QLineEdit的失去焦点事件和获得焦点的输入框也会触发失去焦点事件的问题&#xff01; 目录 一、QLineEdit获得失去焦点事件 1.自定义类继承自QLineEdit 2.重写 focusOutEvent 3.使用 二、失去焦点事件问题 1.问题描述 2.问题解决 三、源码分享 lineed…

【Goland】——Gin 框架中间件详解:从基础到实战

中间件是 Web 应用开发中常见的功能模块&#xff0c;Gin 框架支持自定义和使用内置的中间件&#xff0c;让你在请求到达路由处理函数前进行一系列预处理操作。这篇博客将涵盖中间件的概念、内置中间件的用法、如何编写自定义中间件&#xff0c;以及在实际应用中的一些最佳实践。…

leetcode 3239. 最少翻转次数使二进制矩阵回文 I

给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的&#xff0c;那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 &#xff0c;也就是将格子里的值从 0 变成 1 &#xff0c;或者从 1 变成 0 。 请你返回 …

【C++笔记】vector使用详解及模拟实现

前言 各位读者朋友们&#xff0c;大家好&#xff01;上期我们讲了string类的模拟实现&#xff0c;这期我们开启vector的讲解。 一.vector的介绍及使用 1.1 vector的介绍 vector的文档 使用STL的三个境界&#xff1a;能用、明理、能扩展&#xff0c;下面学习vector&#xff…

GOLANG+VUE后台管理系统

1.截图 2.后端工程截图 3.前端工程截图

推荐一款流程图和图表绘制工具:WizFlow Flowcharter Pro

WizFlow Flowcharter是一款易于使用、功能丰富的Windows流程图和图表绘制工具。它允许用户使用超过一百种预定义的形状和箭头定义形状“样式”。您可以将自己的样式保存在图表模板中&#xff0c;以建立自己的绘图方法。WizFlow附带了完整的流程图模板&#xff0c;以帮助您入门。…

fpga spi回环

SPI设备间的数据传输之所以又被称为数据交换,是因为 SPI协议规定一个 SPI设备 不能在数据通信过程中仅仅只充当一个"发送者(Transmitter)“或者"接收者 (Receiver)”.在每个 Clock 周期内,SPI 设备都会发送并接收一个 bit 大小的数据(不管主 设备好还是从设备),相当于…

软间隔支持向量机支持向量的情况以及点的各种情况

软间隔支持向量 ​ 这一节我们要回答的问题是&#xff1f;如何判断一个点是软间隔支持向量机中的支持向量&#xff0c;在硬间隔支持向量机中&#xff0c;支持向量只需要满足一个等式&#xff1a; y i ( w T x i b ) − 1 0 y_i(w^Tx_i b) -1 0 yi​(wTxi​b)−10 ​ 在软间…

界面控件DevExpress Blazor UI v24.1新版亮点 - 全新PDF Viewer等组件

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 DevExpress Blazor控件目前已经升级…

defaultdict()语法

一、defaultdict产生的原因&#xff1a; 当我使用普通的字典时&#xff0c;用法一般是dict{},添加元素的只需要dict[element] value即&#xff0c;调用的时候也是如此&#xff0c;dict[element] xxx,但前提是element字典里&#xff0c;如果不在字典里就会报错。 defaultdict的…

[HE phy]

前导码 5G OFDM分为两部分&#xff0c;前导码Legacy preamble和数据data 前导码类型&#xff1a; 其中前导码Legacy preamble分为&#xff1a;Legacy Short Traing (L-STF), L_LTF, L-SIG。 如果数据是HT/VHT/HE&#xff0c;则还有其对应格式的前导码。 各类型作用&#xff…

【matlab】数据类型01-数值型变量(整数、浮点数、复数、二进制和十六进制)

文章目录 一、 整数1.1 整数的最值1.2 大整数1.3 当整数值超过了uint64最大值1.4 和其它类型数值运算 二、 浮点数2.1 双精度和单精度2.2 浮点数的存储2.3 浮点数的最值2.4 浮点数的“四舍五入”2.5 浮点数的算术运算2.6 意外&#xff1a;舍入误差、抵消、淹没和中间转换 三、复…

Tessy学习笔记—requirement(需求)的管理

1&#xff1a;什么是需求 Tessy中的requirement&#xff08;需求&#xff09;是&#xff0c;我们还是跟着Tessy官方的文档&#xff0c;继续学习&#xff0c;打开官方自带的工程Is Value In Range Requirement.project。 按照官方自带的操作手册&#xff0c;导入txt类型的需求…

关于10款PDF编辑工具我的使用体验!!!!!

如今&#xff0c;pdf的使用已经见怪不怪。在我们的工作、学习和生活中都已经离不开PDF文档了。那我么&#xff0c;随之而来的问题也就是我们经常需要对PDF文件进行编辑。市面上已经出现了许多PDF编辑软件。下面&#xff0c;我将与大家分享一下这几款PDF编辑器的个人使用经历。 …

unity小:shaderGraph不规则涟漪、波纹效果

实现概述 在本项目中&#xff0c;我们通过结合 Sine、Polar Coordinates 和 Time 节点&#xff0c;实现了动态波纹效果。以下是实现细节&#xff1a; 核心实现 Sine 波形生成&#xff1a; 使用 Sine 节点生成基本的波形。该节点能够创建周期性变化&#xff0c;为波纹效果提供…

针对gitgitee的使用

1.下载git 链接 打开终端&#xff0c;桌面鼠标右键 2.配置密钥 登录gitee。 设置密钥 查看官方文档 跟着教程 复制最后的输出进行密钥添加 验证是否添加成功 3.创建&连接远程仓库 创建仓库 git终端进行配置 远程仓库克隆到本地 桌面终端clone,克隆他人|自己的仓库到本地…

基于yolov8、yolov5的玉米病害检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 &#xff0c; 直接提供最少两个训练好的模型。模型十分重要&#xff0c;因为有些同学的电脑没有 GPU&#xff0…

省级生活垃圾无害化处理率面板数据(2004-2022年)

生活垃圾无害化处理率是指经过处理的生活垃圾中&#xff0c;达到无害化标准的垃圾所占的比例。这一指标的提高&#xff0c;意味着城市在垃圾处理方面的能力增强&#xff0c;能够有效减少环境污染&#xff0c;提升居民生活质量&#xff0c;同时也是城市可持续发展的重要保障。 …

NTIRE2024 | 修复一切图像RAIM: Restore All Image Model Challenge报告分析

论文/报告地址&#xff1a;NTIRE 2024 Restore Any Image Model (RAIM) in the Wild Challenge 0、写在前面 马上CVPR2024就要开幕&#xff0c;各大挑战赛的排名和详细报告也都出炉。近期留意到这个名字很屌的赛道&#xff0c;修复一切图像的模型&#xff0c;小米的团队的拿了…

【Visual Studio】设置文件目录

打开属性 输出目录&#xff1a;$(SolutionDir)bin\$(Platform)\$(Cinfiguration)\ 中间目录&#xff1a;$(SolutionDir)bin\intermediates\$(Platform)\$(Cinfiguration)\