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

380 阅读4分钟

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


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

前言

不知大家还记不记得之前的某个打卡软件,今天咱们就这个做示例,但大家走进安卓逆向的大门!

声明

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

安卓逆向

这里的安卓泛指运行在Android平台的以apk类型文件安装的程序,我们所逆向的程序也是这个apk程序。所谓的apk文件,其实际上就是我们常见的zip压缩包,里面包含了像资源、代码、配置文件、使用的库、描述文件等,

如上图,就是我们的目标apk,以压缩包的方法打卡后的样子,其中classes.dexclassesN.dex文件就是代码编译的文件,我们需要做的就是,分析这里面的代码并且去修改它

分析代码

这里要使用到一个工具,叫做jadx,是一个分析安卓apk应用的软件,下载地址:github.com/skylot/jadx…,大家可以下载jadx-gui-x.x.x-with-jre-win.zip内置带有jre的版本,下载完成后打开软件如下图所示:

选择我们的目标apk,打开后的界面是这样的:

我们目标是要分析和修改关于wifi和定位相关的代码,这个软件本身是提供全局搜索的,但我们要知道的是该去搜什么关键字才可以。但大家既不是这个软件的开发人员,也不是专业的Android开发人员,是不知道去该去搜啥的,但我们可以以一个开发人员的角度去思考,比如想要获取到定位该怎么写,想要获取到所连接wifi的mac地址应该怎么去做。

我们可以先去查询一下使用什么方法去弄,比如查询:android 获取wifi mac地址, 看了一篇文章后可以得到的结果是都会用到一个叫做WifiManager的东西,那我们就拿这个去搜素一下看看:

点击搜索的图标可以打开搜索的界面,然后输入搜索的关键字,下面的搜索选择可以都勾选上,会有一个进度条,跑完后会在下面列出所有包含这个关键字的代码,左边是带包名的路径,右边的是相关的代码

这里尤其要注意左边的包名,在安卓开发里会使用到很多的库,也会用到相关类或代码,也可以把这些直接过滤掉的,比如上图中的com.baidu.xxx之类的就可以直接跳过,我们往下翻,仔细的找找:

会看到这几个是比较像的,可以点进去看看

根据名字可以看到这里有几个方法分别是:获取经度、获取纬度、获取mac地址,而且上面都带有@JavascriptInterface的标志,可以推测出这几个方法就是Android提供给webview的方法,来获取信息,我们修改的话,就直接把这几个目标方法的返回值修改成固定的就可以了

但如果你想要直接就编辑的话,会发现无法编辑的,这里就要简单的说下安卓代码的编译过程:java --> smail --> dex,我们在上面压缩里面看到的就是dex文件,反着来就是把dex文件转为smail文件,返回修改后重新生成即可

不算结束的结束

这节先说一下分析代码的过程,咱们下一句再来说说如果修改和打包。这个分析的过程肯定不是像我上面写出的那样简单,毕竟我是站在完成后的角度来写的,我说这些的意思就是要变通,尽量找到那个点,大家自行体会,咱们下节继续