`
univasity
  • 浏览: 811517 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[小工具]apk反编译工具整合(修复)

 
阅读更多

//--------------------------------------------------------------- 2011.09.17

部分朋友反映ApkDecompiler.exe文件被扫描到病毒,但我是无视的,完全不影响使用。

 

对于不放心的朋友,我这里提供原始文件,你们可以自己下载Quick Batch File Compiler工具将BAT转换为EXE,或者直接使用BAT也是可以的...

 

步骤大概是这样的:

1.启动Quick Batch File Compiler,选择“打开”,找到decompiler.bat文件;

2.切换到“嵌入式文件”TAB,选择好图标,然后在下面添加附件中找到utils.jar文件添加进去;

3.点击上方菜单栏的“构建”,并选择保存路径,保存文件名为ApkDecompiler.exe。

 

生成后,将该exe文件直接替换掉原本RAR压缩包(下面下载)中的对应文件即可。

 

BTW,本身这个小工具就是练练手,同时也希望能对大家学习研究有帮助。


所需的文件在下面files_for_build.rar附件里。也感谢下帮我做图标的之前公司的同事Yen.

 

 

//--------------------------------------------------------------- 2011.05.24

最近很多网友都表示遇到了dll调用报错的问题,本人一下子也未能找到很好的解决办法...


终于能抽出时间,于是用蹩脚的cmd批处理配合java重新实现了一遍:

@echo off

cd /d %~dp0

set curDir=%cd%
set apkFilePath=%1
set apkFileName=%~n1

rem edit this params before use.
set outputFilePath=%cd%\apk_cracked
set dex2jarPath=%cd%\dex2jar\dex2jar.bat
set jd_guiPath=%cd%\jd-gui\jd-gui.exe
set apktoolPath=%cd%\apktool\apktool.bat
set utilsPath=%cd%\utils.jar

set outputTempDir=%outputFilePath%\temp
set saveDir=%outputFilePath%\%apkFileName%

@echo [Params]
echo curPath:%curDir%
echo apkFile:%apkFilePath%
echo outputFilePath:%outputFilePath%
echo dex2jarPath:%dex2jarPath%
echo jd_guiPath:%jd_guiPath%
echo apktoolPath:%apktoolPath%
echo saveDir:%saveDir%

@echo ------------------------
@echo [Step01].clear old files
@echo ------------------------
rem delete temp files.
if exist %outputTempDir% (
	rd /q /s %outputTempDir%
)
rem delete last version.
if exist %saveDir% (
	rd /q /s %saveDir%
)

@echo ------------------------
@echo [Step02].unzip .apk file
@echo ------------------------
rem unzip .apk file.
java -jar %utilsPath% "unzip" "%apkFilePath%" "%outputTempDir%"

@echo ------------------------
@echo [Step03].decompile .dex file
@echo ------------------------
rem decompile .dex file.
call %dex2jarPath% "%outputTempDir%\classes.dex"
rem rename .jar file to .apk filename.
if exist "%outputTempDir%\classes.dex.dex2jar.jar" (
	rename "%outputTempDir%\classes.dex.dex2jar.jar" "%apkFileName%.jar"
)

@echo ------------------------
@echo [Step04].save resources files
@echo ------------------------
rem copy resources files to saveDir.
java -jar %utilsPath% "saveResFiles" "%outputTempDir%" "%saveDir%"

@echo ------------------------
@echo [Step05].decompile .xml files
@echo ------------------------
rem decompile .xml files.
call %apktoolPath% d -f "%apkFilePath%" "%outputTempDir%\apktool"

@echo ------------------------
@echo [Step06].save xml files
@echo ------------------------
rem copy xml files to saveDir.
java -jar %utilsPath% "saveXmlFiles" "%outputTempDir%\apktool" "%saveDir%"

@echo ------------------------
@echo [Step07].remove temp files
@echo ------------------------
rd /q /s %outputTempDir%

@echo ------------------------
@echo [Step08].show decompiled files
@echo ------------------------
rem open saveDir.
call explorer.exe %saveDir%
rem open .jar by jd-gui
call %jd_guiPath% "%saveDir%\%apkFileName%.jar"

rem pause

* 由于使用了Quick Batch File Compiler工具来转成.exe,所以必须将解压的文件放置到名为\ApkDecompiler\的目录下。

 

基本使用是一样的,具体见附件。

 

//---------------------------------------------------------------- 2011.05.06

<!-- 最近发觉很久没搞小东西玩了,手痒...随便搞着玩 -->

 

参照自网上目前比较流行的apk破解组合方案:

dex2jar + apktool + jd-gui

 

我只是简单地将他们组合到一块,方便使用。

 

其中init.cfg 是一些属性的配置:

dex2jarPath=.\dex2jar\dex2jar.bat
jd-guiPath=.\jd-gui\jd-gui.exe
apktoolPath=.\apktool\apktool.bat
savePath=H:\apk_cracked\ <这个是储存的目录,最好单独新建一个目录,以防止导致执行过程中误删了文件>

*如果提示java.lang.UnsatisfiedLinkError: Utils.getCurrentFilePath()Ljava/lang/String;的错误,可以将上面3个应用的地址改成绝对地址。

  这是因为我写了一个获取当前应用路径的DLL,具体问题还有待解决...真是杯具了...

 

其他几个目录就是对应着相关的工具。

 

使用方式:

1.设置好init.cfg中的路径参数;

2.直接将.apk包拖到ApkDecompiler.exe上即可;

   或者,进入cmd,输入:

   ApkDecompiler.exe <apk_file> [<output_file> <dex2jar_file> <jd-gui_file> <apktool_file>]

 

反编译出来后的结构:

 

*涉及的所有资源来源于网络,仅作学习交流。

  • 大小: 79.7 KB
分享到:
评论
17 楼 univasity 2012-01-13  
这个主意不错!
GDGZWQZ 写道
我说的批量更换APK文件名的意思是指,能自动识别APK文件中的中文说明和版本(apk文件内部已经包含这些信息,只要反编译并解析即可获得。),并依此重新命名,如原文件“sdfg2345265.apk”(这个很难理解呀!),能通过批量重命名软件自动更换文件名为“GPS智慧搜星 Ulysee Gizmos v1.6.2 .apk ”(这样多么直观呀!),之所以要批量,是因为APK文件软件一般都是一二百个,逐个命名太麻烦啦!(一般的软件无批量功能)不知道我说清楚了没有!

网上曾有“白鸽男孩”发布一个,ApkBatchRename软件,非常可惜的是,由于它利用的是linux的组件,因此,不支持中文,可惜至极!!!

而利用反编译技术,却可以解决这一问题,故而,有此需求!

16 楼 GDGZWQZ 2012-01-05  
我说的批量更换APK文件名的意思是指,能自动识别APK文件中的中文说明和版本(apk文件内部已经包含这些信息,只要反编译并解析即可获得。),并依此重新命名,如原文件“sdfg2345265.apk”(这个很难理解呀!),能通过批量重命名软件自动更换文件名为“GPS智慧搜星 Ulysee Gizmos v1.6.2 .apk ”(这样多么直观呀!),之所以要批量,是因为APK文件软件一般都是一二百个,逐个命名太麻烦啦!(一般的软件无批量功能)不知道我说清楚了没有!

网上曾有“白鸽男孩”发布一个,ApkBatchRename软件,非常可惜的是,由于它利用的是linux的组件,因此,不支持中文,可惜至极!!!

而利用反编译技术,却可以解决这一问题,故而,有此需求!
15 楼 earth123 2011-12-15  
发现res/values里的xml会有缺失,单独使用apktool反编译的话没有问题
14 楼 earth123 2011-12-15  
反编译自己写的小程序试了下,效果真好,基本上可以读了
比单独使用一个工具的效果好多了(不过耗时也增加了不少)
而且使用起来很方便
感谢BZ的工作~
13 楼 univasity 2011-11-04  
GDGZWQZ 写道
能否开发一个支持中文的批量更换APK文件名的软件!下载的APK文件名太乱啦!!!


批量重命名?一般每个APK都是不同主题内容的吧?文档或图片批量重名比较多见,一般文件管理软件也有这样的功能。APK等应用的话,还是手动逐个添加有意义的名称为好。不知有无理解错你的意思。
12 楼 GDGZWQZ 2011-11-02  
能否开发一个支持中文的批量更换APK文件名的软件!下载的APK文件名太乱啦!!!
11 楼 xiaofeishouxiao 2011-05-26  
seanyzhou 写道
反编译出来的代码在elcipse不能用啊
到处是
int xxx=null;
boolean xxx=0;
....
之类语法错误的东西

10 楼 michaelyn 2011-05-25  
最新版本可以用了,十分感激楼主
9 楼 奋发图强 2011-05-24  
和楼上的一样,也是报错
8 楼 lufam 2011-05-09  
运行出错与vvvpig一样
7 楼 michaelyn 2011-05-09  
univasity 写道
主要是我为了获取当前应用的路径,写了个DLL,这是提示DLL没有关联上(目前是将DLL拷贝到缓存)...

你只要将init.cfg里3个第三方应用的地址改成绝对路径就好了。

这问题我回头想想怎么解决哈。

vvvpig 写道
为啥我无论用命令行还是直接拖都会有以下错误
java.lang.UnsatisfiedLinkError: C:\Documents and Settings\root\Local Settings\Te
mp\GetCurrentFilePath4723232611269939432.dll: Can't find dependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.System.load(Unknown Source)
        at Utils.<clinit>(Utils.java:31)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
java.lang.UnsatisfiedLinkError: Utils.getCurrentFilePath()Ljava/lang/String;
        at Utils.getCurrentFilePath(Native Method)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
操作系统:XP Sp3
JAVA:1.6_23
需要exe4j的啥DLL吗


改成了绝对路径还是报这个错误哦
6 楼 univasity 2011-05-06  
主要是我为了获取当前应用的路径,写了个DLL,这是提示DLL没有关联上(目前是将DLL拷贝到缓存)...

你只要将init.cfg里3个第三方应用的地址改成绝对路径就好了。

这问题我回头想想怎么解决哈。

vvvpig 写道
为啥我无论用命令行还是直接拖都会有以下错误
java.lang.UnsatisfiedLinkError: C:\Documents and Settings\root\Local Settings\Te
mp\GetCurrentFilePath4723232611269939432.dll: Can't find dependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.System.load(Unknown Source)
        at Utils.<clinit>(Utils.java:31)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
java.lang.UnsatisfiedLinkError: Utils.getCurrentFilePath()Ljava/lang/String;
        at Utils.getCurrentFilePath(Native Method)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
操作系统:XP Sp3
JAVA:1.6_23
需要exe4j的啥DLL吗

5 楼 vvvpig 2011-05-06  
为啥我无论用命令行还是直接拖都会有以下错误
java.lang.UnsatisfiedLinkError: C:\Documents and Settings\root\Local Settings\Te
mp\GetCurrentFilePath4723232611269939432.dll: Can't find dependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.load0(Unknown Source)
        at java.lang.System.load(Unknown Source)
        at Utils.<clinit>(Utils.java:31)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
java.lang.UnsatisfiedLinkError: Utils.getCurrentFilePath()Ljava/lang/String;
        at Utils.getCurrentFilePath(Native Method)
        at ApkDecompiler.main(ApkDecompiler.java:37)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.exe4j.runtime.LauncherEngine.launch(Unknown Source)
        at com.exe4j.runtime.WinLauncher.main(Unknown Source)
操作系统:XP Sp3
JAVA:1.6_23
需要exe4j的啥DLL吗
4 楼 univasity 2011-05-06  
kala888 写道
恩。不错,其实这个整合前两天俺也做了。。。只不过xml没有排版。。。

,我也就胡乱搞的。有空交流交流!
3 楼 kala888 2011-05-06  
恩。不错,其实这个整合前两天俺也做了。。。只不过xml没有排版。。。
2 楼 sunburst 2011-05-05  
seanyzhou 写道
反编译出来的代码在elcipse不能用啊
到处是
int xxx=null;
boolean xxx=0;
....
之类语法错误的东西


能直接用就神奇了。。。
1 楼 seanyzhou 2011-05-05  
反编译出来的代码在elcipse不能用啊
到处是
int xxx=null;
boolean xxx=0;
....
之类语法错误的东西

相关推荐

    APK反编译、重构工具

    总结来说,APK Easy Tool v1.59.2 Portable是一个强大的Android应用分析和修改工具,它整合了APK反编译(通过APKTool)、DEX反编译(Baksmali和Smali)、APK重构以及签名和信息查看等功能,极大地简化了开发者对APK...

    APK反编译及编译工具v132+签名版.7z

    APK反编译及编译工具是针对Android应用程序(APK)的专业软件,主要用于开发者或逆向工程爱好者分析、修改和重新打包APK文件。这个工具的版本为v132,并且集成了签名功能,使得用户在完成修改后能够方便地对应用进行...

    安卓APK反编译工具(ApkToolkit) 最新版

    安卓APK反编译工具(ApkToolkit)是一款专为Android应用开发者和逆向工程师设计的实用工具,它提供了包括反编译、编译和签名在内的一系列功能,旨在帮助用户深入了解APK文件的内部结构并进行修改。这款工具特别适用于...

    APK反编译、APK打包

    APK反编译与打包是Android应用开发中的一个重要环节,主要涉及对已有的APK文件进行逆向工程,以理解其内部结构、修改代码或资源,然后重新打包以实现特定目的。这一过程对于开发者调试、安全分析、软件本地化以及二...

    apk1.3.4 反编译工具

    它是一个强大的反编译工具,专为Android开发者设计,使得分析和修改APK文件变得简单易行。 ApkTool是Java编写的一款开源工具,而ApkTool_GUI则是其图形化界面版本,1.3.4是该工具的一个稳定版本。它提供了友好的...

    APK Dex文件反编译及回编译工具(APKDB)v1.9.2正式版

    APK DB是一款强大的Android应用程序(APK)反编译与回编译工具,主要用于帮助开发者、安全研究人员或逆向工程爱好者深入理解APK文件的内部结构,并进行修改和优化。v1.9.2是该工具的一个正式版本,通常会包含一些...

    Android反编译工具包

    jd-gui适用于Windows操作系统,版本1.4.0在这里提供了对APK反编译结果的直观查看。通过jd-gui,开发者可以直接在窗口中浏览和搜索源代码,这为分析和理解反编译出的Java类提供了极大的便利。 总结一下,这个...

    APK&Dex;文件反编译及回编译工具+v1.2

    开发者通常使用反编译工具,如Apktool,来解包APK,查看和修改其内部结构。这个工具包可能包含了Apktool,允许用户解压APK,查看资源,并在需要时修改它们,例如修改字符串资源、布局或图标。 Dex文件是Android应用...

    Android反编译工具包(最新)绿色版

    这个“Android反编译工具包”正是为了满足这些需求而提供的一个集合,包含了三个核心工具:Apktool、dex2jar和JD-GUI。以下是对这些工具的详细说明: 1. **Apktool**: Apktool是一个用于反编译和重新打包Android...

    APK+Dex文件反编译及回编译工具(APKDB)v1.8.1正式版 支持繁体

    1. APK文件反编译工具 ApkTool v2.0.0  用于直接反编译APK文件,同时也会反编译dex文件。 2. DEX文件反编译工具 Baksmali/Smali v2.0.2  专门用来反编译Dex文件,可以跟ApkTool兼容使用。 3. DEX文件反编译资源...

    Androidkiller 最新apktool 已修复反编译时卡死

    `Androidkiller`是一个专门针对这一需求的工具,其最新版本v1.3.1已修复了反编译过程中的卡死问题,提升了用户体验和工作效率。 `apktool`是Android社区广泛使用的开源工具,用于APK的反编译和回编译。它能够将APK...

    反编译工具,可看源码

    在IT行业中,反编译工具是一种非常重要的辅助开发和学习的软件。它们允许用户查看已编译的应用程序或库的源代码,这对于理解和学习未知软件的工作原理、逆向工程、安全分析以及代码复用等场景都非常有用。在这个特定...

    android反编译工具

    - **调试与修复**:开发者可以使用反编译工具来调试自己的应用,或分析第三方应用的问题。 - **安全分析**:安全研究人员通过反编译来检查应用是否存在安全漏洞,如数据泄露、恶意行为等。 - **学习与研究**:对于...

    Android一键反编译工具

    - **APK反编译工具合集(Apkdb)下载 1.50_APK编程工具 - pc6下载站.url**:这可能是工具的下载链接,用于获取最新版本或获取更多相关资源。 **应用场景** 1. **学习借鉴**:开发者可以通过反编译了解其他应用的设计...

    Android 反编译工具

    本文将详细介绍“Android反编译工具”的使用,这些工具可以帮助开发者便捷地进行APK分析和逆向工程。 标题中的“Android反编译工具”是指一系列专门用于解析和提取Android应用APK文件内容的软件。这些工具通常包括...

    Android反编译工具

    - **调试与测试**:开发者可以使用反编译工具来快速定位和修复代码问题,尤其是在没有源码的情况下。 - **安全审计**:安全研究人员通过逆向分析APK,查找潜在的安全漏洞,比如权限滥用、数据泄露等问题。 - **二次...

    jadx_and_openjdk_反编译apk工具.zip

    1. 使用APK反编译工具(如jadx-gui)打开APK文件,它会解析APK中的资源和DEX文件,并将其转换为Java源代码。 2. 分析生成的源代码,理解应用程序的逻辑和数据结构。jadx的源码视图可以帮助我们查看类、方法和变量,...

    Android反编译、回编译工具脚本

    `apktool_2.9.3.jar`是Apktool的jar文件,它是一个强大的Android APK反编译工具。Apktool能够解包APK,解析其中的DEX(Dalvik Executable)文件为Java字节码,以及XML资源文件,如布局、样式、字符串表等。同时,...

    超强安卓反编译软件.rar

    6. **再打包与签名**:修改完成后,反编译工具会将所有修改整合回一个新的APK文件。由于安全机制,这个新APK需要重新签名才能在设备上安装,这通常使用 jarsigner 或 ApkSigner 工具完成。 7. **安全考量**:虽然反...

Global site tag (gtag.js) - Google Analytics