首先的知道一下几条指令的意思
1,apktool d SysteUIapk 12意思是将SystemUIapk解包到12文件下,12文件夹不用创建,会自动生成
2,apktool b 12打包12文件夹(将会自动把12文件夹里的修改过得APK解包后修改完后自动打包,生成resourcesarsc,文件,这就是我们反编译的主要目的,当然还有其他目的,后面将会说明怎么apktool需要反编译的目的,生成的文件。
3,apktool if framework-resapk这条语句很重要很多时候我们容易忽略这条语句导致打包不成功,这句语句的意思是,有些时候我们解包apk文件需要用framework-resapk(framework是指系统框架。有时也会用到apktool if twframework-resapk,同样我们只需在前面输入就行。当然得把framework-resapk 这个文件目录下。
4,apktool if twframework-resapk ,当然 twframework-resapk 也应该放在文件目录下,不如反编译Mmsapk会用到
知道这四条语句我们就可以进行反编译了。
已反编译SystemUIapk为例,,下面开始讲解
现在cmd下输入apktool if framework-resapk(并把framework-resapk 放在文件目录下)apktool if twframework-resapk( twframework-resapk 也应该放在文件目录下 )其实这两部就是搭建安卓系统环境 ,输入完后在解包,apktool d SystemUIapk 12就行了
让我们先来认识下APK文件 Android的应用程序包为扩展名为apk文件, 无论你是从手机市场里下载, 还是电脑中下载 都是这类APK文件 APK是AndroidPackage的缩写,即Android安装包(apk)。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。apk文件和sis一样,把android sdk编译的工程打包成一个安装程序文件,格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别
android
一个APK文件解压开通常有这样的文件夹:
META-INF 目录:
MANIFESTMF: manifest文件
CERTRSA: 应用程序证书
CERTSF: SHA-1资源签名列表 例如:
Signature-Version: 10
Created-By: 10 (Android)
SHA1-Digest-Manifest: wxqnEAI0UA5nO5QJ8CGMwjkGGWE=
Name: res/layout/exchange_component_back_bottomxml
SHA1-Digest: eACjMjESj7Zkf0cBFTZ0nqWrt7w=
Name: res/drawable-hdpi/iconpng
SHA1-Digest: DGEqylP8W0n0iV/ZzBx3MW0WGCA=
lib: 这个目录包含某些特定编译代码, 这个文件夹分成下面这些
armeabi: 只基于所有ARM处理器的编译代码
armeabi-v7a: 所有ARMv7处理器的编译代码
x86: 仅针对x86处理器的编译代码
mips: 为MIPS处理器的编译代码
res: 包含资源的目录不编译到资源文件,看下面:
assets: 包含应用程序的资产,可以通过AssetManager进行检索
AndroidManifestxml: 包含应用程序的元数据文件,描述名称、版本、访问权限、引用应用程序的库文件。此文件在Android二进制格式, 可被工具转化为可读的纯文本XML工具,如 AXMLPrinter2,apktool,或Androguard。设置,可以通过AssetManager进行检索
classesdex: Dalvik字节码
resourcesarsc : 一个包含预编译资源文件,如二进制的XML
有两种方法反编译APK, 如果是为了汉化程序, 可以使用apktool:
安装过程
1下载apktool152tarbz2和apktool-install-windows-r05-brut1tarbz2
2把两个文件都解压放在同一个目录,共三个文件
aaptexe
apktoolbat
apktooljar用于解包,apktooljar和aaptexe联合用于打包。
在命令行执行:
apktool d d:\xxxapk d:\xxx
xxx 为你的输出目录, 然后你就可以看一些xml的资源文件, 以及Smali文件 如下图某APK文件反编译输出目录:
Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种dex格式文件的汇编器,反汇编器。其语法是一种宽松式的Jasmin/dedexer语法,而且它实现了dex格式所有功能
你可以使用dex2jar, 下载后解压, 直接把apk文件拖到dex2jarbat文件上,就可以生成对应jar文件,这时使用JD-GUI, 打开jar文件,就可以看到java源码,同时可以导出
由此可见,Android应用程序反编译并不难, 加密与解密的斗争一直会持续
工具:
apktool:资源文件获取,可以提取出文件和布局文件进行使用查看
dex2jar:将apk反编译成Java源码(classesdex转化成jar文件)
jd-gui:查看APK中classesdex转化成出的jar文件,即源码文件
反编译流程:
一、apk反编译得到程序的源代码、、XML配置、语言资源等文件
下载上述工具中的apktool,解压得到3个文件:aaptexe,apktoolbat,apktooljar ,将需要反编译的APK文件放到该目录下,
打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入命令:apktoolbat d -f testapk test
(命令中testapk指的是要反编译的APK文件全名,test为反编译后资源文件存放的目录名称,即为:apktoolbat d -f [apk文件 ] [输出文件夹])
说明获取成功,之后发现在文件夹下多了个test文件,点击便可以查看该应用的所有资源文件了。
如果想将反编译完的文件重新打包成apk,可以:输入apktoolbat b test(你编译出来文件夹)便可,之后在之前的test文件下便可以发现多了2个文件夹:
builddist(里面存放着打包出来的APK文件)
1:用WINRAR重新打包选择“储存”
2:重新签名,签名以前先删除旧的签名存档,也就是删除META-INF目录下的MANIFESTMF以外的所有文件
3WinXP要安装20以上版本的NET,WIN7的话可以直接下一步。
4下载签名软件,搜索一下一大把
5安装JAVA,否则运行签名软件时会直接提示签名成功却什么文件都没有的
一、相关工具(针对windows系统)
下载windows安装版的程序,安装后不用管它了。
下载apktool-install-windows-22_r01-3tarbz2和apktool132tarbz2,用winrar解压后把解压出来的文件都放在一个目录下,比如:E:/apktool/ 下(为简单起见,下文都用这个路径为apktool工作目录)。
Auto-Sign签名工具:N/A
二、反编译
说要把apk“装冰箱(反编译)”分三步走:
第一步:先把apk程序(这里用ThinkingSpaceProapk)程序放到 E:/apktool/ 下。
第二步:启动windows的cmdexe,用命令行cd到 E:/apktool 目录下。
第三步:键入命令
apktool d ThinkingSpaceProapk
这个命令的格式是:
apktool d xxxapk output
其中 d 参数用来指示工具要进行反编译操作,xxxapk是要反编译的程序,output 源码输出的路径。如果最后不指定输出的路径,默认是放在同目录下的 xxx 文件夹下(即apk程序名称去掉apk后的名称)。如果你的apk文件名称中有空格,那键入命令时用双引号引起来,不过为方便起见,反编译之前把apk文件名中的空格都去掉先。
运行反编译命令后会在同级目录下得到一个 ThinkingSpacePro 文件夹,源文件都在里面了。
三、汉化
汉化这个比较简单,在反编译apk程序得到源码后,一般程序的文档都放在res目录下,都是些xml文档,用记事本之类的打开查看一下,一般都会比较容易看出来哪些是可以汉化的文本。这个就不去弄它了。可能不同程序还有不一样的,反正英语差点,汉化这种事我也不去深究了。你如果只想汉化的话,进res文件夹找找,完成汉化后就可以直接重新编译程序了(最后讲编译),不用太多的编程知识。思维导图本身支持多国语言(都在源文件的res文件夹里),所以也用不着汉化了。但大致的汉化过程就是这样了。
另外貌视还有Android ResEdit之类的专用汉化软件,不用搞什么反编译,用起来可能更简单。
四、SDcard to Flash
对于N5p,app2sd只是一个传说,不过sd2flash下面就可以实现。用SD卡玩机的人可以无视。
下面这个是本文的重点。目的就是要修改程序的默认数据读取和保存路径,主要针对那些必须有SD卡才能使用的程序。比如说一个游戏它分为主程序和游戏的关卡数据。主程序可能只有1M,但游戏关卡数据可能是几十甚至上百M,这类游戏一般是主程序安装在内存中,而关卡数据会要求你安装或下载到SD卡上。如果你没有SD卡,那就玩不成了。我之所以要改它的路径,就是不想让它占我的SD卡,N5p不是自带8G(实际好像只有65G)Flash闪存么,那为什么不用它?下面的修改就是要欺骗apk程序,我们的Flash闪存就是程序你要的SD卡。
正式修改时,除了要修改所有源文件(主要是smali程序源文件)中的/sdcard 路径,使之指向 /flash 外,还要修改含有 EnvironmentgetExternalStorageState 和 EnvironmentgetExternalStorageDirectory 的源文件,前者用于检测是否安装SD卡,后者获取SD卡的路径。
那么从头来修改思维导图 Thinking Space Pro 216的数据读写路径。原版程序你必须要有SD卡才能正常保存你的数据,修改之后,所有数据读取、保存都针对N5p自己的Flash闪存,从而解放SD卡。
用apktool反编译ThinkingSpaceProapk
apktool d ThinkingSpaceProapk
1 执行命令 java -jar apktooljar d xxxapk
如果apk没有加固,执行完命令,就能看到反编译后的smali文件,可以阅读这些smali文件
2 打包命令 java -jar apktooljar b 解包后的目录 >xxxapk
可以执行打包命令,将解包,修改后的smali再打包 如果需要调试,需要在AndroidManifestxml文件中,加上debugable
此时得到的apk包没有签名,需要签名后才能安装
3 签名 jarsigner -verbose -keystore \xxxjks -signedjar signedapk xxxapk 'benzhuo'
输入密码后,签名完毕,签名后的包是signedapk,安装这个包
1 执行 java -jar apktooljar d signedapk 解压刚才签名的安装包
2 用Android Studio 打开解压后的文件夹,此时需要设置一下工程的SDK
3 连接上测试手机, 执行命令 adb shell am start -D -W -n 包名/LauncherActivity ,以debug模式打开应用,此时手机上打开应用会弹出提示框, Waiting For Debugger
4 点击Android Studio的Attach Debugger 按钮
5 选择调试的程序,然后就可以调试了
6 修改了Smali文件之后,需要重新打包,然后安装在手机上,再调试
1 原始类型
|smali类型|java类型|
|----|---|
|B|byte|
|C|char|
|D|double|
|F|float|
|I|int|
|J|long|
|S|short|
|V|void|
|Z|boolean|
|[x| x类型数组|
|Lpackage/Object|对象|
2 方法
欢迎分享,转载请注明来源:品搜搜测评网