smali

Smali语言基础语法

拥有回忆 提交于 2019-12-02 19:58:14
1、Smali语言基础语法-数据类型与描述符 smali中有两类数据类型:基本类型和引用类型。引用类型是指数组和对象,其它都是基础类型。 基本类型 以及每种类型的描述符: Java类型 类型描述符 说明 boolean Z 布尔型 byte B 字节型 short S 短整型 char C 字符型 int I 整型 long J 长整型 float F 双精度型 void V 返回类型 引用类型 分两种,对象类型与数组类型: 对象类型 表示形式为L包名/对象类型 ; ,即Lpackagename/ObjectName;(注意 分号 ) (1) 开始的L表明这是一个对象类型 (2) packagename 使用"/"代替”.“ (3) ObjectName是对象的名称 (4) 分号表明对象名的结束 例:smali代码中String类型的表示:Ljava/lang/String; 数组类型 以 ‘ [ ’ 数据类型加上 类型描述符 的形式表示: 例:[I 表示一维整型数组,[[I表示二维数组, [Ljava/lang/String; 表示String数组 字段的描述 Davilk中对字段的描述分为两种,对基本类型字段的描述和对引用类型的描述,但是两者的描述格式一样: 对象类型描述符->字段名:类型描述符; 例:com.baidu

1 长生剑

隐身守侯 提交于 2019-12-01 19:40:55
0x01 长生剑 长生剑是把神奇的剑,为白玉京所配,剑名取意来自于李白的诗:“仙人抚我顶,结发受长生。”长生剑是七种武器系列的第一种武器,而笔者接下来所要介绍的调试方法也是我最早学习的调试方法,并且这种方法就像长生剑一样,简单并一直都有很好的效果。这种方法就是Smali Instrumentation,又称Smali 插桩。使用这种方法最大的好处就是不需要对手机进行root,不需要指定android的版本,如果结合一些tricks的话还会有意想不到的效果。 0x02 Smali/baksmali 做安卓逆向最先接触到的东西肯定就是smali语言了,smali最早是由Jasmin提出,随后jesusfreke开发了最有名的smali和baksmali工具将其发扬光大,几乎dex上所有的静态分析工具都是在这个项目的基础上建立的。什么?你没听说过smali和baksmali?你只用过Apktool?如果你仔细阅读了Apktool官网的说明你就会发现,Apktool其实只是一个将各种工具结合起来的懒人工具而已。并且笔者建议从现在起就抛弃Apktool吧。原因如下:首先,Apktool更新并没有smali/baksmali频繁,smali/baksmali更新后要过非长久的时间才会合并到Apktool中,在这之前你可能需要忍受很多诡异的bug。其次

<转>android 反编译工具

有些话、适合烂在心里 提交于 2019-12-01 08:41:23
1、smali-1.2.6.jar 用途: .smali文件 转成 classes.dex文件 说明: .smali文件,类似于.class文件,可以用普通文本编辑器查看和修改。 用法举例:命令行: java -jar smali.jar classout/ -o classes.dex 下载: http://code.google.com/p/smali/downloads/list 2、baksmali-1.2.6.jar 用途: classes.dex文件 转成 .smali文件 说明: classes.dex不便于查看和理解,使用此工具转成的 .smali文件易于阅读和修改。 用法:命令行: java -jar baksmali.jar -o classout/ classes.dex 下载: http://code.google.com/p/smali/downloads/list 3、AXMLPrinter2.jar 用途:xml文件 转成 普通文本文件(txt) 说明:apk中的xml文件被搞成二进制了,无法阅读,使用此工具转换后,可以查看正常的xml文件。 用法举例:命令行: java -jar AXMLPrinter2.jar main.xml > main.txt 下载: http://code.google.com/p/android4me/downloads

分析Android APK- smali 语言简介

社会主义新天地 提交于 2019-12-01 07:46:50
2.1 smali 语言简介 1.smali apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。 smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。 2.基本数据类型 B—byte C—char D—double F—float I—int S—short V—void J—long Z—boolean 注意J、Z两个不是对应类型的首字母; 在dalvik字节码中,寄存器都是32位的,能够支持任何类型,Long和Double类型是64位的,需要2个寄存器; V 只能用于返回值类型; 3.数组和对象是引用类型 数组的表示方式是在基本类型前加上前中括号“[”,例如int数组和float数组分别表示为:[I、[F; 对象类型以L作为开头来表示,格式是Lpackage/ClassName;(用分号表示对象结束是必须的),示例: String对象在smali中为:Ljava/lang/String; Class1对象的一个boolean成员表示为:Lcom/disney/Class1;->isRunning:Z Class1对象的一个String对象成员表示为:Lcom/disney

Convert .Java file to .Smali file

落花浮王杯 提交于 2019-11-30 18:45:40
I reverse engineered an Android application with APKTool and got .Smali files as source code output. I converted the .Smali files with an application to .Java files. I was able to succesfully edit the .Java files but now I want to convert them back to .Smali so I can recompile the application with the new .Smali files. When I just leave the .Java file there it doesn't recompile it and gives some errors. I couldn't find anything about compiling .Java to .Smali on the internet so I hope you guys could help me. Thank you in advance, You can compile the java classes using a normal java compiler,

Android逆向之Dex文件

牧云@^-^@ 提交于 2019-11-30 16:02:27
Android逆向之Dex文件 最简单的一个 dex 文件-HelloWorld ① 编译 smali 为 dex java -jar smali.jar -o classes.dex HelloWorld.smali ② 查看设备信息 adb devices ③ 上传文件 adb push HelloWorld.zip /data/local ④ 执行程序 adb shell dalvikvm -cp /data/local/HelloWorld.zip HelloWorld 最简单的 dex 文件的分析,主要分为三大块: ① Dex 文件头 ② 各种数据的数组,包括字符串、类型、方法原型、字段、方法 ③ 类数据 ④ 其他 Dex 文件头 字段 1:dex_magic,表示 dex 文件的文件标识,特征字符串 字段 2:checksum, 表示校验和,对文件求了 32 位的 hash 值(从字段 3 开始到文件末尾) 字段 3:signature[], 表示 SHA1(沙 one),对文件求 hash 值(从字段 4 开始到文件末尾) 字段 4:file_size, 表示文件大小 字段 5:dex 文件头大小 字段 6:数据排列方式-小端方式 各种表的大小以及偏移 ① string_ids_size 和 string_ids_off ,字符串表的大小和偏移 ② type_ids

Convert .Java file to .Smali file

时间秒杀一切 提交于 2019-11-30 03:03:02
问题 I reverse engineered an Android application with APKTool and got .Smali files as source code output. I converted the .Smali files with an application to .Java files. I was able to succesfully edit the .Java files but now I want to convert them back to .Smali so I can recompile the application with the new .Smali files. When I just leave the .Java file there it doesn't recompile it and gives some errors. I couldn't find anything about compiling .Java to .Smali on the internet so I hope you

modifying .smali files

拈花ヽ惹草 提交于 2019-11-29 22:38:13
I reverse engineered some android apks to add some instrumentation for functional testing. I want to know given an smali as following how can I add something like Log.e(TAG, "some descritpion", e); to each method in the .smali files. .class public Ld; .super Landroid/view/View; .source "SourceFile" # instance fields .field a:Z .field b:Lcom/rovio/ka3d/App; # direct methods .method public constructor <init>(Lcom/rovio/ka3d/App;)V .locals 2 .parameter .prologue const/4 v1, 0x1 .line 317 invoke-direct {p0, p1}, Landroid/view/View;-><init>(Landroid/content/Context;)V .line 313 const/4 v0, 0x0 iput

What's the best way to learn Smali (and how/when to use Dalvik VM opcodes)?

风格不统一 提交于 2019-11-29 18:35:05
I know Java, and learned C but never used it. I do not know any form of assembly, either for a virtual machine or a real one. What's the best way to learn how to hack Smali? UPDATE: As I promised yesterday, I added some more links to the list. Ufff. Not much documentation around! Best advice? Decompile, and read, and tweak, and see how it did, and start the cycle again and again. But you did not ask for that advice, right? ;) Now, there are a few places out there that wil lhelp a little bit: http://androidcracking.blogspot.com/search/label/smali This is the best one. I even asked the guy a

Direct .java to .smali conversion. Possible?

China☆狼群 提交于 2019-11-29 02:12:12
I'm working with baksmali/smali tools. But sometimes I need to compile .java class to .smali file. So I've to first compile it with Eclipse and second disassemble the .APK to a set of .smali files. Is it possible to directly compile .java into .smali with one single tool? I couldn't find a solution myself... "javac" or similar program can be used to convert the source code to .class. Android's "dx" is used to convert .class to Dalvik .dex. The result of that can be processed with the Smali tools. You should be able to invoke all of these directly from a script. 来源: https://stackoverflow.com