Android kotlin和java反编译后的smali 有什么区别?
转载请标明出处:
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,这样如果项目很大,那我们查看起来也有一定的困难度,所以从某些方面来说,以我们熟悉的方式去破解它,不是那么方便,但是……。
|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android AndroidStudio 详解Kotlin的安装和使用(附下载demo)
转载请标明出处: http://blog.csdn.net/DJY1992/article/details/72485381 本文出自:【奥特曼超人的博客】 Kotlin是什么?如何安装Kotlin?Java如何转换成Kotlin?Kotlin的demo? Kotlin Demo 下载: 《KotlinDemo》 Kotlin是一种在 Java虚拟机上执行的静态型别编程语言,是由俄罗斯圣彼得堡的 JetBrains 开发团队所发展出来的编程语言。 该语言有几个优势 : 简洁 它大大减少你需要写的样板代码的数量。 安全 避免空指针异常等整个类的错误。 通用 构建服务器端程序、Android 应用程序或者在浏览器中运行的前端程序。 互操作性 通过 100% Java 互操作性,利用 JVM 既有框架和库。 如何安装 第一步:setting - > 查找插件 第二步:搜索 - > Kotlin 第三步:Install 安装 第四步:重启 Androidstudio (1).设置里面查找Kotlin (2).查找出进行Install (3).编译完成 如何使用 这样就安装完成...
- 下一篇
Android string.xml 插值的简单应用
在string.xml中定义 <string name = “myname”>他今年%1$d岁了</string> 在程序中 String string = context.getResource().getString(R.string.myname); MyTextView.setText(String.format(string,8)); 打印 他今年8岁了 %d 整数 %f 浮点数 %s字符串 也可以在String.xml中%2添加多个值,依次在代码中填入相应值即可
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装