Android kotlin和java反编译后的smali 有什么区别?
来源:互联网 发布:农村淘宝咨询电话 编辑:程序博客网 时间:2024/05/17 15:20
转载请标明出处:
http://blog.csdn.net/DJY1992/article/details/72488456
本文出自:【奥特曼超人的博客】
kotlin反编译后的smali 有什么区别?
以前有使用过Kotlin,后来觉得不习惯就放弃了,编译速度也让我有点蛋蛋的忧伤,直到今天谷歌承认之后,才对它有了点希望。
逆向的同学比较关心一个问题,“Kotlin编译出来的smail和java编译出来的一样吗?”,我忽然也很好奇,以前知道是不一样的,但是具体有哪些改变,也不是很清楚,也没深究速度效率和底层方面会有什么不相同,今天就带大家一起来了解下,具体有 哪些不同和它的运行方式 是怎样的。
了解安装和使用的可以查看上篇文章: Android AndroidStudio 详解Kotlin的安装和使用(附下载demo)
直接进入主题,首先放入Convert之后的代码:
/** * 测试 Kotlin * @author Karl-dujinyang */class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) initView()//初始化 testValue()//赋值和事件 } private fun testValue() { btnWs!!.setOnClickListener { tvWs!!.text = "I'm immqy" edtWs!!.setText("Karl-dujinyang") } } private var btnWs: Button? = null private var tvWs: TextView? = null private var edtWs: EditText? = null private fun initView() { btnWs = this.findViewById(R.id.btn_hw) as Button tvWs = this.findViewById(R.id.tx_hw) as TextView edtWs = this.findViewById(R.id.edt_hw) as EditText }}
很常见,定义的Button,Textview,Edittext,还有给它们赋值和定义方法,来看看生成的apk界面,点击效果和原生其实是一样的。
ok,我们先来编译这个包,看下底层的运行是如何操作的。
(1). 编译后的目录结构不同 :smail 会编译出两个smail_classes2 ,可以看到 kotlin 编译到 unknown里 ,细心的同学会发现里面有个 install-run.zip ,最主要的是里面包含了slice_0-classes.dex ~ slice_9-classes.dex ,这里没太多关注里面的东西,接着往下走
- 1.1
- 1.2
(2). MainActivity 包名路径改变了
(3). MainActivity 类名也改变了
(4). 发现编译后执行字节都是不同的,里面到Lcom/android/tools/fd/runtime/AppInfo;->usingApkSplits
(5). 我们来看下 smail_classes2 中,有个关键的类,是Server.smail,顾名思义,服务
android/tools/fd/runtime/Server$SocketServerThread 下 执行了socketServerThread,可以从图中看到,它执行了 InstantRun ,可以大胆猜测,它是去执行了 unknown 里的 install-run 。
(6). 最后来看下install-run.zip 压缩包里面有些什么,似乎也没什么东西,supportV4和V7包,还有kotlin-stdlib,annotations注解,剩下的估计是封装切割 0~9 的classes.dex了。
我们可以看到,用了Kotlin编译后,里面的类和对象,都是给了dex,这样如果项目很大,那我们查看起来也有一定的困难度,所以从某些方面来说,以我们熟悉的方式去破解它,不是那么方便,但是……。
|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。
- Android kotlin和java反编译后的smali 有什么区别?
- java的String和android的String有什么区别?
- java的String和android的String有什么区别?
- Android 反编译 -smali文件对比java文件
- Android 反编译 -smali文件对比java文件
- 后面的打印机 和显示器 升级后有什么区别
- kotlin和java的区别
- android反编译-smali语法
- Android 反编译 -smali语法
- android反编译-smali语法
- android 反编译smali 学习
- Android 反编译 -smali语法
- Android 反编译 -smali语法
- android反编译-smali语法
- android反编译-smali语法
- android反编译-smali语法
- Android 反编译 -smali语法
- Android 反编译 -smali语法
- 程序小白---关于封装、继承、抽象类和接口的一些理解。
- 用 cctld工具创建带有国家代码的IP地址表
- UART学习笔记
- 【顶部导航】Android自定义指示器实现顶部导航(三角形,线,bitmap指示器),Fragment与ViewPager的组合。
- C语言 贪吃蛇实现(不闪屏)
- Android kotlin和java反编译后的smali 有什么区别?
- BZOJ 3669: [Noi2014]魔法森林
- oracle常用命令--创建表之create命令(包含主键约束,外键约束)
- Android instrumentation test
- shell中执行一个字符串命令的方法
- enq: TX
- dubbo-如何搭建maven项目,并实现Dubbo分布式服务管理
- 云数据中心安全设计要点
- leetcode-4 Median of Two Sorted Arrays