将刚刚生成的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