Android逆向分析实例(android逆向视频教程)

Android逆向分析实例
将刚刚生成FiddlerRoot.cer文件导入模拟器并安装(拷到模拟器的共享文件夹中);
至此抓包环境全部配置完毕;
3. 抓包
打开Fiddler,并在模拟器

将刚刚生成的FiddlerRoot.cer文件导入并安装到模拟器中(复制到模拟器的共享文件夹中)。

至此,您的数据包捕获环境已完全配置。

3. 抓包

打开Fiddler并在模拟器中启动米读快捷版。

在Fiddler中按“Ctrl + F”,搜索.zip后缀的文件(热更新时应用程序客户端向服务器发出请求,服务器返回json格式的消息(json表示URL)。要下载的包的版本)以及其他供客户端下载的信息);

双击可查看服务器响应消息。

json数据格式:

**{

‘代码’: 0,

\’消息\’: \’成功\’,

‘显示错误’: 0,

\’当前时间\’: 1625142319,

\’数据\’: {

\’数据\’: [

{

\’西德\’: 499,

\’pkgId\’: 505,

\’url\’: \’https://apk.1sapp.com/miduspeed\\_sep\\_hotfix\\_1.55.0.0607.1200\\_002\\_531.zip\’,

‘长度’: 2730,

\’名称\’: \’ReadvoiceFix66\’,

\’版本\’: \’66\’,

\’md5\’: \’ec8ab28b08261fe73f7c08d0f8c7cae0\’

}

]

}

}**

在浏览器中输入URL:https://apk.1sapp.com/miduspeed_sep_hotfix_1.55.0.0607.1200_002_531.zip

将下载名为“miduspeed_sep_hotfix_1.55.0.0607.1200_002_531.zip”的压缩包。该压缩包中包含应用补丁或热更新所需的class.dex文件。

压缩包文件内容:

解压后,使用jadx打开classes.dex文件(下面我们将检查MethodPatchEntry类是否加载到内存中)。

检查dex文件是否加载。这个可以通过dex文件中的类是否加载到内存来判断。 (要确定某个类是否已加载,请在该类的构造函数中插入一条日志记录语句,为后续操作做好准备。)

4. Objection查看内存中加载的类

安装对象。

**反对$ pip 安装的争论**

附件:有关使用对象的信息,请参阅Frida Advanced:内存漫游、Hook Anywhere 和数据包捕获。

这里可以使用Objection来检查某个特定的类是否加载到内存中(也可以使用frida,但是frida需要编写脚本并加载很多类),这比较麻烦,因为如果你想看到所有的输出,你必须输出它。到一个文件)。

首先,在模拟器中打开frida。有关配置frida 的信息,请参阅以下文章:配置Frida 框架。

创建一个新的命令行窗口。

$ frida-ps -U #显示所有进程

争议插入流程:

**$ 异议-g com.lechuan.mdwz 探索**

检查MethodPatchEntry 类是否已加载。

**$ android钩子搜索类MethodPatchEntry**

可以看到这个类在内存中被搜索到了。

5. 修改classes.dex文件

首先使用apktool将classes.dex文件反编译成smali文件,然后修改MethodPatchEntry.smali文件添加日志记录语句(肯定会调用构造函数,但可能不会调用其他函数,所以尝试在构造函数)

修改后重新打包成classes.dex文件,将dex文件和MANIFEST.MF文件压缩,命名为“miduspeed_sep_hotfix_1.55.0.0607.1200_002_531-evil.zip”。

6. 将修改后的.zip文件提供给app执行

编写midu-server.py

**Flask导入到Flask,jsonify

导入时间

应用程序=Flask(\\_\\_名称\\_\\_)

@app.route(\’/app/getHotFixV2/20\’)

#GET https://127.0.0.1/app/getHotFixV2/20 请求执行下面的request\\_server() 函数(但是客户端发送的请求是GET https://api-platform.1sapp.com/app/getHotFixV2/20 ,怎么可以当客户端发送此请求时,我运行以下函数?这需要使用下面的主机),并在响应返回中将JSON 数据发送到应用程序。首先,将刚刚修改的.zip文件上传到自己的服务器,并将URL地址更改为自己服务器上的.zip文件地址。接下来,更改文件长度(字节大小)和md5值,最后添加本地文件。证书

默认请求\\_server():

响应={

‘代码’: 0,

\’消息\’: \’成功\’,

‘显示错误’: 0,

\’当前时间\’: 1625035561,

\’数据\’: {

\’数据\’: [

{**

**\’sid\’: 499,

\’pkgId\’: 505,

\’url\’: \’http://download.lxh2cwl.xyz/miduspeed\\_sep\\_hotfix\\_1.55.0.0607.1200\\_002\\_531-evil.zip\’,

‘长度’: 2797,

\’名称\’: \’ReadvoiceFix66\’,

\’版本\’: \’66\’,

\’md5\’:\’11b5662257d99005054c05f5f242e826\’

}

]

}

}

返回jsonify(响应)

应用程序.run(\’0.0.0.0\’,

调试=真,

端口=443,

ssl\\_context=(\’localhost/cert.pem\’, \’localhost/key.pem\’))** **#本地证书**

