【转】一步一步带你反编译apk,并教你修改smali和重新打包
一、工具介绍:
1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包;
2.dex2jar:该工具作用是将classes.dex文件,反编译出源码(如果apk未加固),反编译出文件,使用jd-gui工具进行查看;
3.Auto-Sign:自动签名工具,将重新打包的apk进行签名,如果不签名,无法安装使用。
工具下载地址:https://download.csdn.net/download/sxk874890728/10443156 (需要3CSDN积分,原本我设置3积分的,不知道为什么涨到16积分了......)
使用场景:项目源码丢失,只有线上apk,并且没有加固,要求修改apk接口地址,并且重新打包,再发布。
二、工具使用:
解压后工具包如图:
1.思路:使用工具dex2jar反编译,并用jd-gui工具进行查看项目结构,查看源码,并且找到接口地址类,修改接口地址;
步骤一:下载好工具,将需要反编译的APK后缀名改为.rar或则 .zip,并解压,如图:
得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的
classes.dex复制到解压出来的工具dex2jar-0.0.9.15 文件夹内,
在命令行下,进入到dex2jar.bat所在目录,输入命令:
dex2jar.bat classes.dex
效果如下:
步骤二:运行结束后,在该目录下会生成一个classes_dex2jar.jar的文件,如图:
然后打开工具jd-gui文件夹里的jd-gui.exe,用该工具打开生成的classes_dex2jar.jar文件,便可以看到源码
了,效果如下:
2.思路:apktool,反编译修改smali文件,进行重新打包,通过用jd-gui工具找到接口地址类后,与相应
的smali文件进行对比,修改接口地址;
下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar ,将需要反编译的
APK文件放到该目录下,如图:
打开命令行界面(运行-CMD) ,定位到apktool文件夹,输入以下命令:
apktool.bat d -f test.apk -o test
apktool -f [待反编译的apk] -o [反编译之后存放文件夹]
如图:
反编译之后会得到test 文件夹,打开test文件夹,里边就是反编译出来的各种资源文件
使用jd-gui查看源码找到地址类,然后在smali文件里找到地址的smali文件,更改smali文件内接口地址。
如图:
smali文件内找到与之对应的地址smali文件
修改接口smali文件里的地址将Ip更换成域名如图:
修改后,保存。
3.重新打包。 执行打包命令
apktool.bat b test
在test文件内会多出两个文件如下图所示:
dist文件内就是我们需要的apk。
4.签名apk,重新发布。
接下来就要用到签名工具了,如果不经过签名是不能正确运行的。工具: auto-sign.zip
将打包好的test.apk 拷贝到解压好的auto-sign文件夹下,执行命令:
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test_signed.apk
- 1
test_signed.apk就是签名后的apk :
5.运行之后,发现在5.0上运行会直接崩溃,android studio捕捉到错误所在:
这里是在jd-gui上查看到了源码位置
错误原因:
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.sun3d.culturejingan.communication.link }
如错误提示所示,在android 5.0版本以后,service intent必须为显式指出。
那么就需要修改smali文件相关类,这里就用到将java2smali文件
6.java2smali插件,地址:https://plugins.jetbrains.com/plugin/7385-java2smali
插件安装,选择本地安装,不懂怎么安装插件,请百度下。
找到相应问题的smali文件代码定位:
由于不太懂smali语法的书写,所以我们直接将写好java代码用插件转换为smali语法,拷贝进来,替换原有smali代码
这是java代码
转换成smali代码
相应代码会直接展示,找到相应转换结果:
替换反编译出的相应smali文件里的相应代码,然后执行重新打包命令,签名命令,执行第3步。
整个过程并不复杂,只要有耐心就可以更改成功。
反编译+重新打包+签名
java -jar apktool.jar d -f zhugechengyu.apk -o MMTS d2j-dex2jar classes.dex 反编译重新打包
java -jar apktool.jar b MMTS 生成签名
keytool -genkey -alias android.keystore -keyalg RSA -validity 36500 -keystore android.keystore 重新签名
jarsigner -verbose -keystore android.keystore -storepass hzx123 -keypass hzx123 -signedjar zg_signed.apk zhugechengyu.apk android.keystore
from:https://blog.csdn.net/sxk874890728/article/details/80486223
【转】一步一步带你反编译apk,并教你修改smali和重新打包的更多相关文章
- Xamarin android如何反编译apk文件
Xamarin android 如何反编译 apk文件 这里推荐一款XamarinAndroid开发的小游戏,撸棍英雄,游戏很简单,的确的是有点大.等一下我们来翻翻译这个Xamarin Android ...
- 如何反编译APK?
1.概述 一些商业的app都包含很多精美的图片还有一些比较好的配置文件,以前某师兄就说过apk把后缀改为zip,然后解压一下就可以获得很多图片资源,但是这时候你打开一下解压出来的xml资源全是乱码.通 ...
- 反编译apk 修改 合成
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 反编译apk帮助文档 准备工具 dex2jar(dex转换jar工具),下载地址: ht ...
- [Android]反编译apk + eclipse中调试smali
从来没有想过反编译apk是来的如此方便,并且还可以修改后重新编译运行,这比在win下修改pe容易多了,感谢apktool和smali工具的作者提供这么好的工具. 跟踪apk一般的做法是在反编译的sma ...
- Mac环境下反编译apk
0,工具汇总 我们反编译apk主要使用下面三个工具 apktool:用于获取资源文件 dex2jar:获取源文件jar包 JD-GUI:反编译源文件jar包查看源码 找这些工具时折腾了我点时间.如今把 ...
- android: 使用android逆向助手反编译APK
第一步:下载逆向助手:(链接: https://pan.baidu.com/s/15jtoFDg9LWV80HREeyx5HA 提取码: k527 ) 第二步:将apk文件拷贝到逆向助手的apktoo ...
- 反编译apk
一.反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源 ...
- Atitit.反编译apk android源码以及防止反编译apk
Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...
- 反编译APK文件
有时源代码丢失了,这时如果有apk文件的话,是可以对apk文件反编译得到源文件的,本文介绍一下简单的反编译apk文件的过程. 1.工具 反编译apk需要的工具有两个:apk2java和apktool, ...
随机推荐
- 解决mysql 远程链接问题
grant all privileges on *.* to 'root'@'192.168.2.204' identified by '123456' with grant option;flush ...
- [深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心)
[深度应用]·Keras实现Self-Attention文本分类(机器如何读懂人心) 配合阅读: [深度概念]·Attention机制概念学习笔记 [TensorFlow深度学习深入]实战三·分别使用 ...
- 洛谷——P3387 【模板】缩点
P3387 [模板]缩点 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点, ...
- JSP高级功能-java之JSP学习第三天(非原创)
文章大纲 一.JSP 标准标签库(JSTL)二.JSP 连接数据库三.JSP XML 数据处理四.JSP JavaBean五.JSP 自定义标签六.JSP 表达式语言七.JSP 异常处理八.JSP 调 ...
- 性能调优培训 windbg --woodytu
http://www.cnblogs.com/woodytu/p/4675479.html http://www.cnblogs.com/fjicn/p/3405716.html http://www ...
- PHP利用lua实现Redis Sorted set的zPop操作
function zPop($key) { $script = <<<EOD local v = redis.call('zrange', KEYS[1], 0, 0); if v[ ...
- datasnap——动态注册服务类
datasnap——动态注册服务类 在DataSnap的应用程序时,我们首先需要注册的服务器类,以提供访问客户端应用程序的服务器方法.通常的做法是使用DSServerClass组件,但有些时候,我们要 ...
- JAVAWEB开发之JSP、EL、及会话技术(Cookie和Session)的使用详解
Servlet的缺点 开发人员要十分熟悉JAVA 不利于页面调试和维护(修改,重新编译) 很难利用网页设计工具进行页面设计(HTML内容导入到servlet中,用PrintWriter的对象进行输出) ...
- 【GLSL教程】(五)卡通着色 【转】
http://blog.csdn.net/racehorse/article/details/6641623 引言 卡通着色可能是最简单的非真实模式shader.它使用很少的颜色,通常是几种色调(to ...
- 最小二乘法及C语言实现
我们以最简单的一元线性模型来解释最小二乘法.什么是一元线性模型呢? 监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等),如果预测的变量是连续的,我们称其为回归.回归分析中,如 ...