Android apk反编译,smali文件修改,重新打包

 有些情况下我们想要了解别人的app怎么实现,总是会想到反编译一下,看下布局,看下代码实现。或者想改变一些关键位置的逻辑,但是初学者,根本就不知道怎么反编译,这篇是 一个样例。

一、工具介绍:

1.apktool:aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,apk重新打包;

2.dex2jar:该工具作用是将classes.dex文件,反编译出源码(如果apk未加固),反编译出文件,使用jd-gui工具进行查看;

3.apk 签名 ,将重新打包的apk进https://blog.csdn.net/q610098308/article/details/105138228

行签名,如果不签名,无法安装使用。

工具下载地址:http://download.csdn.net/detail/wxk105/9782180

使用场景:项目源码丢失,只有线上apk,并且没有加固,要求修改apk接口地址,并且重新打包,再发布。

 

首先下载好 test.apk

用ApkTool反编译android程序

用apktool反编译,命令如下:

apktool.bat d test.apk


生成test 目录 如下:

这就是反编译之后的Android程序了,可以看出,这个目录结构跟我们编写android代码时的目录结构非常相似,除了java代码是以smali的格式呈现之外,其他都基本是原来的代码。其实有很多人抄界面,到这一步就可以抄出完整的界面了。如manifest文件,里面的Activity定义都可以看的很清楚了。然后layout文件,各种res都可以看见了。

改代码重新编译也是要在这个文件夹中改smali文件的,所以smali的语法还是要熟悉一点。但是看代码逻辑我们不用去看晦涩难懂的smali语言,这就是下一步要做的工作。反编译出java代码。
用dex2jar反编译出java源代码

第一步做的工作先放在这,我们需要重新操作apk文件,其实apk文件就是一种压缩包,所以我们把后缀名改成rar,用解压缩工具打开。
 这里其他文件在apktool那一步已经反编译出来了,我们需要的仅仅是class文件,这是java代码编译后生成的文件,用dex2jar这个工具就可以反编译出原代码(java格式)了。把这个class文件解压出来,放在dex2jar的同级目录下。

dex2jar.bat   classes.dex

 

命令如上,成功之后就会在同级目录下生成jar文件了。

用gui查看代码

还记得一开始我们说过的工具gui,通过gui打开jar文件,就能看到java代码了

jd-gui 还有另存源码功能,在File 菜单中;通过查看源码可以了解到相关的功能逻辑;

破解apk,重新打包

破解这块不多说,根据 gui 找到相关的 类,相关函数,找对应 ApkTool反编译 smail 文件夹中对应 的smail 类,打开 一般是修改相关的跳转指令如:

"if-eqz vA, :cond_**"   如果vA等于0则跳转到:cond_**

if函数的java代码:

private boolean ifSense(){
        boolean tempFlag = ((3-2)==1)? true : false;
        if (tempFlag) {
            return true;
        }else{
            return false;
        }
    }

smail    if函数分析:

.method private ifSense()Z
    .locals 2

    .prologue
    .line 22
    const/4 v0, 0x1     // v0赋值为1

    .line 24
    .local v0, tempFlag:Z
    if-eqz v0, :cond_0            // 判断v0是否等于0, 不符合条件向下走, 符合条件执行cond_0分支

    .line 25
    const/4 v1, 0x1            // 符合条件分支

    .line 27
    :goto_0
    return v1

    :cond_0
    const/4 v1, 0x0            // cond_0分支

    goto :goto_0
.end method

###文字描述:如果符合if分支则程序往下走,最终return ; 而如果条件不符合则会走到 :cond_0分支 , 最终执行 goto :goto_0走回 :goto_0返回

  if-eqz v0, :cond_0  这里用来跳转

只要修改 v0 值 可以完成;

 const/4 v0, 0x1     // v0赋值为1 这样,就可以跳过,继续向下走,不跳转;

当然,如果想研究 需要学习 smail 语言;

改好后保存;

重新打包,签名;

下面,开始进行最重要的工作,修改代码,二次打包。其实这里你可以什么代码先都别改,只重新打包一次,看看程序是否能够正常运行,如果不能,估计初学者不要玩了;这里不展开;

使用命令:

apktool.bat b test

会在 test 目录 dist 目录下 生成 apk ; 此 apk 不能正常安装,因为没有签名,android studio 打出的包 debug 也会有debug 签名;如果没签名不能安装一般;

签名:

可参考:https://blog.csdn.net/q610098308/article/details/105138228

首先对齐

Zipalign -v 4 test.apk align.apk

成功后签名:

先自己创建一个签名文件 proxy.jks 执行下面命令

apksigner sign --ks  proxy.jks --ks-key-alias wwy --ks-pass pass:123456 --key-pass pass:123456 --out  dst.apk aligned.apk
 

到这里就完成了整个流程,安装 apk

adb install dst.apk

运行,一般成功就没有问题。

 

当然,如果代码量大,你也可以使用 Android studio 加载导出的源码,Android studio 安装插件 java2smail ,将修改好的 java 文件转成 smail,再对比修改 smail;

所有用到的工具下载

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
APK反编译是指将已经打包APK格式的应用程序文件重新还原为可读的源代码的过程。懒人精灵是一款功能强大、易于使用的辅助工具软件,它可以帮助用户自动完成一些重复繁琐的操作。下面将简要介绍如何将APK反编译为懒人精灵。 首先,我们需要一个APK反编译工具,比如常用的apktool工具。我们可以在github等开源社区上找到并下载这个工具。安装完成后,我们可以使用命令行界面进入工具的安装目录。 接着,将我们想要进行反编译APK文件拷贝到apktool的安装目录中,并使用命令行界面运行apktool命令进行反编译。具体命令如下: ``` apktool d your_apk_file.apk ``` 这样,APK文件就会被反编译为可读的资源文件smali文件smali文件是一种类似于Java字节码的可读的代码文件。我们可以通过修改这些smali文件来实现我们想要的功能。 在反编译完成后,我们就可以使用懒人精灵的编辑器来对反编译后的smali文件进行编辑。懒人精灵提供了一套简单而强大的操作界面,可以让我们直接修改smali文件,并实时查看修改后的效果。 在完成修改后,我们需要重新反编译后的文件重新打包APK格式。使用apktool工具的命令如下: ``` apktool b your_modified_files -o output_apk_file.apk ``` 使用上述命令即可将修改后的文件重新打包APK文件。 最后,将重新打包得到的APK文件安装到Android设备中,即可体验到已经修改过的、包含懒人精灵功能的应用程序。 需要注意的是,APK反编译修改他人应用程序可能涉及法律风险,请谨慎操作。本文仅提供技术知识,不鼓励任何非法行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值