返回

布局植入状态栏

Android

Android的反编译(布局植入篇)

大家有没有遇到过这种情况,就是我们想修改APP的布局,或者把我们的广告View植入到第三方APP里面,但由于各种原因,我们没有APP的源代码,这个时候就需要用到逆向了,我们可以通过将apk反编译成dex文件,进而将dex文件转换为java文件,再根据java文件来修改相应的代码。

话不多说,我们直接开始,今天我们就来反编译APK,将我们的广告View植入到第三方APP的状态栏里面。

我们先准备一下环境,需要用到的工具有:

  • jadx-gui
  • apktool
  • Android SDK
  • 要反编译的apk

环境准备好了,我们就开始吧。

1. apk反编译

首先,我们需要将apk反编译成dex文件,可以用apktool来做。打开apktool的命令行窗口,输入以下命令:

apktool d -o xxx.dex xxx.apk

其中,xxx.apk是你要反编译的apk,xxx.dex是你要输出的dex文件。

等待一段时间后,apktool就会将apk反编译成dex文件了。

2. dex转java

接下来,我们需要将dex文件转换为java文件,可以用jadx-gui来做。打开jadx-gui,点击“File”->“Open File”,选择xxx.dex文件。

jadx-gui就会开始将dex文件转换为java文件了。等待一段时间后,java文件就会生成。

3. 修改java代码

现在,我们就得到了APP的java源代码了,我们可以根据需要来修改代码了。

比如,我们想在状态栏植入一个广告View,可以在Activity的onCreate()方法中添加如下代码:

View view = LayoutInflater.from(this).inflate(R.layout.ad_view, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
params.width = WindowManager.LayoutParams.MATCH_PARENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.TOP;
getWindowManager().addView(view, params);

这样,广告View就会被植入到状态栏里面了。

4. 重新打包apk

修改好代码之后,我们需要将java文件重新打包成apk。可以用apktool来做。打开apktool的命令行窗口,输入以下命令:

apktool b xxx.apk

其中,xxx.apk是你要重新打包的apk。

等待一段时间后,apktool就会将java文件重新打包成apk了。

5. 安装apk

最后,我们就可以把重新打包的apk安装到手机上了。

这样,我们就成功地将广告View植入了第三方APP的状态栏里面了。

上面就是Android的反编译过程了,希望对大家有所帮助。