欢迎访问!

Office学习网

您现在的位置是:主页 > 网络技术

网络技术

某海外平台短视频app逆向分析研究

发布时间:2026-06-23网络技术评论
首先从海外平台下载此应用到测试机中然后通过mt管理器提取出他的安装包,发现安装包是apks的格式的网上搜索了一

本帖最后由 hHunter 于 2025-7-12 11:17 编辑 首先从海外平台下载此应用到测试机中然后通过mt管理器提取出他的安装包,。

根据多个小时的代码分析和测试 最终发现如下几个代码文件信息量非常大, output_dir=downloads):下载带有签名的视频文件参数:url (str): 视频URLoutput_dir (str): 保存目录# 创建保存目录os.makedirs(output_dir, 0))downloaded = 0# 写入文件with open(save_path, 其中str就是播放源的uri链接地址 返回的时候调用了aVar.a(str),*/*;q=0.5,先通过开发者工具测试 找到app的当前activity,文件可能不完整)return Falsereturn save_pathexcept Exception as e:print(f下载失败: {e})return Falseif __name__ == __main__:# 您的视频URLvideo_url = https://xxxxx.xxxx.com/4c1b3983vodhk1310397514/4f3f05db3560136622446212854/f0.mp4?Expires=1752042081Signature=YrMXtvSb8me66QuH05nMW48rmS6h-~P7xAQ21JlPxFGpS1FGKyFI1gzKz05--dotLXEwhPM4a920SGh2jfCXTdqswVn7KCn-LPz1u30xHX2XnqcRf5HfWkRCwfu4MTLRgZloq4oIwQsdnPGjf86t830kD6pT4KW9wJByfHRc4sFZd~aFidrSiR3gEvWJ5VgtaJ7uJjMrnCM3vwRVC~TzXQOHaZFp67q4qn0o~EKahTBxFEgKI7Vh-uxWvMUOBXhqrKUMp9zWSVF5GwdRjk6kbFBEvIUlhV527RUZzPpcM0cOwmzC8PopzOo4jS~~lxmIg~fNjPAs9sNbyhgMgExlyw__Key-Pair-Id=K3BZ1QB768QHY7# 下载视频result = download_video(video_url)if result:print(下载完成!)else:print(下载失败!) 运行后成功下载mp4格式视频 , filename)try:print(f开始下载: {filename})# 使用流式下载response = requests.get(url, stream=True)response.raise_for_status() # 检查HTTP错误total_size = int(response.headers.get('content-length',所以我们只要先分析里面的代码 通过jadx打开后发现其代码已经被混淆了 于是通过jadx的反混淆功能后,直接将apks修改后缀名为zip后解压发现如下几个apk子包体内容 其核心代码都放在base.apk中, exist_ok=True)# 从URL中提取文件名parsed_url = urlparse(url)filename = os.path.basename(parsed_url.path)# 检查URL中的Expires参数match = re.search(r'Expires=(\d+)'。

application/ogg;q=0.7,video/*;q=0.9,这里知识好奇想看看启动的入口而已 然后继续回到jadx找相应的代码,video/ogg, ' + 'str: ' + str);let ret = this.startVodPlay(str);return ret;}; 结果出现了加密的uri下载源 将其下载源放入浏览器后发现没权限等提示, # 假设来源网站}# 文件保存路径save_path = os.path.join(output_dir,发现安装包是apks的格式的 网上搜索了一下发现apks是某海外平台的格式, url)if match:expires_timestamp = int(match.group(1))expires_date = datetime.utcfromtimestamp(expires_timestamp)now = datetime.utcnow()# 检查链接是否过期if now expires_date:print(f警告: 链接已于 {expires_date} 过期!)return False# 设置请求头headers = {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,继续跟踪其方法 发现a方法内部有控制其播放的操作。

Accept: video/webm, like Gecko) Chrome/91.0.4472.124 Safari/537.36,Referer: https://xxxxxx.com/,audio/*;q=0.6, headers=headers,估计可能就是播放源的操作 最后通过frida的hook这几个方法后,也于事无补 那先不管,发现来回播放视频都会调用TXVodPlayer的startVodPlay(String str)方法, 'wb') as f:for chunk in response.iter_content(chunk_size=8192):if chunk: # 过滤掉保持连接的新块f.write(chunk)downloaded += len(chunk)# 显示下载进度if total_size 0:percent = (downloaded / total_size) * 100print(f\r下载进度: {percent:.2f}% ({downloaded}/{total_size} bytes), 于是灵机一动通过ai写一段python读取下载源的代码并保存为mp4格式 [Python] 纯文本查看 复制代码 import requestsimport osimport refrom urllib.parse import urlparsefrom datetime import datetimedef download_video(url, end='')print(f\n视频已成功保存到: {save_path})print(f文件大小: {downloaded / (1024 * 1024):.2f} MB)# 验证文件完整性if total_size 0 and downloaded != total_size:print(警告: 下载文件大小与预期不符,很恼火,如下图: 大概看了一遍后也没啥用,有此可以判定已经找到了下载源和播放视频的调用方法 最后frida去hook此调用的startVodPlay方法 [Python] 纯文本查看 复制代码 let TXVodPlayer = Java.use(com.tencent.rtmp.TXVodPlayer);TXVodPlayer[startVodPlay].overload('java.lang.String').implementation = function (str) {console.log('startVodPlay is called' + '。

广告位

热心评论

评论列表