要生成本地证书,请参阅生成cert.pem 和key.pem 文件一文。如果您不想自己生成,也可以从localhost.zip 下载。

了解flask可以跳转这里:https://www.w3cschool.cn/flask/flask_routing.html

生成文件的md5值:MD5.py

**进口排骨

导入操作系统

def get\\_md5(文件\\_path1):

f=打开(文件\\_路径,\’rb\’)

md5\\_obj=hashlib.md5()

而True:

d=f.read(8096)

否则d:

休息

md5\\_obj.update(d)

哈希\\_code=md5\\_obj.hexdigest()

f.close()

md5=str(hash\\_code).lower()

返回MD5

如果\\_\\_name\\_\\_==\’\\_\\_main\\_\\_\’:

文件\\_path=r\’C:\\Users\\lxh\\Desktop\\miduspeed\\miduspeed\\_sep\\_hotfix\\_1.55.0.0607.1200\\_002\\_531-evil.zip\’

#更改文件路径

md5=get\\_md5(文件\\_路径)

打印(MD5)**

进入C:\\Windows\\System32\\drivers\\etc,修改本地hosts文件。

这里我们需要将本地IP绑定到米渡极速版服务器域名api-platform.1sapp.com。因此,当应用程序客户端发出GET https://api-platform.1sapp.com/app/getHotFixV2/20 请求时,它相当于GET https://127.0 .0.1/app/getHotFixV2/20。然后将修改后的json数据返回到本地,客户端根据json中的URL地址从自己的服务器下载修改后的.zip压缩包。

扩展:

Hosts文件的作用是建立一个常用的URL域名与其对应的IP地址之间关联的“数据库”。当用户在浏览器中输入需要登录的URL 时,系统会首先自动搜索该URL。一旦找到地址,系统会立即打开相应的网页。如果没有找到,则将URL发送到DNS域名解析服务器进行IP地址解析。

域名与IP的关系:

要浏览网页,您需要在整个互联网上搜索某人的计算机。接下来,您需要输入对方的IP地址。例如,输入此IP 地址[14.215.177.39]。您可以检查您的浏览器是否打开了百度首页。您可以根据您的IP地址访问百度。您还可以输入https://www.baidu.com 访问百度。这背后的原理是什么?在早期,浏览互联网是非常繁琐的,因为为了访问对方的网站,你必须知道他们的IP地址并将IP地址输入到你的浏览器中。使用英文字符串,例如网站的域名,因为IP地址是四个数字的集合,记住IP地址就像记住陌生人的手机号码一样困难。网站域名为https://www.baidu.com,百度IP地址为14.215.177.39。您网站的域名易于记忆并且可以自定义。但问题来了。您输入的是域名。计算机如何将其转换为IP地址?例如,如果您输入https://www.baidu.com,为什么您的计算机知道您的IP是14.215.177.39?这是位于C:\\windows\\system32\\drivers\\etc文件夹中的hosts文件,记录了每个域名对应的IP地址。说到IP,我们在电话本中找到对应的域名,并将其转换为IP地址。

DNS解析服务器:

但这也有其问题。正如您无法知道世界上每个人的电话号码一样,Hosts 文件也是有限的。既然你不可能拥有世界上每个人的电话号码,那么你可以将收集电话号码的任务交给专门从事这项工作的人,而当每个人都想听到他们的电话号码时,他们可以简单地转到:和他核对一下。这是一个DNS 服务器。 DNS服务器配置有完整的域名和IP。当您输入网站字符串时,不会直接访问该网站字符串;而是首先将其发送到DNS 服务器。 DNS 服务器帮助您访问网站。网站字符串被转换为IP 地址并返回到您的计算机。

什么是DNS 劫持?

DNS服务器显示网站A有IP A,网站B有IP B。换句话说,如果我输入网站A的域名,但它返回B的IP,我想访问其他网站吗?DNS服务器可以做到这一点,所以我不希望用户访问我的网站比如你想看电影,就进入爱奇艺官网。然后我将充当DNS服务器并返回优酷的IP。最终,您将进入爱奇艺官方网站。我访问优酷IP,进入优酷网站。

7. 最终步

这里有一个问题。 MiLiao Express 应用程序在首次启动时仅下载.zip 文件(这已经困扰我很长时间),因此您必须先重新安装该应用程序。

创建一个新的cmd并准备日志输出。

写在最后

最后,我想重申一下,学习不是攀登陡峭的山峰,而是滴水穿石,日积月累。持续学习变得越来越困难,尤其是当你进入职场后。就像在茫茫大海上独自划桨,稍有放松警惕,就有可能被大浪卷走。但对于我们程序员来说,学习是生存的基础,是在激烈的市场竞争中立于不败之地的关键。如果我们停止学习,我们就像逆水行舟;如果我们不前进,我们最终会被时间的洪流淘汰。因此,不断获取新知识不仅提高了自己,也是对自己的一次有价值的投资。让我们不断完善自我,与时俱进,谱写辉煌篇章。

如果您想要完整版PDF学习资源,请私信我们。

以上#Android逆向分析示例相关内容摘自网络,仅供大家参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91246.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月21日 下午6:50
下一篇 2024年6月21日 下午6:51

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注