最近下了一个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使用。但是试了下,编译时还是有很多报错,主要是资源文件的问题。有时间再看下

apk反编译、smali修改、回编译笔记的更多相关文章

  1. APK反编译之二:工具介绍

    前面一节我们说过,修改APK最终是通过修改smali来实现的,所以我们接下来介绍的工具就是如何把APK中的smali文件获取出来,当然同时也需要得到AndroidManifest.xml等文件.直接修 ...

  2. 转载:回编译APK出错:java.nio.char set.MalformedInputException: Input length = 1

    使用APKtool回编译APK,出现错误如下:    Exception in thread "main" org.yaml.snakeyaml.error.YAMLExcepti ...

  3. APK反编译之一:基础知识—APK、Dalvik字节码和smali文件

    refs: APK反编译之一:基础知识http://blog.csdn.net/lpohvbe/article/details/7981386 APK反编译之二:工具介绍http://blog.csd ...

  4. Android Studio 动态调试 apk 反编译出的 smali 代码

    在信安大赛的准备过程中,主要通过 Android Studio 动态调试 apk 反编译出来的 smali 代码的方式来对我们分析的执行流程进行验证.该技巧的主要流程在此记录.以下过程使用 Andro ...

  5. apk反编译(4)Smali代码注入

    转自 : http://blog.sina.com.cn/s/blog_5674d18801019i89.html 应用场景 Smali代码注入只能应对函数级别的移植,对于类级别的移植是无能为力的.具 ...

  6. 【转】安卓apk反编译、修改、重新打包、签名全过程

    首先明确,反编译别人apk是一件不厚道的事情.代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的.这也说明,代码混淆是非常重要的.本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么 ...

  7. [Android逆向]APK反编译与回编译

    一.先查壳,再反编译看验证首先打开.apk文件==>反编译apk(dex/配置文件/资源文件(apk反编译失败)>修改关键文件实现自己的目的>重新打包签名(无法重新打包)==> ...

  8. 安卓apk反编译、修改、重新打包、签名全过程

    首先明确,反编译别人apk是一件不厚道的事情.代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的.这也说明,代码混淆是非常重要的.本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么 ...

  9. 使用apktool.jar工具反编译和回编译Android APK 终端命令模式

    1.工具准备 工具可以网上搜索下载新版本,也可以从这里Download:https://github.com/FlymeOS/tools/blob/lollipop-5.1/reverses/apkt ...

随机推荐

  1. 转载:回编译APK出错:java.nio.char set.MalformedInputException: Input length = 1

    使用APKtool回编译APK,出现错误如下:    Exception in thread "main" org.yaml.snakeyaml.error.YAMLExcepti ...

  2. 【Linux程序设计】之进程间的通信

    这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的. 实验题目:Linux环境下的进程间通信 实验目的:熟悉进程通信中信号概念及信号处理:掌握进程间的管道通信编程 ...

  3. mysql case then使用

    表的创建CREATE TABLE `lee` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` char(20) DEFAULT NULL, `birthda ...

  4. Javascript小括号“()”的多义性

    摘要:本文主要介绍JavaScript中小括号有五种语义. Javascript中小括号有五种语义 语义1,函数声明时参数表 function func(arg1,arg2){ // ... } 语义 ...

  5. Android listview与adapter用法

    listview与adapter用法 博客分类: android   一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView ...

  6. Codeforces Round #251 (Div. 2) C. Devu and Partitioning of the Array

    注意p的边界情况,p为0,或者 p为k 奇数+偶数 = 奇数 奇数+奇数 = 偶数 #include <iostream> #include <vector> #include ...

  7. 关于GC垃圾回收的原理

    .NET Framework 并不需要担心垃圾回收.但我们还是需要了解它的原理.才能让我们写出更高效的应用程序. .Net Framework 有一个GC(垃圾回收器),它会自动的帮我们把不需要的数据 ...

  8. 【POJ】2420 A Star not a Tree?

    http://poj.org/problem?id=2420 题意:给n个点,求一个点使得到这个n个点的距离和最短,输出这个最短距离(n<=100) #include <cstdio> ...

  9. Linux 日常维护命令

    1   防火墙配置 1)重启后生效  开启: chkconfig iptables on  关闭: chkconfig iptables off 或者 /sbin/chkconfig --level  ...

  10. mysql5.7.11修改root默认密码

    知道 MySQL 出了5.7了,并且网上说性能提高了一两倍,于是在虚拟机上安装了个 CentOS 7,在上面安装 MySQL 5.7 我使用的是 yum安装方式,要求虚拟机能够上网,因为它会在线下载安 ...