Android逆向——反编译APK改代码

如果你想反编译一个简单的APK文件,修改里面的代码,那么你不妨尝试看一下,还是不难的。
为什么说是简单的APK文件呢?因为复杂一点的,比如大企业的app,是不可能让你如你所愿的,他们一般会通过复杂的分包和混淆,让你无法获取代码的可读性,读都读不了,更何况是动手改代码了~

系统:Windows

一、apktool

apktool工具的作用:

  1. 我们可以通过apktool去查看apk的AndroidManifest、XML文件和图片资源文件。
  2. 可以修改apk中的代码,不过并非源码,而是smail文件,这个后面会讲。

首先要下载apktool工具,我们需要去到apktool官网去下,链接是:https://ibotpeaches.github.io/Apktool/install/

翻译过来是这样子:

我这边是在E盘新建一个“apktool反编译工具”的文件夹,并将两个文件(apktool.jar)&(apktool.bat)放在里边,然后配置系统环境变量Path:

然后调出cmd命令行窗口,就可以自由使用apktool命令了~
相关命令:

//apk解析
apktool d -f E:\gongju\apktool反编译工具\app.apk -o E:\gongju\apktool反编译工具\test

解析后的目录结构是这样的:

这里我们可以查看:
assets:资源文件
lib:jni相关的so包
original:原始的AndroidManifest.xml文件和签名文
res:xml和图片资源
smail:反编译出来的代码,smail文件夹中目录结构和源代码的包一样
AndroidManifest:就AndroidManifest.xml

//打包成apk
apktool b -f E:\gongju\apktool反编译工具\test -o E:\gongju\apktool反编译工具\packed.apk

此外,可以修改smail文件后用apktool工具来重新打包,这样子避免了开发过程中一些小改动导致重新修改、编译以及打包的情况。
那么问题来了,smail文件是什么?
Dalvik虚拟机和Jvm一样,也有自己的一套指令集,类似汇编语言,但是比汇编简单许多,只要你会java,了解android的相关知识,就可以轻松的看懂,如果得到这些汇编文件呢,利用apktool或者dex2jar工具包(网上很多),反编译classes.dex文件,就可以得到以smali为后缀的文件,这些smali文件就是Dalvik的寄存器语言。
以上是摘抄的,打开来看看是这样子的,怎么样?我反正看不怎么懂。
.smail文件

怎么改代码呢?是不是还要学会这种汇编语言的语法呢?其实大可不必,只要会看一点就可以。
首先我们需要定位要改的代码所在的位置,这里用到的工具有:

  • dex2jar:将dex文件转换成jar文件的工具
  • jd-gui:查看jar文件的反编译工具
二、dex2jar

下载地址:https://sourceforge.net/projects/dex2jar/postdownload
使用步骤:

  1. 把app(应用名称).apk的后缀改成zip或者rar,即改成app.zip或app.rar,右键“解压”出来,目录结构如下:
    拿到dex文件
  2. 把classes.dex文件拷贝到的dex2jar文件夹下,执行命令:
    d2j-dex2jar classes.dex
    至此dex文件就转化为jar文件了。
    image.png
三、jd-gui

下载地址:http://java-decompiler.github.io/

使用步骤:

  1. 打开工具,查看jar包信息,可以定位到需要修改的地方,假设我要改一个请求的url地址,马上就可以定位到:
  2. 根据路径可以确认smail文件的位置,如图上所示。然后去到对应的smail文件夹(这里是com\game\sdk\util\Constans.smail),改了它就可以了。
    这只是一个简单的修改,同样你如果有这个项目中依赖的包的源码,你就可以改这个包源码。通过编译成jar文件,再通过转化为dex(通过dx.bat),再转化为smail(baksmali.jar),最终替换调此项目中的相关smail即可。
四、dx.bat

1.这个是Android自带的(如何你安装了Android Studio)工具,你可以在以下目录中找到它:

2.通过cmd命令行进入到当前目录:
cd C:\Users\Administrator\AppData\Local\Android\Sdk\build-tools\28.0.3
输入此命令拿到dex文件:
dx.bat --dex --no-strict --no-warning --output=E:\work\out\dex\classes.dex(此处替换你想输入dex文件的位置) E:\Project\jhsdk\build\intermediates\bundles\default\classes.jar(此处替换你的jar文件所在的位置)

五、baksmali.jar

下载链接:
https://bitbucket.org/JesusFreke/smali/downloads/
命令:
java -jar baksmali.jar(此处为baksmail.jar文件的路径) -o E:\work\out\smali(输出smail文件的位置) E:\work\out\dex\classes.dex(dex文件的位置)

六、补充

上述这些都是代码层面的修改,如果我们想改资源就更简单了,直接在res文件中修改,不过要注意不能随意更改,资源大都被引用了,删除了会导致我们在build构建apk时直接报错,亦或者安装apk失败。
另外,如果我们要改apk的包名和版本呢?包名简单,只需要在AndroidManifest中修改就可以,sdk版本在哪修改呢?在这儿:
apktool.yml

转载:https://blog.csdn.net/baidu_34928905/article/details/96735356

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: APK反编译工具是一种用于查看和修Android应用程序的工具。使用这些工具,可以将安装在设备上的APK文件还原为其源代码,并对其进行修APK反编译工具的使用有多种用途。首先,它可以帮助开发人员了解其他应用程序的实现细节。通过查看其他应用程序的源代码,开发人员可以学习到新的编程技巧和方法,以优化他们自己的应用程序。 此外,APK反编译工具还可以用于安全研究和漏洞分析。通过分析应用程序的源代码,安全研究人员可以发现潜在的漏洞和安全隐患,并提供有关如何修复这些问题的建议。 然而,需要注意的是,APK反编译工具的使用也可能存在一些法律和道德问题。未经授权地修其他应用程序的源代码可能会侵犯知识产权,违反用户协议或法律法规。因此,在使用APK反编译工具时,必须遵守法律规定,并获得相关方的授权。 总而言之,APK反编译工具是一种有用的工具,可以帮助开发人员了解其他应用程序的实现细节,同时也有助于安全研究和漏洞分析。但是,使用这些工具需要遵守法律规定,并遵循道德原则。 ### 回答2: APK反编译工具是一种用于查看和修APK文件的工具APK文件是Android应用程序的安装包文件,其中包含了应用程序的源代码、资源文件和其他必要的文件。反编译工具允许开发者或者研究人员将APK文件解压和反编译为可读取的源代码和资源文件。 使用APK反编译工具可以帮助开发者了解和分析其他应用程序的实现方式和逻辑。通过查看反编译后的源代码,可以了解应用程序的代码结构、算法和逻辑处理。这对开发者来说是非常有价值的,可以借鉴和学习其他应用程序的实现方式,提高自己的开发水平。 此外,APK反编译工具也可以用于应用程序的逆向工程和修。通过反编译APK文件,可以直接修应用程序的代码或资源文件,从而实现一些自定义的功能或者修复错误。然而,需要注意的是,在修他人的应用程序时,需要遵守相关的法律和道德规范,不能进行非法的操作,以免侵犯他人的权益。 总的来说,APK反编译工具是一个非常有用的工具,可以帮助开发者了解和学习其他应用程序的实现方式,并且在一定范围内可以对应用程序进行修和优化。但是需要注意使用的合法性和道德规范,遵守相关法律的前提下使用该工具

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值