分析某个PC软件,这个软件核心功能都是由某个jar包实现的,这个jar包里面都是些.class
文件。
用jadx之类的软件当然是可以反编译查看的,不过问题在于有些方法反编译失败,这方面做得好还得看jeb,但是jeb并不支持直接反编译jar。
于是只能先把jar转到dex,再用jeb来分析了。
转换当然是使用dx来做了,稍微了解一点的人都知道这个是Android Studio自带的工具,不过其实这个工具是可以独立使用的。
首先在Bellsoft
下载一个full-jdk,下载地址如下
比如我这里是选了Java 11,链接如下:
解压到一个文件夹,比如jdk-11.0.14-full
,然后将下面的内容保存为bat
其实就是dx.bat这个稍微改了下,这里改动的是JAVA_HOME
,然后结尾部分添加了生成dex文件的内容
正常情况下用--dex
和--output=out.dex
搭配就好了,不过经过我测试发现,对于PC平台的jar,最好是加上--no-optimize --no-strict
这样可以保证生成的dex用来反编译的时候,引用关系更准确;而--min-sdk-version=26
则是因为有些类的语法用的是一些高版本才有的。
如此一来,剩下只需要把jar文件拖到bat上就好了,这样也不用下个Android Studio了
对了既然是用dx转换,当然还需要将lib文件夹下的dx.jar
复制过来
@echo off
setlocal
set prog=%~f0
set JAVA_HOME=jdk-11.0.14-full
set java_exe=%JAVA_HOME%\bin\java.exe
set jarfile=dx.jar
set "frameworkdir=%~dp0"
set "frameworkdir=%frameworkdir:~0,-1%"
if exist "%frameworkdir%\%jarfile%" goto JarFileOk
set "frameworkdir=%~dp0lib"
if exist "%frameworkdir%\%jarfile%" goto JarFileOk
set "frameworkdir=%~dp0..\framework"
:JarFileOk
set "jarpath=%frameworkdir%\%jarfile%"
set javaOpts=
set args=
set defaultXmx=-Xmx8192M
set defaultXss=-Xss128m
set params=
:firstArg
if [%1]==[] goto endArgs
set a=%~1
if [%defaultXmx%]==[] goto notXmx
if %a:~0,5% NEQ -JXmx goto notXmx
set defaultXmx=
:notXmx
if [%defaultXss%]==[] goto notXss
if %a:~0,5% NEQ -JXss goto notXss
set defaultXss=
:notXss
if %a:~0,2% NEQ -J goto notJ
set javaOpts=%javaOpts% -%a:~2%
shift /1
goto firstArg
:notJ
set params=%params% --dex --no-optimize --no-strict --min-sdk-version=26 --output=%~n1.dex %1
shift /1
goto firstArg
:endArgs
set javaOpts=%javaOpts% %defaultXmx% %defaultXss%
call "%java_exe%" %javaOpts% -classpath "%frameworkdir%" -jar "%jarpath%" %params%
pause