android逆向工程反编译指南(详细教程)

您所在的位置:网站首页 安卓游戏逆向修改什么意思 android逆向工程反编译指南(详细教程)

android逆向工程反编译指南(详细教程)

2024-06-10 11:55| 来源: 网络整理| 查看: 265

要反编译一定要用到工具。 apktool是谷歌官方推出的反编译软件,只能说还能用。而且至今没有好用的IDE。android反编译就是通过apktool这个工具来实现的。其他的GUI环境,例如AndroidKiller都是给apktool套了一个壳而已。不过不得不提的是AndroidKiller这个软件还是非常的好用的,虽然已经不再更新,里面的提供的一些小工具还是非常的实用。

最简单反编译

使用AndroidKiller可以非常简单反编译apk(只是例子简单)。 首先我们用Android Studio创建一个HelloWorld,不做任何的事情,我们要实现的功能就是修改App的名字。 打开apk,AndroidKiller会自动帮我们反编译成下面的这些文件,底层使用的apktool.jar这个工具。App的名字定义在res/values/strings.xml文件里面,里面有一个name="app_name"的字段。把值修改为“被反编译了”。 然后点击左上角的编译,AndroidKiller会自动帮我们打包并加签名。如果成功的话,会在日志的最后一行告诉你生成的apk的位置。这个就是我们反编译的文件了。把这个文件安装到模拟器或者真机上就可以了。 修改Apk名字就这几个步骤,非常的简单。 这里我推荐是用windows的模拟器,不要用Android Studio自带的模拟器,因为不能安装第三方应用。安装应用的时候,不要用AndroidKiller提供的安装功能,因为windows老是找不到设备,非常的难用,还要用adb查找连接,后面会介绍。编译完成后,手动将apk拖到模拟器安装。

在这里插入图片描述 在这里插入图片描述

反编译步骤

第一步:反编译 通过apktool反编译apk,生成反编译代码。 第二步:修改想要修改的代码或者资源 这是最重要也是最难的地方,99%的工作量都在这。 第三步:重新打包 修改后的资源和代码重新打包 第四步:签名 重新打包后的apk是没有签名的,不能够安装,安装的话会卡住或者报错。AndroidKiller这个工具可以帮我们一键打包签名。手动也是可以的,后面会介绍。

注意,如果是android studio开发的debug apk实际上也是不能安装的,在android studio里面能安装是因为android studio帮我们做了一些事情,直接安装是不行的。都是需要签名的。

最传统最原始的反编译方式

或者说是最基础的反编译方式就是用apktool.jar这个工具来进行反编译。 通过下面的命令可以直接反编译一个apk。

java -jar apktool.jar d test.apk PS C:\Android\reverse> java -jar apktool.jar d test.apk I: Using Apktool 2.6.1 on test.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: C:\Users\Administrator\AppData\Local\apktool\framework\1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files...

编译完会生成下面的目录和文件。 在这里插入图片描述 和第一个例子一样,我们修改res/values/strings.xml文件里面,里面有一个name="app_name"的字段。把值修改为“被反编译了”。 然后通过下面的代码重新打包:

java -jar apktool.jar b test

默认情况下会在反编译目录下生成一个dist目录,里面就是重新打包的akp。 在这里插入图片描述 因为变到不同的目录还是有点不方便,我们可以指定重新打包的生成位置 下面的代码指定重新打包的位置为当前位置,这样方便调试。

java -jar apktool.jar b test -o release.apk

虽然我们重新打包了apk,但是这个apk是不能安装的,因为没有签名会安装失败。 下一步我们需要重新签名。签名有很多种方式,下面的这种比较简单,需要用到signapk.jar这个文件,testkey.x509.pem testkey.pk8这些文件都是signapk.jar附带的,直接百度就能搜索到这些文件。有了这些文件后,调用下面的代码就可以给apk签名了。 如果签名成功,就可以直接安装了。

java -jar signapk.jar testkey.x509.pem testkey.pk8 release.apk release-signed.apk 实战:修改TextView文本

如果TextView的文本不是写死在xml中的,而是通过setText()方法设置的,那么反编译的难度就不是一个级别的,这就需要懂安装的汇编代码。 源码如下。

public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView=findViewById(R.id.textview); textView.setText("This is a Text"); } }

反编译后汇编代码在smali目录下面,我们的目标是修改MainActivity里面的setText()方法。 在这里插入图片描述 打开MainActivity.smali,发现下面这些奇怪的代码(片段)。虽然看不太懂,不过没关系,是有关键字表格的,后面会提到,这里我们发现了一些我们非常熟悉的代码,比如findViewById,setText,这不就是我们想要的代码吗?

invoke-virtual {p0, v0}, Lcom/example/apktooldemo/MainActivity;->findViewById(I)Landroid/view/View; move-result-object v0 check-cast v0, Landroid/widget/TextView; iput-object v0, p0, Lcom/example/apktooldemo/MainActivity;->textView:Landroid/widget/TextView; .line 17 const-string v1, "This is a Text" invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

很明显,我们需要关系的是下面这三行代码,setText需要传入参数,v1参数就是文本内容,这时候我们就可以手动修改这些文本内容了。我们把 “This is a Text"改为"This is a Dog”

.line 17 const-string v1, "This is a Text" invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V

然后通过上面已经提过的打包,签名,就完成对setText文本的修改了。 大致步骤如下

第一步: java -jar apktool.jar d change_text.apk 第二步: 修改smali代码 第三步: java -jar apktool.jar b change_text -o change_text_b.apk 第四步:签名 java -jar signapk.jar testkey.x509.pem testkey.pk8 change_text_b.apk change_text_b_signed.apk

确实修改成功了! 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3