【转】一步一步带你反编译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, ...
随机推荐
- Scrapy笔记:CrawSpider中rules中的使用
scrapy.spiders.crawl.CrawlSpider类的使用 这个类比较适用于对网站爬取批量网页,相比于Spider类,CrawlSpider主要使用规则(rules)来提取链接 rule ...
- Day 21 Object_oriented_programming_2
继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...
- C# List排序,附加使用Linq排序
首先先介绍一下平时最常用的几种排序方法. 第一种:实体类实现IComparable接口,而且必须实现CompareTo方法 实体类定义如下: class Info:IComparable { publ ...
- HDU 1269.迷宫城堡-Tarjan or 双向DFS
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- 深入Java数据类型
Java的数据类型分为两大类,一类是基本数据类型,还有一类就是引用数据类型. 1.基本数据类型 Java一共有8种基本数据类型,分别是byte,short,int,long,float,double, ...
- 51Nod 1019 逆序数(线段树)
题目链接:逆序数 模板题. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a) ...
- ATOM入坑必备插件
Atom作为Javascript/CSS/HTML等前端编辑器利器,其强大功能依靠各种插件,以下是笔者在入坑阶段,精挑细选总结出的必不可少的插件,熟悉运用这些插件,一定成吨提高生产效率.安装这些插件只 ...
- [AHOI2005] SHUFFLE 洗牌
1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 952 Solved: 630[Submit][St ...
- 【mob】Android短信验证+源码
在很多的应用当中,都涉及到了短信验证的功能,比如在注册或者找回密码的时候,那么我们如何通过第三方的平台来完成这个功能呢? 本面博文就实现短信验证,来做一个小的栗子. 第一步-下载开发包 第二步-将SD ...
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
实例化子类时,父类与子类中的静态代码块.实例代码块.静态变量.实例变量.构造函数的执行顺序是怎样的? 代码执行的优先级为: firest:静态部分 second:实例化过程 详细顺序为: 1.父类静态 ...