参考:https://www.52pojie.cn/thread-396966-1-1.html

  • Smali中的包信息

  .class public Lcom/aaaaa;    //他是com.aaaaa这个package下的一个类。

  .super Lcom/bbbbb;        //继承自com.bbbbb这个类。

  .source "ccccc.java"        //这是一个有ccccc.java编译得到的Smali文件。

  • Smali中的声明

  一般来说是这个样子:

  # annotations

  .annotation system Ldalvil/annotation/MemberClasses;

  value = {

  Lcom/aaa$qqq;,

  Lcom/aaa$www;

  }

  .end annotation

  这个声明是内部类的声明:aaa这个类他有两个成员内部类--qqq和www,内部类在后面提及。

  • 寄存器知识补充:

  在Smali里所有操作均通过寄存器来进行:

  本地寄存器用v开头,数字结尾来表示,eg:v0,v1,v2等等

  参数寄存器使用p开头,数字结尾的符号来表示,eg:p0,p1,p2等等。

    特备注意:p0不一定是函数中的第一个参数,在非static函数,p0代指“this”,p1表示第一个参数,p2为第二个参数。

          在static函数中,p0为第一个参数(因为java中的static方法中没有this方法)。

  • 寄存器简单实例分析:

  const/4 v0,0x1    //使用v0本地寄存器,并把值0x1(1为true)存到v0中

  iput-boolean v0,p0,Lcom/aaa;->lsResistered:Z    //用 iput-boolean 这个指令把v0中的值存放到com.aaa.isRegistered这个成员变量中。

  以上两条指令相当于:this.isRegistered = true;(非static函数中p0代表的是“this”,在这里就是com.aaa实例)。

  • Smali中的成员变量:

  成员变量格式:

    .field public/private [static] [final] varName:<类型>。

  对于不同的成员变量也有不同指令。

    获取指令有:iget,sget,iget-boolean,sget-boolean,iget-object,sget-object等

    操作指令有:iput,sput,iput-boolean,sput-boolean,iput-object,sput-object等

    (没有“-object”后缀表示操作得成员变量对象为基本数据类型,有的表示成员变量是对象类型,特别地,boolean类型使用带有“-boolean”的指令集和)。

  • Smali成员变量指令简析(一)  

  sget-object v0,Lcom/aaa->ID:Ljava/lang/String;    //获取ID这个String类型的成员变量并放到vo这个寄存器中。

  sget-object 就是用来获取变量值并保存到紧接着的参数的寄存器中,在上例中,获取ID这个String类型的成员变量并放到vo这个寄存器中。

  注意:前面需要该变量所属的类的类型,后面需要加一个冒号和该成员变量的类型,中间是“->”表示所属关系。

  • Smali成员变量指令简析(二)

  iget-object v0,p0,Lcom/aaa;->view:Lcom/aaa/view;

  从上例看到,iget-object指令比sget-object多了一个参数,就是该变量所在类的实例,在这里就是p0即“this”。

  获取array的话使用aget和aget-object,指令使用和上述一致。

  • Smali成员变量指令简析(三)

  put指令使用和get指令是统一的,如下:

  const/4 v3,0x0

  sput-object v3,Lcom/aaa;->timer:Lcom/aaa/timer;

  相当于:this.timer = null;    //赋值object所以是null,若是Boolean赋值则为false(因为0x0 ;0为false,1为true)。

  • Smali成员变量指令简析(四)

  .local v0,args:Landroid/os/Message;

  const/4 v1,0x12      //0x12位16进制,变为十进制为18

  iput v1,v0,Landroid/os/Message;->what:l

  相当于:args.what = 18;  (args是Message的实例)

