前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >OKAA相机破解(简单阅读代码+抓包)

OKAA相机破解(简单阅读代码+抓包)

作者头像
云深无际
发布2021-09-14 15:41:11
发布2021-09-14 15:41:11
68200
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

昨天在找东西的时候,找到了一个OKAA的应用,我一下就陷入回忆了。这个相机是我花了二百多买的。而且配件齐全。。。然后这个公司应该不在了,但是我想破解它一下子。

你看就是这个样子,被我改造了很多次了

正好看见有反编译的软件

直接编译了,我觉得也没有什么壳

这不白给

查一下看到的字符串

在这里

3种语言

第一步逆向出来的smail

这里是我们的自己的包,就是OKAA的私有包

我们对这个协议感兴趣的地方就这里,也是重点读的地方

我们这里就不按照直接寻找协议的方法看代码了,我们就面条式的读写代码了

这个代码就是MJPG格式的控制参数

一帧的大小,两个参数

至于下面的函数也是显而易见的,获得长宽和设置长宽

获得命令行参数

这个方法在这里,看名字是转换string

用法:StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。

Java不熟悉,土狗一样。而且编译型语言没有脚本语言那么富有表现力。

一直预览模式

视频预览模式

啊这,好奇怪

然后是枚举的类型

看这里的封装就好

Fragment

因为java不熟悉,这里需要补充一些Java的知识

我这里简单的翻译了一下

注意这里划横线的地方

是这里定义的类

这个类里面有很多的方法

看这个类的私有方法

LinkedList的本质是双向链表

LinkedList继承于AbstractSequentialList,并且实现了Dequeue接口。

LinkedList包含两个重要的成员:header 和 size。

  header是双向链表的表头,它是双向链表节点所对应的类Entry的实例。Entry中包含成员变量:previous, next, element。其中,previous是该节点的上一个节点,next是该节点的下一个节点,element是该节点所包含的值。

  size是双向链表中节点的个数。

其实读这个东西,不用多细致,知道就好

跳转到这个方法,

我把里面的变量分类了

第一类

第二类

第三类

文件函数,我做了一些处理

这些函数就是打印参数的

对文件句柄hash化

数据类型的转换

文件类型这个类是读取不出来

还是一些显式的函数参数打印

下面两个是在下载吗?文件列表清空

代码语言:javascript
代码运行次数:0
复制
private boolean isDownloading = false;
代码语言:javascript
代码运行次数:0
复制
private String ssid;

定时器退出

代码语言:javascript
代码运行次数:0
复制
private void sendOkMsg(int paramInt)
  {
    this.mainHandler.obtainMessage(paramInt).sendToTarget();
  }

发送OKAA的信息(这是啥啊。。。)

这里的代码就是开始响应触摸的事件

开启预览的模式

这是下面new的新实例,MJPEG的参数

开启流视频

这个视频流依赖的包

H.264的视频流参数,下面还跳转了一个方法

就是这个,至于具体是什么,看起来就是对函数做一些限定

得到视频的下一帧

代码语言:javascript
代码运行次数:0
复制
package com.icatch.wificam.customer.type;
public class ICatchFrameBuffer
{
  private byte[] buffer;
//   创建一个数组
  private int frameSize;
//   帧数
  private double presentationTime;
  
  public ICatchFrameBuffer() {}
  
  public ICatchFrameBuffer(int paramInt)
  {
    this.buffer = new byte[paramInt];
  }
  
  public ICatchFrameBuffer(byte[] paramArrayOfByte)
  {
    this.buffer = paramArrayOfByte;
  }
  
  public byte[] getBuffer()
  {
    return this.buffer;
  }
  
  public int getFrameSize()
  {
    return this.frameSize;
  }
  
  public double getPresentationTime()
  {
    return this.presentationTime;
  }
  
  public void setBuffer(byte[] paramArrayOfByte)
  {
    this.buffer = paramArrayOfByte;
  }
  
  public void setFrameSize(int paramInt)
  {
    this.frameSize = paramInt;
  }
  
  public void setPresentationTime(double paramDouble)
  {
    this.presentationTime = paramDouble;
  }
}

缓存帧

代码语言:javascript
代码运行次数:0
复制
private int sessionID;

检查连接

异常类

准备会话使能

然后开启一个线程来接收

开始判断是否准备好开始会话

这个地方是方法

这里线索就断了,我们继续看

在页面的左上有个电池的控件,这里是逻辑

如果一直往下看,其实会看到标准的安卓方法

我连接手机,可以看到一些关于相机wifi的参数

连接的样子

看左上角的图标

在电脑上面连接可以看的参数更多些

代码语言:javascript
代码运行次数:0
复制
https://github.com/videolan/vlc

这里使用VLC简单的连接一下

代码语言:javascript
代码运行次数:0
复制
https://www.videolan.org/vlc/index.html

下载页面

代码语言:javascript
代码运行次数:0
复制
rtsp://192.168.1.1/MJPG?W=720&H=400&Q=50&BR=5000000/track1;seq=58450;rtptime=2000000000

提取到的一些URL

代码语言:javascript
代码运行次数:0
复制
 rtsp://192.168.1.1/MJPG?W=720&H=400&Q=50&BR=5000000/ RTSP/1.0

还是URL

代码语言:javascript
代码运行次数:0
复制
RTSP/1.0 200 OK
CSeq: 2
Date: 2012/1/1
Content-Base: rtsp://192.168.1.1/MJPG?W=720&H=400&Q=50&BR=5000000/
Content-Type: application/sdp
Content-Length: 328

v=0
o=- 253157050 1 IN IP4 192.168.1.1
s=Motion JPEG. Streamed by iCatchTek.
i=MJPG
t=0 0
a=tool:iCatchTek
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:Motion JPEG. Streamed by iCatchTek.
a=x-qt-text-inf:MJPG
m=video 0 RTP/AVP 26
c=IN IP4 0.0.0.0
b=AS:12288
a=frmerate:50.7643966
a=control:track1

一个简单的应答操作

这个是主机发信息

从机回应,可以看到视频流的传输使用的是RTSP

主机继续问

从机继续问答

因为上面的VPN抓包,应该app是写东西了

视频流的数据不传输,这里使用wicap,直接在底层接口收数据

就像这个,就是视频流稳定下来以后抓到的数据

一肯定视频传输使用的是UDP,然后发的数据包稳定在1478字节

接着后面应该是主机和从机的ip和adress

就是这样

细节繁复,主要是java不熟悉,还有就是协议尤其是网络上面不熟悉,接下来补课。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档