博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
apk反编译、smali修改、回编译笔记
阅读量:4678 次
发布时间:2019-06-09

本文共 1848 字,大约阅读时间需要 6 分钟。

最近下了一个apk程序,但是一启动会弹出一个流氓广告。这个广告不是原厂商加的,而是有人在原有apk程序的基础上,加了一个壳,让apk先启动他加的广告,再启动原来的程序,很恶心。于是想去掉它。

试了几个apk反编译工具,最终感觉apkdb这个工具最方便。

这个软件集成了资源管理器右键菜单。而且集成了一系列工具,包括apk提取软件apktool、dex转jar的软件dex2jar,以及将jar转成java代码的软件jd-gui.exe。

 

1、首先下载apkdb 2.0并安装:http://idoog.me/

2、安装好之后,在电脑apk文件上右键会有“使用apkdb反编译”工具。按提示反编译,可以得到apk的所有资源和源代码。不过源代码是smali的,不是java。试了转smali为java的class文件,但修改过的class文件没找到好办法再回转为smali,于是放弃了改java代码。

3、于是尝试直接改smali代码。根据jd-gui.exe中的java代码,跟smali文件中的代码对比,其实不是很难看懂。我只想跳过广告,于是直接在它广告的方法一开始就return了,如下红色是我加的一行代码。

.method private Ads()V    return-void    .locals 13    .prologue    const/16 v12, 0xe ...省略...

对应java代码就是:

private void Ads() {        return;        ...省略...

另外还改了一处(红色部分是我加的,抄了下面的绿色代码):

.method private init()V    invoke-direct {p0}, Lcom/example/assetexam/Welcome;->Welcome()V    return-void    .locals 1    .prologue    .line 67    invoke-virtual {p0}, Lcom/example/assetexam/Welcome;->getPackageManager()Landroid/content/pm/PackageManager;    move-result-object v0    invoke-virtual {p0, v0}, Lcom/example/assetexam/Welcome;->isAppInstall(Landroid/content/pm/PackageManager;)Z    move-result v0    if-eqz v0, :cond_0    .line 68    invoke-direct {p0}, Lcom/example/assetexam/Welcome;->Welcome()V     ...省略...

对应java代码是:

private void init() {        Welcome();retrun;        if(isAppInstall(getPackageManager())) {            Welcome();            return;        }        Ads();    }

改好的smali文件直接在原文件保存。

 

4、然后再整个反编译出来的文件夹(就是“apk文件名-src”的文件夹)上点右键“使用apkdb回编译”,就可以将修改过的smali代码再编译为apk文件!真是太方便了。途中有点小问题,一开始在apk提示签名时,使用原有签名,结果apk安装不了,后来直接重新签名就可以了。另外,不要用系统记事本改,会报错,可以用Notepad++去改smali文件,估计是BOM问题。

 

apk装好之后,终于没有广告了~

 

 

 

2017.3续:

今天试了下adpdb反编译报错,然后下了个新版本,就可以反编译了。

然后又从网上看到一个比较方便的工具 - jadx:

https://github.com/skylot/jadx/releases

可以直接将apk反编译为gradle项目,共android studio使用。但是试了下,编译时还是有很多报错,主要是资源文件的问题。有时间再看下

 

转载于:https://www.cnblogs.com/hz-blog/p/4945775.html

你可能感兴趣的文章
递归 换零钱问题——由打靶子问题引申
查看>>
Python-函数基础
查看>>
Extensible Messaging and Presence Protocol (XMPP) 简介
查看>>
Farm Irrigation
查看>>
windows平板的开发和选型
查看>>
无平方因子的数(数论初步) By ACReaper
查看>>
C语言截取字符串
查看>>
如何查自己的账单
查看>>
JAVA8学习笔记(二)----三个预定义接口
查看>>
JDBC连接各种数据库的字符串
查看>>
构建之法阅读笔记06
查看>>
CentOS minimal新装配置笔记
查看>>
压缩映象原理的一个应用
查看>>
Aurora — 一个在 MSOffice 内输入 LaTeX 公式的很好用插件
查看>>
关于sql优化的一个小总结
查看>>
Java语言中的正则表达式
查看>>
Java环境变量设置
查看>>
【JBPM4】判断节点decision 方法3 handler
查看>>
filter 过滤器(监听)
查看>>
Linux进程间通信---共享内存
查看>>