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,这样如果项目很大,那我们查看起来也有一定的困难度,所以从某些方面来说,以我们熟悉的方式去破解它,不是那么方便,但是……。




|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苹果手机摔了一下触屏失灵怎么办 华为机回复出厂设置帐号忘了怎么办 华为手机里突然有个pp助手怎么办 华为手机与电脑连接不上怎么办 买房交了首付贷不了款怎么办 手机买贵了实体店不肯退怎么办 在实体店里手机买贵了怎么办 红米手机开启不了安装系统怎么办? 捡个荣耀8双清后要账号怎么办 荣耀7x升级8.0后耗电快怎么办 手机提示当前为耳机播放模式怎么办 华为手机进水了显示耳机模式怎么办 苹果6s突然变成耳机模式怎么办 华为手机出现耳机标志没声音怎么办 苹果手机微信变成耳机模式怎么办 5s不能用4g网络怎么办 华为麦芒四手机系统乱了好卡怎么办 信翼路由器登录密码忘了怎么办 苹果手机电信4g信号变3g怎么办 苹果7手机4g变3g怎么办 朵唯v3逆客手机不支持计步怎么办 移动卡升级4g后网络不好怎么办 电信办宽带送的手机卡不用了怎么办 移动华为悦盒遥控器丢了怎么办 移动签了两年套餐不想用了怎么办 华为手机隐私空间密码忘记了怎么办 华为的隐私空间密码忘记了怎么办 格力新机没密码开不了怎么办 百度下载谷歌浏览器网页错误怎么办 华为手机进水开不了机怎么办开 华为7x金属外壳掉漆了怎么办 华为麦芒6连接蓝牙音响卡顿怎么办 华为芒麦6恢复出厂设置怎么办 华为麦芒4下拉通知栏没反应怎么办 怎么看华为麦芒6信号差怎么办 华为手机锁屏密码忘了怎么办 苹果手机进水后手机卡无服务怎么办 摩拜单车绑定的手机号注销了怎么办 摩拜单车注册的手机号注销了怎么办 摩拜单车注册手机号换了怎么办 被手机店骗话费送合约机怎么办