未完成的逆向笔记
vue逆向笔记 frida/readme.md
sign逆向笔记 frida/sign_decrypt.md
待完成的自动发包笔记
我们目前什么也没做, 希望各位大佬能一起研究
dexdump | 使用frida-dexdump导出的dex |
frida | 用到的一些脚本和逆向笔记 |
har | 在虚拟机抓到的包 |
java_test | 一点java测试 |
-
windows:
安装mumu模拟器,根据mumu官方教程,依次安装magisk,lsposed,算法助手。安装小猿口算app,在算法助手里设置小猿口算app允许webview远程调试。
打开chrome或edge浏览器,分别打开chrome://inspect或者edge://inspect
打开小猿口算app,打开口算pk,回到浏览器的inspect页面,等待显示出pk链接调试按钮,点击调试。
开发者工具的网络页面选择保留日志。然后左上角刷新页面以确保获取到完整数据。每打开一个页面回到inspect页面等待获取到新的调试链接,在新的调试页面刷新页面。
查看视频
-
windows:
安装mumu模拟器, 根据mumu官方教程, 开启root去frida仓库下载
frida-server-版本号-android-x86_64.xz
并解压把解压后的frida-server推送到模拟器任意目录,比如通过
adb push
推送到/data/local
目录下连接到模拟器终端使用root启动frida-server,比如
adb shell, su, /data/local/frida-server-文件名
电脑安装frida和frida-tools
pip install frida-tools pip install frida
电脑命令行向小猿口算注入xx脚本
frida -U -n 小猿口算 -l .\hook_JsBridgeBean_sign.js
-
方法一(已可以修改答案):
使用frida/matchV2目录下的py脚本或ts脚本,他们可以拿到试题和答案 do_matchV2_model.py示例
-
方法二(已可以修改答案):
使用示例模板目录下的py脚本或ts脚本,他们可以拿到试题和答案
根据 taotao5 在 #9 提供的hook方向, 现写出:
- anay_loadRequestEncoder.js hook分析测试脚本
- gan_sign_model.js 生成sign
- gan_sign_model.py 提供python调用
获取pk试题及答案,提交答案主要在exercise.ts
文件里
生成请求参数位于request.ts
文件里
跟踪signUrlIfNeeded
方法,一路跟踪发现使用solar
让安卓程序生成sign再把url带参数传回来
- 使用
anay_webview.js
能看到传递和调用链
cd frida
frida -U -n 小猿口算 -l anay_webview.js
WebView loading URL: javascript:(window.requestConfig_callback_1728561502343_17 && window.requestConfig_callback_1728561502343_17("W251bGxd
"))
解码 Base64: [null]
调用链: java.lang.Exception
at android.webkit.WebView.loadUrl(Native Method)
at com.tencent.smtt.sdk.WebView.loadUrl(SourceFile:1)
at java.lang.reflect.Method.invoke(Native Method)
at org.lsposed.lspd.nativebridge.HookBridge.invokeOriginalMethod(Native Method)
at J.callback(Unknown Source:193)
at LSPHooker_.loadUrl(Unknown Source:11)
at com.fenbi.android.leo.webapp.JsBridgeBean.callback$leo_webview_release(SourceFile:73)
at com.fenbi.android.leo.webapp.secure.LeoSecureWebViewApi$g.run(SourceFile:11)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:8060)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1091)
WebView loading URL: javascript:(window.requestConfig_1728561502343_16 && window.requestConfig_1728561502343_16("W251bGwseyJ1c2VyQWdlbnQiOiJMZW8vMy45My4yIChYaWFvbWkyMjA2MTIyU0M7IEFuZHJvaWQgMTI7IFNjYWxlLzEuNDkpIiwid3JhcHBlZFVybCI6Ii9sZW8tZ2FtZS1way9hbmRyb2lkL21hdGgvcGsvaG9tZT9fcHJvZHVjdElkXHUwMDNkNjExXHUwMDI2cGxhdGZvcm1cdTAwM2RhbmRyb2lkMzJcdTAwMjZ2ZXJzaW9uXHUwMDNkMy45My4yXHUwMDI2dmVuZG9yXHUwMDNkeGlhb19taVx1MDAyNmF2XHUwMDNkNVx1MDAyNnNpZ25cdTAwM2RmMmQ2NjhjZTY3MDgxOWMwNWI3NjRhMjM3YzcyNjQ0Mlx1MDAyNmRldmljZUNhdGVnb3J5XHUwMDNkcGFkIn1d"))
解码 Base64: [null,{"userAgent":"Leo/3.93.2 (Xiaomi2206122SC; Android 12; Scale/1.49)","wrappedUrl":"/leo-game-pk/android/math/pk/home?_productId=611&platform\u003dandroid32&version\u003d3.93.2&vendor\u003dxiao_mi&av\u003d5&sign\u003df2d668ce670819c05b764a237c726442&deviceCategory\u003dpad"}]
调用链: java.lang.Exception
at android.webkit.WebView.loadUrl(Native Method)
at com.tencent.smtt.sdk.WebView.loadUrl(SourceFile:1)
at java.lang.reflect.Method.invoke(Native Method)
at org.lsposed.lspd.nativebridge.HookBridge.invokeOriginalMethod(Native Method)
at J.callback(Unknown Source:193)
at LSPHooker_.loadUrl(Unknown Source:11)
at com.yuanfudao.android.common.webview.base.JsBridgeBean$a.run(SourceFile:47)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:8060)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:571)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1091)
frida-dexdump -FU
frida-dexdump导出的dex,拖到jadx窗口逆向
已完成:
- 感谢 @x781078959 完成hook解密试题及答案,模拟滑动
- 感谢 @taotao5 在 #9 提供的hook sign方向
- 感谢 @ZQBCWG 在 cr4n5/XiaoYuanKouSuan#79 提供hook试题及答案新方向, 实现了查看修改试题及答案, 查看示例模板
- 感谢 @x781078959 指出异步调用导致js在获取到py传入的新题库前return导致无法修改试题及答案的bug
- 修改自 XiaoYuanKouSuan_Frida_hook 的修改提交答案数据包
待完成:
- @jqjhl 提供待逆向的加密算法 fun_001eefc.txt
推荐项目:
- 修改数据包欺骗服务器做题耗时: https://github.com/Hawcett/XiaoYuanKouSuan_Frida_hook
-
本仓库发布的
xyks
(下文均用本项目代替) 项目中涉及的任何脚本,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。 -
作者对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害.
-
请勿将本项目的任何内容用于商业或非法目的,否则后果自负。
-
以任何方式查看此项目的人或直接或间接使用本项目的任何脚本的使用者都应仔细阅读此声明。作者保留随时更改或补充此免责声明的权利。一旦使用并复制了任何相关脚本或本项目,则视为您已接受此免责声明。
-
您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
-
任何擅自改变计算机信息网络数据属于违法行为,本项目不提供成品可运行程序,仅做学习研究使用。
您使用或者复制了本仓库且本人制作的任何代码或项目,则视为已接受此声明,请仔细阅读。