反编译apkjava源码-如何将androidapk反编译为java源代码

如何将androidapk反编译为java源代码

更新时间:2012年12月06日 09:29:14 作者:

因为Android的代码是放置在dalvik虚拟机上的托管代码,所以可以很容易地反编译成我们可以识别的代码。 本文将对其进行详细介绍。 有需要的同学可以参考以下

由于Android的代码是放置在dalvik虚拟机上的托管代码,因此也可以很容易地反编译成我们可以识别的代码。

之前写过一篇文章,将Android apk包反编译成smali文件反编译apkjava源码,然后重新编译签名打包,实现篡改apk的功能。

最近有新的办法,可以直接从Android apk包中的classes.dex文件中反编译dex代码为java的.class补码,然后再从.class补码反编译为java源代码。 我不需要多说。

首先我们需要的工具是dex2jar和jd-gui

第一个工具dex2jar用于转换classex.dex文件,即dex二补码转换为java的标准.class二补码,然后jd-gui反编译标准.class二补码即可是java源代码。

首先从apk包中提取classes.dex

放到dex2jar目录下

然后在命令行执行

dex2jar.batclasses.dex

反编译apkjava源码-如何将androidapk反编译为java源代码

此时执行成功后会生成一个classes.dex.dex2jar.jar文件

然后用jd-gui打开这个文件,如右图

反编译apkjava源码-如何将androidapk反编译为java源代码

和我自己写的这个程序源码几乎一样

提供此反编译方法主要供大家学习研究。 如果有什么问题可以发邮件给我一起讨论。

希望您不要利用此方法进行恶意活动。 虽然别人通过努力写程序并不容易,但是这种方法可以大致学习别人写的程序的逻辑和结构。 希望对您有所帮助。

Android逆向apk程序的经验

本文主要介绍如何对Android APK应用程序进行逆向工程。 本文提供的方法仅供研究和学习之用。

本文所需的工具是

jdk用于搭建java运行环境

AXMLPrinter2.jar 这用于反转.xml 文件

baksmali.jar用于逆向classex.dex文件

因为Android的.apk文件实际上是一个zip文件,可以直接用winrar打开

如右图所示:

反编译apkjava源码-如何将androidapk反编译为java源代码

用rar打开后,我们可以看到该文件实际上是一个zip包,其中包含META-INF文件夹。 该文件夹用于保存签名文件,保证包的完整性。

res文件夹下是apk使用的资源文件。 它们都保存完好。 我们可以直接提取它们。 在进行汉化时,我们可以直接读取字符串文件并进行更改。

AndroidManifest.xml文件是编译后的配置文件,用于声明程序中包含的活动和服务以及程序的能力,即权限。 resources.arsc是编译后的资源描述文件反编译apkjava源码,我们主要关注classes.dex。 我们编译的Android程序中,源程序中的所有.java文件最终都会编译成这样一个.dex文件,在Android手机上的dalvik虚拟机上执行。

首先,我们介绍如何对.xml文件进行逆向工程

因为我们直接用记事本打开apk包中的xml文件,还是有一些乱码

所以我们需要恢复它才能看得更清楚

这里需要用到AXMLPrinter2.jar工具

具体来说,打开命令行。 我们以AndroidManifest.xml为例,输入以下命令

java-jarAXMLPrinter2.jarAndroidManifest.xml>AndroidManifest.txt

有兴趣的也可以写一个.bat脚本方便执行

我们可以看一下执行结果

执行前的AndroidManifest.xml文件

反编译apkjava源码-如何将androidapk反编译为java源代码

我们可以执行完之后再看一下

复制代码代码如下:

xmlns:android="http://schemas.android.com/apk/res/android"

安卓:版本代码=“322”

android:versionName="ver3.2.2"

包=“com.eoeandroid.wallpapers.christmas”

机器人:标签=“@7F040000”

安卓:图标=“@7F020004”

机器人:标签=“@7F040001”

android:name=".Main"

android:name="android.intent.action.MAIN"

android:name="android.intent.category.LAUNCHER"

android:name=".service.SyncDeviceInfosService"

android:name="com.mobclix.APPLICATION_ID"

android:value="30c0e2bb-a878-43cb-830b-a39fcae33b0c"

安卓:m​​inSdkVersion =“3”

android:name="android.permission.INTERNET"

android:name="android.permission.SET_WALLPAPER"

android:name="android.permission.WRITE_EXTERNAL_STORAGE"

android:name="android.permission.ACCESS_NETWORK_STATE"

android:name="android.permission.READ_PHONE_STATE"

android:name="android.permission.ACCESS_NETWORK_STATE"

基本上可以恢复的内容与源程序大致相同。

这里我以eoe制作的壁纸程序为例。

接下来大家一定更关心classes.dex的逆向工程

这一张似乎和上一张非常相似。

使用baksmali.jar这个工具,是美国一位对Android有深入研究的大佬做的。

执行代码

java-jarbaksmali.jar-oclassout/classes.dex

说说classes.dex可以倒转成文件夹

我可以在这里截图给你看。

反编译apkjava源码-如何将androidapk反编译为java源代码

单击其中一个文件,让我们继续查看它。

反编译apkjava源码-如何将androidapk反编译为java源代码

是不是感觉这段代码很友好,从中我们可以大致推算出源程序的一些结构流程? 本文仅供研究和学习之用。 欢迎与我讨论交流

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 反编译apkjava源码-如何将androidapk反编译为java源代码 https://www.wkzy.net/game/185128.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务