破解安卓软件的第一步是了解它的安装包。
安卓软件的安装包是.apk文件,它本质上就是一个将软件各种数据打包起来的压缩文件,把后缀名改为.rar或.zip就可以直接解压。
至于有人问怎么改文件后缀,你可以在一款名为百度的知名搜索软件中找到答案…
可以看到解压出来了一些文件。
其中.dex就是安卓的可执行文件,就类似安卓手机上的exe文件。.xml是一份文档,文件夹里的文件都在这里有登记,然后还包括了主程序(MainActivity)版本号(VersionCode)等破解时要用的信息。其余的这是各种资源等。
但是光这样显然不能对这个软件造成实质性的伤害,于是我们就可以使用Apktool来解析.dex文件。
下载网址:https://ibotpeaches.github.io/Apktool/install/
中间apktool.bat是有些电脑下不了的,直接给代码`@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul
set java_exe=java.exe
if defined JAVA_HOME (
set java_exe="%JAVA_HOME%\bin\java.exe"
)
rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd “%~dp0”
if exist apktool.jar (
set BASENAME=apktool
goto skipversioned
)
set max=0
for /f “tokens=1* delims=-_.0” %%A in (‘dir /b /a-d %BASENAME%*.jar’) do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion
rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if “%~1""" goto load
if not "%~2"”" goto load
set ATTR=%~a1
if “%ATTR:~0,1%”“d” (
rem Directory, rebuild
set fastCommand=b
)
if “%ATTR:~0,1%”"-" if “%~x1”==".apk" (
rem APK file, unpack
set fastCommand=d
)
:load
%java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 “%~dp0%BASENAME%%max%.jar” %fastCommand% %*
rem Pause when ran non interactively
for /f “tokens=2” %%# in ("%cmdcmdline%") do if /i “%%#” equ “/c” pause`
这是用Apktool解压后的某一软件。
中间的smali文件夹就是原来的.dex文件解析后的版本,里面有几个乃至上万个代码文件,都是.smali,用的就是smali。
之所以之前说exe和dex像就是因为这道理,exe里面是汇编,dex里的smali也是。
至于smali,我们下期再讲。