【转】一步一步带你反编译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, ...
随机推荐
- 昨天晚上写了个 Python 程序,下载了一个图片网站 5000 来张图片
以前写的,目前已经失效了.. ------------------------------------------------------------------------------------- ...
- Python学习杂记_7_文件操作
文件操作 Python3用open()方法打开文件并返回文件句柄,有了文件句柄就可以对文件进行各种操作了. 打开文件: open(“文件名” , 打开方式) 如: f=open( ...
- 多线程设计模式 : Master-Worker模式
Master-Worker是常用的并行计算模式.它的核心思想是系统由两类进程协作工作:Master进程和Worker进程.Master负责接收和分配任务,Worker负责处理子任务.当各个Worker ...
- 寒假week1---二分查找(二分枚举)
寒假week1---二分查找(二分枚举)1.适用条件:要查找(枚举)的集合有序 && 查找(枚举)的“条件”具有单调性2.什么是“条件”:example: 1.给定一个有序数组,从中查 ...
- JSP介绍与语法-java之JSP学习第一天(非原创)
文章大纲 一.JSP 简介二.JSP 生命周期三.JSP 语法四.学习资料下载五.参考文章 一.JSP 简介 1. 什么是Java Server Pages? JSP全称Java Server P ...
- div+css经典三行两列布局
写在前面 在面试的时候遇到这样一个笔试题,使用div+css布局一个三行两列的页面.这里主要考察的是css中postion的具体用法.详细信息可参考我这篇文章: [HTML/CSS]说说positio ...
- Android 控件架构与自定义控件详解
架构: PhoneWindow 将一个 DecorView 设置为整个应用窗口的根 View,这里面所有 View 的监听事件,都通过 WindowManagerService 来接收.DecorVi ...
- 【hibernate】主键生成策略使用UUID报出如下警告:org.hibernate.id.UUIDHexGenerator - HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values;
主键生成策略使用UUID报出如警告如下: 控制台- 2017-11-24 18:40:14 [restartedMain] WARN org.hibernate.id.UUIDHexGenerator ...
- Importance sampling
用蒙特卡洛求解积分时 (Monte Carlo 随机采样对目标积分函数做近似) importance sampling func p(x) p(x)值大的地方,Monte Carlo多采几次 值小的地 ...
- Usage of API documented as @since1.6+
Usage of API documented as @since1.6+ File ->Project Structure->Project Settings -> Modules ...