安卓逆向入门与实践(下)

366 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情


安卓逆向入门与实践(下)

前言

我们上一节简单的介绍了安卓逆向的相关知识,以及分析的我们要修改的代码,这一节就来实际操作一下!

声明

本人所有逆向、破解及爬虫相关教程均是以纯技术的角度来探讨研究和学习,严禁使用教程中提到的技术去破解、滥用、伤害其他公司及个人的利益,以及将以下内容用于商业或者非法用途。

修改代码

工具下载

这里我们要用到另一个工具,也是比较常用的,叫做: apktool,可以解压和打包apk文件,下载地址及安装方法请按照文档:ibotpeaches.github.io/Apktool/ins…上面说的去做

下载好之后,我们打开终端,cd到工具的目录下面输入:.\apktool.bat d "D:\Android\apk\xx.apk"即可解压当前apk

修改smail文件

下载之后我们打开这个文件夹,我这里使用的是VS CODE 打开的,打开后界面如下

其中框选的地方就是反编译的smali代码,我们修改的也是这部分代码,然后我们就要找到即将要修改的文件位置,我们回到jadx里面,看文件的开头,就会定义这个文件的路径,如下图:

我们也可以直接使用jadx的smali视图,直接观看代码

然后在vode中搜索关键子,直接找到相关的文件,在搜索之后会找到这个文件

这个代码就是安卓的smali代码,smali代码的语法是很复杂,这里不做过多的展开,大家要知道的是前三行就是定义的@JavascriptInterface后面是逻辑代码,各种逻辑判断、调用函数、赋值变量等,但我们不需要知道那么多,我们要做的只是把一个固定的字符串赋值给一个变量然后返回即可,查查资料然后照葫芦画瓢之后,可以这么写:

.method public final getLatitude()Ljava/lang/String;
    .locals 2
    .annotation runtime Landroid/webkit/JavascriptInterface;
    .end annotation

    .line 1
    const-string v0, "30.630451"
    return-object v0
.end method

.method public final getLongitude()Ljava/lang/String;
    .locals 2
    .annotation runtime Landroid/webkit/JavascriptInterface;
    .end annotation

    const-string v0, "104.043425"
    return-object v0
.end method

这里我们只选择修改了经纬度的方法,在修改之后就可以打包了,打包依旧使用apktool

打包

打包APK

打包使用的是apktool b xxx命令,其中xxx是文件夹的路径,我们来打包执行一下试试:

执行完毕后会在xxx/dict目录下生成打包好的apk包,这时我们可以再次把apk拖进jadx中看看修改之后的结果:

可以看到已经修改成功了

签名

现在的这种状态的包是安装不上当,因为没有经过签名,所以我们接下来要对apk进行签名,还是会使用到一个工具:uber-apk-signer,这个工具会自动会apk进行v1、v2、v3签名

下载好后,我们使用如下命令对apk进行签名:

java -jar uber-apk-signer.jar -a xx.apk

不出意外的你会看到如下的结果:

然后就像安装测试即可

这回结束了

一次安卓逆向实践就此结束了,没有说的太细,但把整体的流程呈现给了大家,大家如果真的感兴趣的话是可以单独对某一个技术点单独学习的,比如smli的语法,apk包的具体结构、签名的流程等,毕竟只是入门嘛,祝大家学有所成!!!