type
status
date
slug
summary
tags
category
icon
password
前言
本次教程属于真机操作,电脑远程截图,部分不清晰请见谅!
开发工具
- 黄鸟
- Mt管理器 / Np管理器
提取
打开学习通 - > 笔记,新建一个笔记- > 打开摄像头- > 识文字



随便拍一个带文字的图片,识别,回到黄鸟会看到这样的请求

请求头除了中规中矩的熟知外,多了一个
CX-Signature

再看一眼请求体,哇,data这一坨应该是
base64

最后看响应体,就是ocr提取的文字内容

看着倒不难,我们来分析一下。
分析学习通
学习通本身自带梆梆加固企业版,我们不需要修复回填,脱壳不难(不会的去找我以前的脱壳帖)。
先去搜索一下:
CX-Signature
只有一个结果,我们打开看看
转Java看看
哦~接口!我们出来,复制一下,继续代码搜索,看看哪里使用过
可以看到新的搜索结果,

点最长的进去,可以看到,在这个e方法里面调用了这个Lqn/a;->a也就是上面说的接口
随后我们点导航,长按e方法,查看调用处

OK,有两个结果,我们依次点开看看(第一个没用)

第二个点进去转Java
回去抓包重新看看请求体。案情明了了!

请求体
就是
- data 是图片文件的
Base64
格式
- type 不是2就是1
- nonce 是随机的数字
secretId
固定是Inner_40731a6efece4c2e992c0d670222e6da
- timestamp 是当前的时间戳
对于Headers,Content-Type 就是
application/json; charset=utf-8
CX-Signature
看我们的e方法,第二个参数是
requestParams.getSignature()
我们调转getSignature
方法所在的类看看,转Java如下明显看到
RequestParams
里面的createSuccess
的第二个参数就是我们要的
回到上一个文件
发现RequestParams.createSuccess(g, c);
只有在这里才调用了createSuccess
方法,而createSuccess
方法的第二个参数是String c = k.c(g + "43e7a66431b14c8f856a8e889070c19b");
由一个固定字符串+g生成的,而g则是上面请求体而来了的 String g = j9.a.g(imageParams);
总和
OK,请求头请求体我们差不多都分析了一下
用Python实现一下看看,识别如下图片以及结果

总结
完整实现代码
- Author:PastKing
- URL:https://www.oaichat.ru/posts/515116c0
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!