博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android Security] 如何把java代码转换成smali代码
阅读量:7038 次
发布时间:2019-06-28

本文共 1566 字,大约阅读时间需要 5 分钟。

copy :

1、概述

Smali是Android系统中Dalvik虚拟机指令语言,在apk逆向过程中有许多工具可以把smali代码转化成java代码。但是在学习Smali语法的过程中,有时候需要进行java代码和smali代码的对照,如果可以把java代码转换成smali代码,学习起来岂不是很方便。于是网上搜了一把,很失望,都是各种转smali为java的工具。后来想了想,java变成smali不就是写android程序—>dex—>smali的过程嘛,然而java代码编译完是class文件,如何变成dex文件呢?后来在一本书中找到了答案,记录如下。

2、java代码转smali代码

把java代码转成smali代码共需要以下三个步骤

1、编译java代码为class文件

javac smaliTest.java

这个比较简单,会生成smaliTest.class文件

2、把class文件转成dex文件

我们知道apk包里java代码最后生成的是class.dex文件,把class转化成dex文件就需要用到android SDK提供的一个工具dx,该jar包位于android-sdk\build-tools\23.0.1\lib,找到该包后执行以下命令

java -jar dx.jar --dex --output=smaliTest.dex smaliTest.class

3、把dex转化成smali文件

这时候会使用到另外一个工具baksmali,该工具位于android-sdk\platform-tools\,找到该包后执行以下命令

java -jar baksmali.jar smaliTest.dex

OK,完成,此时会生成一个out目录,在out目录下的smaliTest.smali就是我们要看到的smali代码了

3、示例程序

java代码如下:

public class smaliTest {       public static void main(String[] args){           System.out.println("hello smali");       }   }

smali代码如下

复制代码
.class LsmaliTest;.super Ljava/lang/Object;.source "smaliTest.java"# direct methods.method constructor 
()V .registers 1 .prologue .line 3 invoke-direct {p0}, Ljava/lang/Object;->
()V return-void.end method.method public static main([Ljava/lang/String;)V .registers 3 .parameter .prologue .line 5 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 .line 6 return-void.end method

转载于:https://www.cnblogs.com/0616--ataozhijia/p/8919504.html

你可能感兴趣的文章
Python 数据科学入门教程:Matplotlib
查看>>
windows下codelite的使用
查看>>
VR设备前进路上,必须经历的九九八十一难
查看>>
5G汽车联盟,助力BBA角逐智能汽车市场
查看>>
安卓应用安全指南 4.5.1 使用 SQLite 示例代码
查看>>
django 1.8 官方文档翻译: 9-1-1 国际化和本地化
查看>>
OpenStack云撑起百联O2O战略布局
查看>>
Spring MVC使用@RestController生成JSON示例
查看>>
瑞士军刀包购买选择
查看>>
基于epoll封装的事件回调miniserver
查看>>
SpringBoot使用validator校验
查看>>
CSS去除免费虚拟主机的广告心得分享
查看>>
AngularJS学习总结
查看>>
Hadoop体系结构之 HDFS
查看>>
基于以太坊发行ERC20 Token(代币)
查看>>
[Silverlight]TextBlock控件全攻略
查看>>
从与星瑞格软件的合作看浪潮深化主机生态布局
查看>>
用TXMLDocument处理xml文件时,如何判断某一结点是否存在
查看>>
NTKO使用说明
查看>>
django实现目录上传(最简单的方法)
查看>>