mysql源码分析反汇编_安卓反编译分析

本文探讨了如何通过反编译工具分析Android应用的源码,尽管混淆使得源码难以理解,但通过逻辑分析和代码结构重构,可以逐渐恢复其原本的逻辑。文章列举了不同类型的代码结构,如if-while、switch-case等,并提供了反编译后的代码示例,解释了如何解析混淆代码,包括去除不必要的循环和还原逻辑结构。
摘要由CSDN通过智能技术生成

一,用jd-gui.exe等工具查看源代码。如何你不会,可以参看此文章:

可以到以下连接下载可视化反编译工具:

二,反编译后的源代码,是乱的,看不太懂。这是因为开发者在发布APK时,一般都会用代码混淆器将原始的源代码打乱,这也是防盗的一种方法。但是再怎样防,道高一尺,魔高一丈,用反编译工具很轻松的就可反编译成源码。要想做到反编译成一点也看不懂的代码,这很难,在Android Java开源的世界里就更难做到了。当然你可以把核心的放到中间层,用C/C++封装成库,通过JNI调用,这样要想反编译库就有难度了。

用混淆器打乱的代码,反编译后,要想看懂也不是一件容易的事。因为大部人都会用免费的混淆器来混淆源代码,大部份反编译过来的代码就有一定的规则可寻:

(本人水平有限,如有什么不对的地方,还请指教,非常非感)

反编译后的代码一般会产生以下结构的代码,(代码结构是个人总结的,如有雷同,纯属巧合)比较难看懂,本文章根据实现情况对这几种结构做个简单说明。

1,反编译后的代码:if while结构    if (BTActivity.access$2300(this.this$0))    {      int i = BTActivity.access$700(this.this$0).sendCommand(1028, 4, paramInt);      BTActivity.access$2500(this.this$0).notifyDataSetChanged();    }    while (true)    {      return;      Bluetooth localBt = BTActivity.access$700(this.this$0);      int k = BTActivity.access$600(this.this$0);      int l = localBt.sendCommand(1026, paramInt, k);     }

(1)只分析逻辑  很显然上面的代码也不是原始的源代码,但是很接近了,如果要想完成还原,还得自己改。 分析上面的代码:这里应该有一个if else的逻辑。从上面的代码分析,return下的代码 应该是永远不会被执行,但这是不可能的。所以上面的代码逻辑(我们先不看语句)应该是这样的,  去掉while和return,加上else,修改后如下:     if (BTActivity.access$2300(this.this$0))    {       int i = BTActivity.access$700(this.this$0).sendCommand(1028, 4, paramInt);       BTActivity.access$2500(this.this$0).notifyDataSetChanged();    }  else  {      Bluetooth localBt = BTActivity.access$700(this.this$0);      int k = BTActivity.access$600(this.this$0);      int l = localBt.sendCommand(1026, paramInt, k);    }  这样的逻辑才是作者的本意。

(2)逻辑分析完了,应该分析语句.      A,这个真的很难看懂。像这句:int i = BTActivity.access$700(this.this$0).sendCommand(1028, 4, paramInt);      很显然,这个是引用外部的一个类中的一个方法。然后返回整类,从下面的语句可以得知,这个返回值是用不到的。所以这句可去掉int i      还原上面的语句应该是这样的:      BTActivity.access$700(this.this$0).sendCommand(1028, 4, paramInt);           B,access$700是什么意思呢。这个应该是BTActivity类中的一个对像,然后这个对象有sendCommand方法。这样你就可以去查这个BTActivity类定义的哪个对象      有这样一个方法了,这好理解。           不好理解的是这句:int k = BTActivity.access$600(this.this$0); 这句初步还原就是去掉int

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值