如何运行 .smali 程序
16lz
2021-01-25
原文:http://kiya-z.github.io/2015/11/16/how-to-run-file-ended-with-smali/
如何运行 .smali 程序
发表于2015-11-16 | 分类于Android | 暂无评论 | 3 Hits 准备 smali 程序
从 《Android 软件安全与逆向》书中抠出一段,起名为FirstSmali.smali
:
123456789101112131415161718192021222324252627282930313233343536373839404142434445 | .class public LFirstSmali; # 定义类名.super Ljava/lang/Object; # 定义父类.method public static main([Ljava/lang/String;)V # 声明静态方法 .registers 4 # 寄存器 #.parameter # 参数 .prologue # 代码起始 nop nop nop nop #数据定义 const/16 v0,0x8 const/4 v1,0x5 const/4 v2,0x3 #数据操作 move v1,v2 #数组操作 new-array v0,v0,[I array-length v1,v0 #实例操作 new-instance v1,Ljava/lang/StringBuilder; #方法调用 invoke-direct {v1},Ljava/lang/StringBuilder;-><init>()V #跳转 if-nez v0, :cond_0 goto :goto_0 :cond_0 #数据转换 int-to-float v2,v2 #运算 add-float v2,v2,v2 #比较 cmpl-float v0,v2,v2 #字段操作 sget-object v0,Ljava/lang/System;->out:Ljava/io/PrintStream; const-string v1,"Hello Smali" #调用 invoke-virtual {v0,v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V #返回 :goto_0 return-void return-void # 返回空.end method |
编译 smali 程序
将.smali
文件编译为.dex
文件 :
java -jar smali.jar -o FirstSmali.dex FirstSmali.smali
执行 smali 程序
打开adb
环境,连上手机,在命令行下
执行adb devices
查看手机是否连接成功;
执行adb push FirstSmali.dex /sdcard/
将 dex 文件推到手机上;
执行如下命令就 OK 了。
1 | adb shell dalvikvm -cp /sdcard/FirstSmali.dex FirstSmali |
备注
-cp
是classpath
的意思,dalvikvm
命令第一个参数指定类路径,第二个指定类名。
另外,如果想要 push 到如data/local
之类的目录下是没有权限的,可以先 push 到 sdcard,进入adb shell
执行su
获得 root 权限之后,就可以复制到data
目录了。
本文程序只有一个 dex 文件,多个的话需要打包为zip
,将此 zip 文件作为dalvikvm
的第一个参数便可。
原文:http://kiya-z.github.io/2015/11/16/how-to-run-file-ended-with-smali/
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- android edittext操作
- Android屏幕区域划分及尺寸获取
- Android(安卓)Manifest 权限描述大全
- android 实现短视频拍摄
- Android(安卓)上网代理设置(浏览器)