【转】一步一步带你反编译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

原文地址:https://www.cnblogs.com/xuan52rock/p/11028080.html

时间: 2024-11-29 07:15:14

【转】一步一步带你反编译apk,并教你修改smali和重新打包的相关文章

反编译APK获取代码&资源

本文说一下反编译APK. 通常有两种方式,第一种:将APK的后缀名改成zip,但是这种方法适用的情况很少,并且只能获取到一些图片而已 第二种(常用.标准):使用反编译软件,我们使用apktool.dex2jar.jd-gui. apktool:获取资源文件,提取图片资源,布局文件,还有一些xml的资源文件. dex2jar:将APK反编译成Java源码(将classes.dex转化为jar文件) jd-gui:查看经过dex2jar转换后的jar文件,即查看java文件 步骤:第一步:使用apk

反编译apk 修改 合成

韩梦飞沙  韩亚飞  [email protected]  yue31313  han_meng_fei_sha 反编译apk帮助文档 准备工具 dex2jar(dex转换jar工具),下载地址: http://dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip apktool.jar(获取apk资源文件.注册文件.so库等),下载地址:http://android-apktool.googlecode.com/files/apktool1.5.2

Mac环境下反编译apk

0,工具汇总 我们反编译apk主要使用以下三个工具 apktool:用于获取资源文件 dex2jar:获取源文件jar包 JD-GUI:反编译源文件jar包查看源代码 找这些工具时折腾了我点时间,现在把我找到的最终可用的版本都放百度云了.到下面链接下载: http://pan.baidu.com/s/1qWDmf2O 1,apktool获取资源文件 apktool其实不止一个文件,其中包含aapt,apktool,apktool.jar三个文件, 最终我们调用的命令行都是apktool的,另外两

centos反编译APK包

centos反编译APK包 实验目的 线上linux上传游戏包,PHP调用反编译命令解包 实验环境 centos6.4 Linux localhost.localdomain 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 2212:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux nginix1.8.0 php5.4 mysql5.5 操作步骤 1.rqm -ql | grep java 2.yum -y install ja

Android反编译apk(一)

为什么反编译: 做为个人开发,有时候看到精美的UI效果,好玩的功能,是不是有想可以参考学习的冲动.反编译android的apk,就是从apk中把资源(如图片,音乐,布局文件等等),源代码. 推荐阅读: 对于反编译apk,请先阅读文章<<反编译Android应用>>,<<Android APK反编译就这么简单 详解(附图)>>,好好看,看完自己下载几个apk试试,应该就对反编译apk心里有个底了. 我的笔记: (1).相关软件: dex2jar------将a

反编译APK的方法;

一.反编译工具: 百度云分享资料:http://pan.baidu.com/s/1pLqw6dd: 一共有三个工具分别为: 1,apktool: 用来获取apk中的布局资料图片文字等资料: 2.dex2jar: 将apk的二进制文件转化为jar文件: 3.jd-gui: 查看jar文件: 二.反编译过程: 1.将下载的压缩包分别解压: 分别将各个文件夹命名为apktool.dex2jar.jd-gui;<纯粹为了方便,也可以不改名> 2.将要编译的apk文件放到apktool文件夹下:同时打开

用apktool批量反编译apk文件

写在前面的话 这个是一个十分简单的脚本,非常简单.为什么要写,因为我是来骗分数的. 应用场景 主机上有一堆APK文件,是按照类别分好的,现在用apktool 反编译它们,然后在按照类别和apk的名字来存储它们 如图所示 实现 要使用这个脚本,你需要安装一下apktool.注释已经很详细了,希望可以有用.当然,这个用python实现的,你也可以写个shell脚本. #!/usr/bin/env python # coding=utf-8 ''' @author : chicho @date : 2

教你如何正确反编译apk

本篇博文简单得以图文形式,描述下反编译apk. 一听反编译,有木有高大上的赶脚,哈哈,其实真的不是很难嘻嘻 简单的说下反编译apk的流程: 我们一般想要反编译一个apk,无非就是想获得三样东西 图片资源 ,XML资源,和代码资源 一.图片资源获取. 这个最简单啦, 首先准备一个apk,嘿嘿就是你啦 这里是一个.apk后缀的文件,我们先把后缀改成,zip, 然后就成了这样 化身压缩文件啦撒,然后打开后你就能看到如下图 从压缩文件里解析出来的有很多目录撒,有大家熟悉的res目录,还有一个待会着重介绍

Android基础新手教程——1.10 反编译APK获代替码&amp;amp;资源

Android基础新手教程--1.10 反编译APK获代替码&资源 标签(空格分隔): Android基础新手教程 本节引言: "反编译Apk".看上去好像好像非常高端的样子,事实上不然,就是通过某些反编译软件.对我们的APK进行反编译,从而获取程序的源代码,图片,XML资源等文件.不知道你有没有这样做过,看到一个别人的一个APP界面做得非常精美,或者你看上别人的图片素材,简单点的,我们能够下载别人的APK.然后改下后缀名,改成xxx.zip.然后解压: 笔者随便解压了一个AP