Android学习之反编译——源代码可执行

时间:2022-04-10 14:50:59
一、问题背景:     自己做的番茄工作法需要一个记事本样式的页面,自己写不太好看,网上找到一个不错的Demo,可惜没有源码,作者只给出了APK文件,还有几张效果图,看着效果还不错的样子,打算模仿模仿啦,于是自己找反编译例子,自己反编译。奈何由于工作用的是C#,Android又才上手,反编译回来的代码各种BUG,Java又不怎么懂,于是,在经过8个小时的奋战之后,我终于全盘拿下了这个APK。在室友的建议下,就有了这么一篇博文。
二、参考链接: Android APK反编译详解(附图)http://blog.csdn.net/ithomer/article/details/6727581 该记事本原帖地址:http://www.apkbus.com/forum.php?mod=viewthread&tid=161309
需要用到个工具:(强烈建议下最新版本的,上面文章中的链接里有个子链接版本不是最新,结果反编译出来各种问题,花了好几个小时才解决) dex2jar(google code):http://code.google.com/p/dex2jar/downloads/list jdgui(google code):http://code.google.com/p/innlab/downloads/list 三、反编译步骤: 步骤一:打开如上链接所述:将apk后缀修改为zip并解压,得到classes.dex,有些classes.dex文件会报病毒,关闭杀毒软件(原因不详,可能是由于该应用内置了广告,广告当中含有病毒,慎重)。它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.15文件夹。

在命令行下定位到dex2jar.bat所在目录,(如何定位:如果放在F盘,则直接输入F: 然后输入 cd [目标目录]

运行

dex2jar.bat    classes.dex

生成

classes_dex2jar.jar

然后,进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包classes_dex2jar.jar,即可看到源代码了。

步骤二:apk反编译生成程序的源代码和图片、XML配置、语言资源等文件

下载上述反编译工具包,打开apk2java目录下的apktool1.4.1文件夹,内含三个文件:aapt.exeapktool.batapktool.jar 

注:里面的apktool_bk.jar是备份的老版本,最好用最新的apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:apktool.bat  d  -f   abc123.apk   abc123,如下图:

----------------------------------------------------------------------------------------------------------

Android学习之反编译——源代码可执行

----------------------------------------------------------------------------------------------------------

Android学习之反编译——源代码可执行

上图中,apktool.bat 命令行解释:apktool.bat   d  -f    [apk文件 ]   [输出文件夹]


上面就是咱们反编译的内容了,具体我都是拷贝自上面的文章,同时,给出新版本dex2jar链接

http://download.csdn.net/detail/fu222cs98/6980279


四、编译过程中的问题(重点来了)

啊,我编译完成了,代码全部复制了,可是eclipse跑不了怎么办,各种bug怎么办....好吧。这就需要足够的耐心和细心了。如果你下的APK内容够大,够多,那么难度还是相当大的,该应用的还是相对简单的,对我等初学者来说,还是很幸福的。

问题一:

Android学习之反编译——源代码可执行

出现这种情况怎么办(注:Ad.class为广告类,可忽略):

解决办法:

找到R.class 赋值上面的数字找到对应的赋值,然后你就控件什么的 你就 R.id.****  布局什么的 你就R.layout.****


问题二:

Android学习之反编译——源代码可执行

如图:return怎么会在while(true)里面,这明显不科学好伐!!!!

----------------------------------------------------------------------------------------------------------

Android学习之反编译——源代码可执行

----------------------------------------------------------------------------------------------------------

解决办法:

            细读上下文吧,可怜的孩纸最后的结果其实是这样的:

Android学习之反编译——源代码可执行

根本就没必要return好嘛!!!

----------------------------------------------------------------------------------------------------------

Android学习之反编译——源代码可执行

----------------------------------------------------------------------------------------------------------

类似的还有:

Android学习之反编译——源代码可执行

这叫什么事儿嘛!!!for里面带return是几个意思,if(); 又是怎么个情况,我和我的小伙伴很捉急啊。

解决办法:

细读上下文吧,咱也没办法了......

----------------------------------------------------------------------------------------------------------

Android学习之反编译——源代码可执行

Android学习之反编译——源代码可执行

----------------------------------------------------------------------------------------------------------

注意:在layout布局文件中,咱们拷贝的同时别忘记修改里面自定义控件的前缀名如图:

----------------------------------------------------------------------------------------------------------

Android学习之反编译——源代码可执行

Android学习之反编译——源代码可执行

----------------------------------------------------------------------------------------------------------

基本内容就这些啦,这些东东花了我一个下午加一个晚上的时间,哎,划不来啊,早知道下别的开源的记事本了。后来发现这个效果也就这样~~~

附上,我测试的APK文件,以及我已经反编译并通过的源代码,供各位参考使用(强烈建议自己研究一番,不研究不知道,一研究吓一跳,可以学到不少东西):该程序仅供学习使用!!!!!!!严禁用于商业用途啊啊啊啊啊啊,我木有取得原作者的许可啊啊啊啊

http://download.csdn.net/detail/fu222cs98/6980463


另外,有木有朋友晓得一些大牛大神的android博客呀。俺好好拜读拜读。要是有大神愿意留言并略微指导的话,小弟感激不尽啊,小弟还想升任总经理,出任CEO,迎娶白富美,走上人生事业的巅峰的~~





end