Replies: 6 comments 9 replies
-
本次教程仅为技术测试,对相关网站无恶意行为。 |
Beta Was this translation helpful? Give feedback.
-
python环境建议miniconda保平安... |
Beta Was this translation helpful? Give feedback.
-
看完以后感觉打包有点复杂...... |
Beta Was this translation helpful? Give feedback.
-
这个版本的src能出800或者860吗,打包太复杂了,还是unidbg+springboot开个接口方便一点 |
Beta Was this translation helpful? Give feedback.
-
可以考虑用venv,选对应的nuitka就行了.\venv\Scripts\nuitka,说实话没必要打包成单文件,反正运行的时候还要先解压再运行,这样缺啥复制什么也方便 |
Beta Was this translation helpful? Give feedback.
-
大佬libysp.so怎么调用有没思路指点一下? |
Beta Was this translation helpful? Give feedback.
-
调用 so
目的:调用从
GetVideo
中提取的libCube.so
和libiqiyi.so
来计算vf
参数抓包
由于请求是 http 的,很容易就能抓到如下请求:
注意
vf
值,后续对比使用分析 apk
把 apk 拖入 jadx-gui-1.2.0-no-jre-win ,搜索关键字
/dash
直接点进去看代码:
逻辑很清晰,就是用
IQiYiUtils.getVf
计算vf
值,继续进入:可以看到用到了
libCube.so
和libiqiyi.so
,使用 7Zip 等工具从 apk 中提取这两个文件备用。使用 ExAndroidNativeEmu 调用
跑官方 demo
直接下载整个项目
安装依赖,并尝试运行
example_jni.py
,报错:根据官网的描述,keystone 需要 VC++ 运行库,那就安装一下:
https://www.microsoft.com/en-gb/download/details.aspx?id=40784
安装成功后再次运行,不报错了:
尝试调用
根据
example_jni.py
容易写出以下脚本:运行后报错:
意思是没有找到调用地址,应该是这个 so 里没有
JNI_OnLoad
的缘故。遂尝试其他调用方式。从
tests/test_native.py
中找到另一种方式,尝试直接调用 JNI 函数Java_com_wuxianlin_so_IQiYiUtils_getVf
,修改后的脚本如下:这次没报错,而且可以看到拿到了正确的结果:
Nuitka 打包 exe
为什么选择 Nuitka
ChatGPT 说:
安装 nuitka
打包之旅
在查看 nuitka 的帮助信息后,第一次尝试打包
第一次使用会下载编译器等等会比较慢,整体经过大概 5 分钟后,提示打包成功。可以在参数中指定的
dist
目录看到输出文件:尝试运行,报错:
根据提示的文件猜想应该是 unicorn 库的问题,在 Python 安装目录下(
%LOCALAPPDATA%\Programs\Python\Python39\Lib\site-packages
)找到这个文件:分析报错原因:
应该是缺了
unicorn.dll
这个文件,修改打包参数将该文件打入:再次运行,依旧报错:
根据上诉步骤定位问题:
不难确认是
capstone
库初始化报错,随即找到初始化位置:还是少一个
capstone.dll
,那就再打入,继续测试:再次运行,依旧报错:
根据上诉步骤定位问题后发现少
keystone.dll
,打入,继续测试:再次运行,还是报错:
秉承缺啥补啥的原则,打入
emu_cfg/default.json
,继续测试:但是这次有点不同,打入
emu_cfg/default.json
后依旧是一样的报错:根据报错信息定位:
看代码,作者只写了
config_path="emu_cfg/default.json"
。在 python 中,只写文件名的话读取时会默认以当前工作目录作为起始目录寻找文件。程序会在当前工作目录寻找
emu_cfg/default.json
文件,而我们的工作目录只有这些文件:虽然我们已经把
emu_cfg/default.json
打包了,但其实打包后的 exe 在运行时会将所需资源文件解压到%temp%
目录,而程序只会在当前工作目录寻找该文件,所以会找不到文件导致报错。此时有两种解决方案,要么把需要的文件放在 exe 旁边,要么就改代码,切换工作目录到 py 文件本身所在的目录(对应临时目录)。
对于我们这种场景,明显第二种方案会更好一些,不会产生不必要的临时文件。
修改
vf.py
,令其在加载模拟器前切换工作目录到自解压目录,并在结束初始化后切换回原始工作目录:再次打包测试:
又遇到了新的错误:
将
vfs
文件夹打入,再次测试:注意这里屏蔽了
vfs/data
文件夹里的内容,里面大都是 apk 之类,没有什么用。再次运行 exe,得到了更多报错:
观察可知是缺了一些被依赖的
.so
库,打入,再测试:再次运行 exe,这次运行一切正常~
不过打开
dist
文件夹会发现自动生成了vfs
文件夹只生成了一个
vfs/proc/self/maps
文件。正常情况应该继续完善代码,修正相对目录引发的一系列问题,我这里图省事就直接魔改了
androidemu/vfs/file_system.py
:这样就不会在 exe 所在文件夹生成
vfs
了。整理
删减无用代码后,整理如下:
调用代码
打包命令
运行结果
Beta Was this translation helpful? Give feedback.
All reactions