安卓从开发到逆向(二)java转换为smali对比分析

首先我们需要知道一个知识点:

ava虚拟机运行的是Java字节码,Dalvik虚拟机运行的是Dalvik字节码。传统的java程序经过编译,生成java字节码并保存在class文件中,java虚拟机通过解码class文件的内容来运行程序,而dalvik虚拟机运行的是dalvik字节码,所有dalvik字节码由java字节码转换而来,并被打包到一个DEX可执行文件当中,dalvik虚拟机通过解释DEX文件来执行这些字节码。

破解软件下载地址:

链接:https://pan.baidu.com/s/1mHOl9y-LXnETUg3oDAKNvA 提取码:3ygd 

准备工具:

转换工具:J2S2J

首先我们来看一段JAVA代码

很简单的一段JAVA代码,定义了一个foo方法,传入两个int类型的参数,返回(a+b)*(a-b),在main方法中进行了调用,传入5和3,并打印出来。

接下来,我们通过J2S2J转换为smali

我们对比着JAVA代码,来读一下smali代码,如果你对smali一点都不熟悉,可以看一下这篇文章,写的非常好。

https://blog.csdn.net/rozol/article/details/88368358

我们来分析一下这段smali代码

代码头部

创建了一个Hello类.class public LHello;该类继承于object.super Ljava/lang/Object;原文件名称为Hello.java.source "Hello.java"

构造方法,该段未在java代码中显示,java中默认有一个隐藏的无参数的构造方法

主方法

自定义的foo方法

如上所示,我们解析了一段简单的JAVA代码到smali。

接下来,我们可以加一点点难度,写一个for循环

还是使用J2S2J转换为smali,本次我们仅分析for_test_method方法

代码参考:

https://github.com/freedom-wy/reverse_android

中smali笔记

欢迎交流,一起学习,一起进步。

另外,我在慕课 上主讲课程:

《Python爬虫工程师必学——App数据抓取实战》,还请各位大神多多支持。课程地址:

https://coding.imooc.com/class/283.html

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年8月17日
下一篇 2019年8月17日

相关推荐