一、工具介绍:

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和重新打包的更多相关文章

  1. Xamarin android如何反编译apk文件

    Xamarin android 如何反编译 apk文件 这里推荐一款XamarinAndroid开发的小游戏,撸棍英雄,游戏很简单,的确的是有点大.等一下我们来翻翻译这个Xamarin Android ...

  2. 如何反编译APK?

    1.概述 一些商业的app都包含很多精美的图片还有一些比较好的配置文件,以前某师兄就说过apk把后缀改为zip,然后解压一下就可以获得很多图片资源,但是这时候你打开一下解压出来的xml资源全是乱码.通 ...

  3. 反编译apk 修改 合成

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 反编译apk帮助文档 准备工具 dex2jar(dex转换jar工具),下载地址: ht ...

  4. [Android]反编译apk + eclipse中调试smali

    从来没有想过反编译apk是来的如此方便,并且还可以修改后重新编译运行,这比在win下修改pe容易多了,感谢apktool和smali工具的作者提供这么好的工具. 跟踪apk一般的做法是在反编译的sma ...

  5. Mac环境下反编译apk

    0,工具汇总 我们反编译apk主要使用下面三个工具 apktool:用于获取资源文件 dex2jar:获取源文件jar包 JD-GUI:反编译源文件jar包查看源码 找这些工具时折腾了我点时间.如今把 ...

  6. android: 使用android逆向助手反编译APK

    第一步:下载逆向助手:(链接: https://pan.baidu.com/s/15jtoFDg9LWV80HREeyx5HA 提取码: k527 ) 第二步:将apk文件拷贝到逆向助手的apktoo ...

  7. 反编译apk

    一.反编译Apk得到Java源代码 首先要下载两个工具:dex2jar和JD-GUI 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源 ...

  8. Atitit.反编译apk android源码以及防止反编译apk

    Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool  apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...

  9. 反编译APK文件

    有时源代码丢失了,这时如果有apk文件的话,是可以对apk文件反编译得到源文件的,本文介绍一下简单的反编译apk文件的过程. 1.工具 反编译apk需要的工具有两个:apk2java和apktool, ...

随机推荐

  1. android的布局-----RelativeLayout(相对布局)

    学习导图 注:父容器定位的属性值只能是Boolean ,兄弟组件定位的属性值只能是ID 典型案例(梅花) <?xml version="1.0" encoding=" ...

  2. 搞定vim的窗口操作

    最近在给学生演示数据结构代码时,发现用一般的方法总会有不方便,如果使用ide又觉得太浪费了,后来觉得用vim就够了,使用buffer总会需要页面调来跳出,学生看起来容易迷糊.所以就研究了下vim的窗口 ...

  3. Python 多核 多线程 调度

    参考: http://www.oschina.net/translate/pythons-hardest-problem https://news.ycombinator.com/item?id=58 ...

  4. ext4向后兼容代码

    ext.h: #define EXT4_GOOD_OLD_INODE_SIZE 128 ... #define EXT4_GOOD_OLD_REV 0 /* The good old (origina ...

  5. Python学习杂记_1_PyCharm使用的一些收获

    一. 界面及字体的调整 装好PyCharm默认的界面是白色的,编辑区域和Console区域的字体也比较小.我个人比较喜欢界面是黑底的,主要关注区域上的字体,大一些,看着清楚一些.调整办法是这样滴~! ...

  6. Akka之Actor生命周期

    我们首先来看一下官方给出的Actor的声明周期的图: 在上图中,Actor系统中的路径代表一个地方,其可能会被活着的Actor占据.最初路径都是空的.在调用actorOf()时,将会为指定的路径分配根 ...

  7. wireshark学习笔记

    之前写过一篇博客:用 Fiddler 来调试HTTP,HTTPS. 这篇文章介绍另一个好用的抓包工具wireshark, 用来获取网络数据封包,包括http,TCP,UDP,等网络协议包. 记得大学的 ...

  8. linux yum 安装软件

    概括了部分常用的yum命令包括: 自动搜索最快镜像插件:yum install yum-fastestmirror安装yum图形窗口插件:yum install yumex 1 安装yum insta ...

  9. OpenStack 安装教程(使用Fuel )

    OpenStack Fuel 安装教程 1介绍 OpenStack 是由 Rackspace 和 NASA 共同开发的云计算平台,帮助服务商和企业内部实现类似于 Amazon EC2 和 S3 的云基 ...

  10. 分层架构web容器的配置安全

    转自:http://hi.baidu.com/shineo__o/item/7520d54c24d234c71081da82 /ps:本以为这是一个偶然配置失误造成的问题,但最近几天无聊时测试发现,有 ...