安卓逆向学习---深入Smali文件的更多相关文章

  1. 安卓逆向学习---初始APK、Dalvik字节码以及Smali

    参考链接:https://www.52pojie.cn/thread-395689-1-1.html res目录下资源文件在编译时会自动生成索引文件(R.java ), asset目录下的资源文件无需 ...

  2. 安卓逆向(一)--Smali基础

    安卓逆向(一)--Smali基础 标签(空格分隔): 安卓逆向 APK的组成 文件夹 作用 asset文件夹 资源目录1:asset和res都是资源目录但有所区别,见下面说明 lib文件夹 so库存放 ...

  3. 【转】安卓逆向(一)--Smali基础

    转载自吾爱破解安卓逆向入门教程 APK的组成 文件夹 作用 asset文件夹 资源目录1:asset和res都是资源目录但有所区别,见下面说明 lib文件夹 so库存放位置,一般由NDK编译得到,常见 ...

  4. 安卓逆向之基于Xposed-ZjDroid脱壳

    http://bbs.pediy.com/thread-218798.htm     前言 之前介绍了普通常见的反编译模式 但对于使用了 360加固 棒棒 爱加密 等等的加固应用就没办法了. 你会发现 ...

  5. 20145307陈俊达_安卓逆向分析_APKtools分析smail

    20145307陈俊达_安卓逆向分析_APKtools分析smail 引言 真刺激呢!到了第二篇博客了,难度开始加大,之前是简单的dex2jar和有图形界面的jd-gui,现在来隆重介绍强大的反汇编工 ...

  6. 【转】安卓逆向实践5——IDA动态调试so源码

    之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...

  7. Anroid逆向学习从编写so到静动态调试分析arm的一次总结

    Anroid逆向学习从编写so到静动态调试分析arm的一次总结 一.前言 最近跟着教我兄弟学逆向这篇教程学习Android逆向,在第七课后作业反复折腾了好几天,正好在折腾的时候对前面的学习总结一波,动 ...

  8. CTF的一道安卓逆向

    前几天打CTF时遇到的一道安卓逆向,这里简单的写一下思路 首先用jadx打开apk文件,找到simplecheck处(文件名是simplecheck),可以看到基本逻辑就是通过函数a对输入的内容进行判 ...

  9. 20145307陈俊达_安卓逆向分析_Xposed的hook技术研究

    20145307陈俊达_安卓逆向分析_Xposed的hook技术研究 引言 其实这份我早就想写了,xposed这个东西我在安卓SDK 4.4.4的时候就在玩了,root后安装架构,起初是为了实现一些屌 ...

随机推荐

  1. 2、初探 ZooKeeper 技术内幕

    分布式一致性 “分布式” 是大型系统实现高性能.高可用所常用的架构手段,本章节将概述 “分布式一致性”的基本内容,以作为 ZAB 算法阐述的基础. 分布式一致性的基本概念 数据库系统的基础理论中,“事 ...

  2. eclipse开发Java web工程时,jsp第一行报错,如何解决?

    与myeclipse不同,eclipse开发java web项目时是要下载第三方软件(服务器)的,正是这个原因,很多初学者用eclipse学习java web的时候,总是会遇到一些小问题.其中常见的一 ...

  3. dll 恐怖的代码调整

    总结一波这998的不得不提的调整代码的心得. 调整代码的背景:现有wps美化代码分散在各个插件里面,导致每次修改一小部分代码,都要全新编译,并且只能跟版本发,所以决定将wps的美化代码整合成一个插件d ...

  4. (9/24) 图片跳坑大战--css分离与图片路径处理

    前言: 在上一节当中,我们把小图片打包成Base64格式(打包到了js当中).我们也算是对webpack对图片的打包有个基本了解. 本节我们准备把css从JavasScript代码中分离出来,这会遇到 ...

  5. MySQL的or/in/union与索引优化

    转载自:MySQL的or/in/union与索引优化 https://blog.csdn.net/zhangweiwei2020/article/details/80005590 假设订单业务表结构为 ...

  6. django中执行py报错Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured

    https://blog.csdn.net/heybob/article/details/49684261 django代码下面直接run的时候报错: django.core.exceptions.I ...

  7. Jquery中的 Deferred分析

    参考:https://www.idaima.com/a/1627.html http://www.cnblogs.com/aaronjs/p/3356505.html 未完!

  8. 用js控制 给一个input赋值之后,change事件不能捕获到,解决办法

    你用js给input赋值后要调用change方法 下面是jquery的写法 $('input#3').val("50"); $('input#3').change(); 自己试试吧

  9. 求树的重心 poj 1655

    题目链接:https://vjudge.net/problem/POJ-1655 这个就是找树的重心,树的重心就是树里面找一个点,使得以这个点为树根的所有的子树中最大的子树节点数最小.题目应该讲的比较 ...

  10. matlab中mat文件简单存/取

    >>abc=[,,,,,]; >>save data save file_name:命令可以将当前项目中变量的值保存到file_name中去,这里的data文件就是mat文件. ...