点击此处下载反编译工具包


一、反编译Apk得到Java源代码

    工具下载:需用到dex2jar和JD-GUI这2个工具

    dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

    JD-GUI下载地址:

    windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip

    Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz

    步骤:

    1.首先找到Android软件安装包中的classes.dex

        把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件

    2.把classes.dex拷贝到dex2jar.bat所在目录。

      在命令行模式下定位到dex2jar.bat所在目录,运行 . dex2jar.sh classes.dex ,生成classes.dex.dex2jar.jar

    3.运行JD-GUI工具(它是绿色无须安装的)

    打开上面的jar文件,即可看到源代码

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

二、反编译apk生成程序的图片、XML配置、语言资源等文件

工具下载:

在http://code.google.com/p/android-apktool/下载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。

步骤:(可参考 http://www.xinyingde.com/Article/608.Html )

1.解压缩下载的两个文件包,apktool-install-windows-2.1_r01-1.zip解压缩后得到的包里有aapt.exe 和apktool.bat.

2.打开命令窗口 (开始 > 运行,输入cmd,回 车。)进入到apktool.bat的文件夹里。

输入:./apktool d “C:***.apk”  “C:***文件夹xxx"

(命令行解释:apktool d 要反编译的文件 输出文件夹:注意 文件夹xxx必须是一个不存在的目录)

若在linux系统下,可以自定义shell函数来简化反编译过程,shell源码如下

#unmake <path> [AndroidManifest.xml path] decompile apk,若反编译*-res.apk时,可以指定AndroidManifest.xml
function unmake() {
  unmake_tool_path="反编译工具的路径";
  come_from=$(pwd);
  if [ -z $1 ];then
    echo -e "\033[32m命令使用错误,应该是unmake <path>\033[0m";
    return;
  fi
  if [ ! -e $1 ];then
    echo -e "\033[32m$1 不存在.\033[0m";
    return;
  fi
  if [ -z $(echo $1 | grep .apk) ];then
    echo -e "\033[32mapk路径输入不正确.\033[0m";
    return;
  fi
  apk_name=$(echo ${1##*/} | sed 's/.apk//g')
  if [ -z $(echo $1 | grep '/') ];then
    apk_dir=$(pwd);
  else
    apk_dir=$(echo ${1%/*} | sed 's/^.\///g')
    if [ -z $(echo $apk_dir | grep "^/") ];then
      apk_dir=$come_from/$apk_dir;
    fi
  fi
  #unzip xxx.apk and create xxx.zip
  rm -rf $apk_dir/apk_unzip/;
  unzip $apk_dir/$apk_name.apk -d $apk_dir/apk_unzip/;
  cp $apk_dir/$apk_name.apk $apk_dir/$apk_name.zip;
  #unmake res
  rm -rf $apk_dir/$apk_name/;
  is_add_to_rebuild="false";
  if [ -e $apk_dir/apk_unzip/resources.arsc ];then
    # 若apk中没有AndroidManifest.xml,反编译将会失败,因此,需要自己重新生成一个带有AndroidManifest.xml的zip用以反编译,这个AndroidManifest.xml没有更多实际价值,随便来一个都OK
    if [ ! -e $apk_dir/apk_unzip/AndroidManifest.xml ];then
      is_add_to_rebuild="true";
      if [ -z $2 ];then
        cp $unmake_tool_path/apktool/AndroidManifest.xml $apk_dir/apk_unzip/AndroidManifest.xml;
      else
        if [ -e $2 ];then
          cp $2 $apk_dir/apk_unzip/AndroidManifest.xml;
        else
          echo "$2 不存在.";
          return;
        fi
      fi
      cd $apk_dir/apk_unzip/;
      echo "zip -r $apk_name.zip ./*";
      zip -r $apk_name.zip ./*;
      mv $apk_name.zip $apk_dir/$apk_name.zip;
    fi
    echo "$unmake_tool_path/apktool/apktool d $apk_dir/$apk_name.zip $apk_dir/$apk_name/";
    $unmake_tool_path/apktool/apktool d $apk_dir/$apk_name.zip $apk_dir/$apk_name/;
  else
    mkdir $apk_dir/$apk_name/;
  fi
  rm $apk_dir/$apk_name.zip;
  #unmake src
  if [ -e $apk_dir/apk_unzip/classes.dex ];then
    cd $unmake_tool_path/dex2jar-0.0.9.8/;
    cp $apk_dir/apk_unzip/classes.dex ./;
    echo ". $unmake_tool_path/dex2jar-0.0.9.8/dex2jar.sh classes.dex";
    . dex2jar.sh classes.dex;
    mv classes_dex2jar.jar $apk_dir/$apk_name/src.jar;
    rm classes.dex;
    cd $apk_dir/$apk_name/;
    $unmake_tool_path/jd-gui-0.3.5.linux.i686/jd-gui src.jar;
  fi
  #若这个AndroidManifest.xml是为了结构而加入的,则删除它
  if [ -z $2 ];then
    if test $is_add_to_rebuild = 'true' ;then
      echo "$apk_dir/$apk_name/AndroidManifest.xml";
      rm $apk_dir/$apk_name/AndroidManifest.xml;
    fi
  fi
  nautilus $apk_dir/$apk_name/;
  rm -rf $apk_dir/apk_unzip/;
  cd $come_from;
}

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