记一次失败的VxWorks5.x iot设备漏挖经历

前言

家里有两台不用的路由器,型号分别是水星的MW313R和MW325R,曾经只会php之流的web安全、一些二进制安全知识的时候,想试下能不能对这些路由器做点什么,但感觉这个路由器好像还挺安全的样子,实际上最近几个月才知道,这是c写的后端,而且没有连数据库,常规的方法当然打不通

明明看起来这个系列路由器后台页面写的比较简陋,在网上却丝毫没有关于它们的漏洞,

一个都没有?这让我更加好奇了,所以经过之前的学习,最近终于鼓起勇气尝试尽可能地按已有的水平去分析一下

最后还是穷尽了此时自己知道的办法,从vxwork固件到后端再到js,实在尽力了,只是知道可以绕过次数限制进行爆破,目前其它的东西还没挖出来,谨以此文复盘一下,之后还会回来再试试的

MW325R和MW313R,这些MW3XXR系列的机器,使用着同一套源自于MW300R的系统,下文主要采用MW313R进行研究

固件提取+解包

网络下载

驱动天空www.drvsky.com有固件可以直接下载到,本来,无需焊电路板(可后面还是焊了,等下解释为什么)

解包

刚开始看-Me出来的文件结果,以为加密还是怎么了,因此学习了一阵子镜像是怎么解密并解压到内存,并实际分析以后,才恍然大悟,这不是加密,binwalk对vxworks这一种RTOS的解包就是这样的

可以看到,vxworks后面有好多个LZMA的压缩文件,会直接使用内存的位置来命名文件,binwalk无法去恢复其文件系统的结构和文件名(即使这里面有个jffs2文件系统)。不过这没关系,实际上有一个最大的文件,叫做F114,网上的教程一般就是取出最大的那个二进制文件去分析,这部分一般包含着主要逻辑

全是没有文件名的文件

F114是主要的服务端逻辑所在,而3EA0则是uimage,这两个都比较值得探究一下

UART串口调试

为什么提完固件还去焊uart呢,因为当时发现很多函数没有符号所以想去找点信息,也没有内存分布的知识(vxworks固件加载到内存的过程后面发现确实很奇怪)

总之就是想看看能不能到shell,直接看文件系统得了

首先需要拆开设备,有些设备没有螺丝只能小心的沿边找到缝隙掰开,准备好电表、电焊笔,UART转USB板子,它长这样:

然后最好要有那种塑料板,以防锡掉到桌子上了,不过这里我直接使用路由器自己的塑料外壳,准备不周,但也不是不能用,哈哈

对UART串口每个口的判别

黄色箭头指向的就是串口了

首先准备好电表,黑色的是接COM处,红色笔只要接电压档就好,可以用来测电阻的

(推荐插好电源以后直接操作插座的开关,而不是去插拔设备电源来做断电操作)

注意到有个小三角,暂时不知道那是什么,问了一下做电子信息产业的表哥,他说这个代表pin 1

断电测连通性(蜂鸣档位)

首先不通电,把万用表转到蜂鸣档,然后尝试去测4个口对某个焊点(有的大块金属部件也可以)的连通性,在这里第二个口跟其他的点是有连通性的,说明这是GND

第一个口滴了一声就没了,这就是VCC

记住那个焊点(or部件)的位置,等下还要用

通电测电势差(用20V测,提醒一下这个初中的知识)

然后通电,测量焊点(or部件)跟四个口的电势差:

VCC:3.3V固定

GND:0V

RX:0V(少数案例是3.3V)

TX:于0~3.3V之间变化,等待一段时间(0~10s)就会有了

可以直接推断四个口是什么,并且,顺便得到一个清晰的表格以供下次继续使用:

再度断电操作

这样看来,小三角指向的1口是VCC,下次可以参考

焊接

这里需要买一些杜邦线的公线,先别管那么多,焊上去先

最好先让焊笔包上一层薄薄的锡,然后再伸笔加热焊点周围,最后再滴锡上去,小心假焊情况,最好多焊久点看看锡液体能不能继续漏进去

还有就是第一次使用电焊笔可能会冒烟,这是正常现象,云母第一次遇到高温的现象

请无视下面滴出来的锡,哈哈

Serial串口连接

刚开始由于之前逆向固件得到了一些字符串,比如bootargs的波特率为115200,

导致这里陷入了小的困局,怎么尝试都是乱码

不过,后面一个接一个地尝试,最后得到是57600的波特率可以连上调试串口,真是非常让人意想不到的波特率

进入U-Boot成功,可惜是个阉割shell,不过有mem的dump功能,也有tftp传出指定内存区域的功能,甚至还能查看内存分配区域

tftp的内存转储出来的功能

之前通过简单的逆向了解到,F114这个主要流程的文件,加载基地址是0x80001000

由于转储出来的时候,偶尔会有断联现象,直接传出整个文件失败率极高,所以慢慢分片传出来

tftp -put 192.168.1.100 profile0.bin 80000000 100000 
tftp -put 192.168.1.100 profile1.bin 80100000 100000 
tftp -put 192.168.1.100 profile2.bin 80200000 100000 
tftp -put 192.168.1.100 profile3.bin 80300000 100000 
tftp -put 192.168.1.100 profile4.bin 80400000 100000
tftp -put 192.168.1.100 profile5.bin 80500000 100000 
...

最后,合并传出来的文件,就是80000000-80?00000内存区域的转储

按道理,整个文件被加载进内存,总会有些痕迹可以看到的吧,但这个没有,是一堆混乱布置的内存,而且后面还有些发现证实其布置确实是混乱的

mem的dump功能

这个功能让我看到vxworks系统内存加载的特殊性,它不是一整个elf直接加载到内存中的,

分段1

分段2

显然,这些程序的片段如果是整体加载进内存的,那么其在内存中dump出来的地址与文件中的地址应始终保持固定的偏移量

但这里,并没有,这就尴尬了,说明vxworks加载到内存是分片的,乱序的,dump内存没有用。。。

所以这也解释了为什么,前面通过tftp传出固定内存区域的文件,就不是一个完整的文件

mcb(内存缓存块)

那些大的内存块实际上都装入的是js代码,html代码,没有执行时使用动态内存管理装入的代码,暂时没有查看的价值

逆向分析

IDA8.3也识别不出来,还需要手动指定mipsel 大端序

然后指定完大端序,发现还有坑

假设填写此处加载地址、rom起始地址为默认的0x0,就会这样,很多代码片段的分析出现了引用区域的错误,进而导致ida认为这并不是代码段

(p.s. IDA 7.x版本需要划定一部分区域然后按c->force转成代码,而IDA 8.3会先对整个文件进行是否为代码的扫描所以不用)

这个无从考究,uart串口shell里没写,dump出来的内存也没有指示,但是,最后通过不断尝试和推测,发现在0x80001000处加载是最为正确的

中间有极少数的引用错误不管它,这部分是引用了更高地址存储的数值,可我一直都找不到另一个文件在哪,自然就不知道更高地址的这些数值是怎么回事了

符号表的寻找(失败,只能直接逆向)

要想逆向工程更加顺利,就必须要寻找符号表。

网上主流的寻找符号表方式有三种:

1.binwalk直接识别

这位师傅的文章里的固件没有被压缩,确实可以这样找,但被压缩以后是找不到的。后来甚至binwalk了一下解压出来的所有文件,仍然不行

2.寻找bzero字符串

不行

不仅如此,别的函数也找了一下,没有

基本上可以断定,解压出来的文件不包含任何符号表

uimage(3EA0)

尝试很多次,发现起始地址居然是0x80010000

有些解压逻辑,其实也没有太多作用,唉

主要逻辑(F114)

看来只能在没有符号表的情况下逆向工程了

然后就是使用了一下gpt辅助逆向,知道了一些库函数

a1是soap_auth函数的唯一参数,是一个指针;a1+272存放soap鉴权的内容

其余的逻辑其实没有找到,直到最后发现一件事,

其实后台的功能实现居然基本上全都在前端js上,js负责了鉴权、管理员权限操作等行为,实现了一个参数systool用于执行系统命令,但关于ping、tracert、reboot的交互应该是写死的?这个得再行分析

后端代码的静态编译+加载到内存的随机化+抹掉了符号表,使得进一步的分析好难,断断续续看了好些天于是暂时放弃先,等以后更清楚这个系统再回来看吧

http://ba1100n.tech/stroage/F114.idb

类似版本的分析

实际上唯一一个没有加密的,能够参考的版本,是2010年左右MW300R推出的V1版本,那个里面其实好像有漏洞而且没有被提交,但是年代过于久远,已经没什么人用,而且后面比对了一下发现跟现在分析的固件虽说骨架一样,其实差异挺大的

固件仿真(失败)

有真机,可以直接黑盒,不过由于拿不到root shell,所以还是尝试固件仿真一下吧

这个跟能够被修复的固件仿真不太一样,FAT-plus这里直接就解析不了vxworks,作罢

黑盒测试+js逆向

登录验证(可绕过次数进行爆破?)

这里是唯一一个没有鉴权的操作点,而且我发现一个隐藏的安全问题,鉴权的参数似乎有迹可循?分别使用了不同的密码发起登录,其id生成规律似乎有一些固定模式

如果能够逆向出该参数在前端如何生成,那么我们可以进行无限次数的密码爆破,因为我们可以在下面的接口去尝试是否正确,而无需触发密码尝试次数上限

只可惜直到黑盒开始,时间已经有点紧迫了,目前为止我还没有分析出来qwq

在验证密码的页面执行了这一行代码:

跟踪该方法到class.js

这个是鉴权用的值,也是我们提交的id值:

b是pwd,这个我们无法提取获知,但是如果是重复尝试的话或许可以

最最核心的鉴权算法还是在Query.js上面

比如贯穿全机器的对id认证方式:auth

看这段代码,就知道了其实是这样验证的:

前端收到用户的认证信息(包含密码,上面的”a/b”)->编码、加密为id值->发往后端验证->后端利用存储的真正密码去加密,比对两边的id值是否为真->返回

坏消息是,我们很难绕过其加密算法去完成想做的事情

好消息则是,我们知道密码就等于掌握了一切权限(废话哈哈)

第二个好消息是,我们已经知道了id的算法,可以自己生成id(只需要知道authInfo[3]和authInfo[4]代表什么)

请注意这行代码:

一个猜想:只要爆破id,就不需要经过前面那个认证页面了,估计不会失败十次锁2小时,

这个是每次周期性地更改密钥的时候发生的事情,由换行符\r\n来切分

然后尝试看看是不是真的不限制爆破次数

但是跟踪不到任何字符。。。

那就直接往某些操作上提交几十次错误的id试试

比如这里有个抓到的包,用来ping的

然后在浏览器上退出登录

然后往之前ping包的id灌输乱写的数据,正常来说,10次就会触发锁定2小时,但是

点击了几次,大概就发送几十个包了,虽然的确触发了该错误,但该错误仅仅停留在这个输入密码的页面上

但是我们密码算法就能直接往id提交参数,如果错误了,还会像之前一样返回401,并且附带拼接到密码算法上的一些值(authInfo[3]和authInfo[4]分别对应右边返回的第11行和第12行)

这恰恰说明鉴权逻辑仍然被执行着,在知晓密码算法以后,我们确实可以通过某种方式去绕过爆破的

b就是a,a就是那个函数被传入的密码,把密码拼接到中间,然后用完全已知的securityencode方法,即可生成session号码,再通过

显然这样生成的就是id的值

综上,可绕过后台页面那个限制来进行id的爆破,从而破解后台口令,但我不知道这个算不算是漏洞,而且目前暂没有利用过

敏感操作

鉴权机制

这台机器的鉴权其实做得很好,任何操作前都需要验证”id”参数,而id参数是由一个比较长的字符串进行某种变换得到的,而且该id值实际上是借助密码和每隔大概一分钟变化一次的时间戳,一起计算而成的

不登录的话,其实会发现没有什么可以测的,所有操作都要鉴权,所以接下来假设我们已经有了登录后台的权限

看看有没有越权或者rce什么的

看到这里,当然是希望那边能够实现一些命令拼接什么的,

首先抓包分析一下,原来厂商自己实现了一个systools

没过多久,重放一样的包,却是失效了

所以这个id值会隔一段时间跳变一次,这对抵抗重放攻击来说是个很好的方法

修改密码

实际上,在修改验证密码时使用的是对用户公开的参数,搭配到securityEncode

前言

家里有两台不用的路由器,型号分别是水星的MW313R和MW325R,曾经只会php之流的web安全、一些二进制安全知识的时候,想试下能不能对这些路由器做点什么,但感觉这个路由器好像还挺安全的样子,实际上最近几个月才知道,这是c写的后端,而且没有连数据库,常规的方法当然打不通

明明看起来这个系列路由器后台页面写的比较简陋,在网上却丝毫没有关于它们的漏洞,

一个都没有?这让我更加好奇了,所以经过之前的学习,最近终于鼓起勇气尝试尽可能地按已有的水平去分析一下

最后还是穷尽了此时自己知道的办法,只是知道可以绕过次数限制进行爆破,目前其它的东西还没挖出来,谨以此文复盘一下,之后还会回来再试试的

MW325R和MW313R,这些MW3XXR系列的机器,使用着同一套源自于MW300R的系统,下文主要采用MW313R进行研究

固件提取+解包

网络下载

驱动天空www.drvsky.com有固件可以直接下载到,本来,无需焊电路板(可后面还是焊了,等下解释为什么)

解包

刚开始看-Me出来的文件结果,以为加密还是怎么了,因此学习了一阵子镜像是怎么解密并解压到内存,并实际分析以后,才恍然大悟,这不是加密,binwalk对vxworks这一种RTOS的解包就是这样的

可以看到,vxworks后面有好多个LZMA的压缩文件,会直接使用内存的位置来命名文件,binwalk无法去恢复其文件系统的结构和文件名(即使这里面有个jffs2文件系统)。不过这没关系,实际上有一个最大的文件,叫做F114,网上的教程一般就是取出最大的那个二进制文件去分析,这部分一般包含着主要逻辑

全是没有文件名的文件

F114是主要的服务端逻辑所在,而3EA0则是uimage,这两个都比较值得探究一下

UART串口调试

为什么提完固件还去焊uart呢,因为当时发现很多函数没有符号所以想去找点信息,也没有内存分布的知识(vxworks固件加载到内存的过程后面发现确实很奇怪)

总之就是想看看能不能到shell,直接看文件系统得了

首先需要拆开设备,有些设备没有螺丝只能小心的沿边找到缝隙掰开,准备好电表、电焊笔,UART转USB板子,它长这样:

然后最好要有那种塑料板,以防锡掉到桌子上了,不过这里我直接使用路由器自己的塑料外壳,准备不周,但也不是不能用,哈哈

对UART串口每个口的判别

黄色箭头指向的就是串口了

首先准备好电表,黑色的是接COM处,红色笔只要接电压档就好,可以用来测电阻的

(推荐插好电源以后直接操作插座的开关,而不是去插拔设备电源来做断电操作)

注意到有个小三角,暂时不知道那是什么,问了一下做电子信息产业的表哥,他说这个代表pin 1

断电测连通性(蜂鸣档位)

首先不通电,把万用表转到蜂鸣档,然后尝试去测4个口对某个焊点(有的大块金属部件也可以)的连通性,在这里第二个口跟其他的点是有连通性的,说明这是GND

第一个口滴了一声就没了,这就是VCC

记住那个焊点(or部件)的位置,等下还要用

通电测电势差(用20V测,提醒一下这个初中的知识)

然后通电,测量焊点(or部件)跟四个口的电势差:

VCC:3.3V固定

GND:0V

RX:0V(少数案例是3.3V)

TX:于0~3.3V之间变化,等待一段时间(0~10s)就会有了

可以直接推断四个口是什么,并且,顺便得到一个清晰的表格以供下次继续使用:

再度断电操作

这样看来,小三角指向的1口是VCC,下次可以参考

焊接

这里需要买一些杜邦线的公线,先别管那么多,焊上去先

最好先让焊笔包上一层薄薄的锡,然后再伸笔加热焊点周围,最后再滴锡上去,小心假焊情况,最好多焊久点看看锡液体能不能继续漏进去

还有就是第一次使用电焊笔可能会冒烟,这是正常现象,云母第一次遇到高温的现象

请无视下面滴出来的锡,哈哈

Serial串口连接

刚开始由于之前逆向固件得到了一些字符串,比如bootargs的波特率为115200,

导致这里陷入了小的困局,怎么尝试都是乱码

不过,后面一个接一个地尝试,最后得到是57600的波特率可以连上调试串口,真是非常让人意想不到的波特率

进入U-Boot成功,可惜是个阉割shell,不过有mem的dump功能,也有tftp传出指定内存区域的功能,甚至还能查看内存分配区域

tftp的内存转储出来的功能

之前通过简单的逆向了解到,F114这个主要流程的文件,加载基地址是0x80001000

由于转储出来的时候,偶尔会有断联现象,直接传出整个文件失败率极高,所以慢慢分片传出来

tftp -put 192.168.1.100 profile0.bin 80000000 100000 tftp -put 192.168.1.100 profile1.bin 80100000 100000 tftp -put 192.168.1.100 profile2.bin 80200000 100000 tftp -put 192.168.1.100 profile3.bin 80300000 100000 tftp -put 192.168.1.100 profile4.bin 80400000 100000 tftp -put 192.168.1.100 profile5.bin 80500000 100000 …

最后,合并传出来的文件,就是80000000-80?00000内存区域的转储

按道理,整个文件被加载进内存,总会有些痕迹可以看到的吧,但这个没有,是一堆混乱布置的内存,而且后面还有些发现证实其布置确实是混乱的

mem的dump功能

这个功能让我看到vxworks系统内存加载的特殊性,它不是一整个elf直接加载到内存中的,

分段1

分段2

显然,这些程序的片段如果是整体加载进内存的,那么其在内存中dump出来的地址与文件中的地址应始终保持固定的偏移量

但这里,并没有,这就尴尬了,说明vxworks加载到内存是分片的,乱序的,dump内存没有用。。。

所以这也解释了为什么,前面通过tftp传出固定内存区域的文件,就不是一个完整的文件

mcb(内存缓存块)

那些大的内存块实际上都装入的是js代码,html代码,没有执行时使用动态内存管理装入的代码,暂时没有查看的价值

逆向分析

IDA8.3也识别不出来,还需要手动指定mipsel 大端序

然后指定完大端序,发现还有坑

假设填写此处加载地址、rom起始地址为默认的0x0,就会这样,很多代码片段的分析出现了引用区域的错误,进而导致ida认为这并不是代码段

(p.s. IDA 7.x版本需要划定一部分区域然后按c->force转成代码,而IDA 8.3会先对整个文件进行是否为代码的扫描所以不用)

这个无从考究,uart串口shell里没写,dump出来的内存也没有指示,但是,最后通过不断尝试和推测,发现在0x80001000处加载是最为正确的

中间有极少数的引用错误不管它,这部分是引用了更高地址存储的数值,可我一直都找不到另一个文件在哪,自然就不知道更高地址的这些数值是怎么回事了

符号表的寻找(失败,只能直接逆向)

要想逆向工程更加顺利,就必须要寻找符号表。

网上主流的寻找符号表方式有三种:

1.binwalk直接识别

这位师傅的文章里的固件没有被压缩,确实可以这样找,但被压缩以后是找不到的。后来甚至binwalk了一下解压出来的所有文件,仍然不行

2.寻找bzero字符串

不行

不仅如此,别的函数也找了一下,没有

基本上可以断定,解压出来的文件不包含任何符号表

uimage(3EA0)

尝试很多次,发现起始地址居然是0x80010000

有些解压逻辑,其实也没有太多作用,唉

主要逻辑(F114)

看来只能在没有符号表的情况下逆向工程了

然后就是使用了一下gpt辅助逆向,知道了一些库函数

a1是soap_auth函数的唯一参数,是一个指针;a1+272存放soap鉴权的内容

其余的逻辑其实没有找到,直到最后发现一件事,

其实后台的功能实现居然基本上全都在前端js上,js负责了鉴权、管理员权限操作等行为,实现了一个参数systool用于执行系统命令,但关于ping、tracert、reboot的交互应该是写死的?这个得再行分析

后端代码的静态编译+加载到内存的随机化+抹掉了符号表,使得进一步的分析好难,断断续续看了好些天于是暂时放弃先,等以后更清楚这个系统再回来看吧

http://ba1100n.tech/stroage/F114.idb

类似版本的分析

实际上唯一一个没有加密的,能够参考的版本,是2010年左右MW300R推出的V1版本,那个里面其实好像有漏洞而且没有被提交,但是年代过于久远,已经没什么人用,而且后面比对了一下发现跟现在分析的固件虽说骨架一样,其实差异挺大的

固件仿真(失败)

有真机,可以直接黑盒,不过由于拿不到root shell,所以还是尝试固件仿真一下吧

这个跟能够被修复的固件仿真不太一样,FAT-plus这里直接就解析不了vxworks,作罢

黑盒测试+js逆向

登录验证(可绕过次数进行爆破?)

这里是唯一一个没有鉴权的操作点,而且我发现一个隐藏的安全问题,鉴权的参数似乎有迹可循?分别使用了不同的密码发起登录,其id生成规律似乎有一些固定模式

如果能够逆向出该参数在前端如何生成,那么我们可以进行无限次数的密码爆破,因为我们可以在下面的接口去尝试是否正确,而无需触发密码尝试次数上限

只可惜直到黑盒开始,时间已经有点紧迫了,目前为止我还没有分析出来qwq

在验证密码的页面执行了这一行代码:

跟踪该方法到class.js

这个是鉴权用的值,也是我们提交的id值:

b是pwd,这个我们无法提取获知,但是如果是重复尝试的话或许可以

最最核心的鉴权算法还是在Query.js上面

比如贯穿全机器的对id认证方式:auth

看这段代码,就知道了其实是这样验证的:

前端收到用户的认证信息(包含密码,上面的”a/b”)->编码、加密为id值->发往后端验证->后端利用存储的真正密码去加密,比对两边的id值是否为真->返回

坏消息是,我们很难绕过其加密算法去完成想做的事情

好消息则是,我们知道密码就等于掌握了一切权限(废话哈哈)

第二个好消息是,我们已经知道了id的算法,可以自己生成id(只需要知道authInfo[3]和authInfo[4]代表什么)

请注意这行代码:

一个猜想:只要爆破id,就不需要经过前面那个认证页面了,估计不会失败十次锁2小时,

这个是每次周期性地更改密钥的时候发生的事情,由换行符\r\n来切分

然后尝试看看是不是真的不限制爆破次数

但是跟踪不到任何字符。。。

那就直接往某些操作上提交几十次错误的id试试

比如这里有个抓到的包,用来ping的

然后在浏览器上退出登录

然后往之前ping包的id灌输乱写的数据,正常来说,10次就会触发锁定2小时,但是

点击了几次,大概就发送几十个包了,虽然的确触发了该错误,但该错误仅仅停留在这个输入密码的页面上

但是我们密码算法就能直接往id提交参数,如果错误了,还会像之前一样返回401,并且附带拼接到密码算法上的一些值(authInfo[3]和authInfo[4]分别对应右边返回的第11行和第12行)

这恰恰说明鉴权逻辑仍然被执行着,在知晓密码算法以后,我们确实可以通过某种方式去绕过爆破的

b就是a,a就是那个函数被传入的密码,把密码拼接到中间,然后用完全已知的securityencode方法,即可生成session号码,再通过

显然这样生成的就是id的值

综上,可绕过后台页面那个限制来进行id的爆破,从而破解后台口令,但我不知道这个算不算是漏洞,而且目前暂没有利用过

敏感操作

鉴权机制

这台机器的鉴权其实做得很好,任何操作前都需要验证”id”参数,而id参数是由一个比较长的字符串进行某种变换得到的,而且该id值实际上是借助密码和每隔大概一分钟变化一次的时间戳,一起计算而成的

不登录的话,其实会发现没有什么可以测的,所有操作都要鉴权,所以接下来假设我们已经有了登录后台的权限

看看有没有越权或者rce什么的

看到这里,当然是希望那边能够实现一些命令拼接什么的,

首先抓包分析一下,原来厂商自己实现了一个systools

没过多久,重放一样的包,却是失效了

所以这个id值会隔一段时间跳变一次,这对抵抗重放攻击来说是个很好的方法

修改密码

实际上,在修改验证密码时使用的是对用户公开的参数,搭配到securityEncode

而且该securityEncode也并不是神秘的什么

这可能造成局域网内对修改密码行为的http窃听和解密(因为我们已经知道了加密算法和密钥),但这太鸡肋了

重启

有鉴权没啥问题,而且这里是没有命令注入了,我们只能以固定格式去访问,后端才会认领吧

ping & tracert 带来的rce

暂时没找到这块逻辑,可惜,不过经过黑盒测试,注入不了命令的

而且该securityEncode也并不是神秘的什么

这可能造成局域网内对修改密码行为的http窃听和解密(因为我们已经知道了加密算法和密钥),但这太鸡肋了

评论

  1. Nop(ba1100n的小迷弟)
    3 月前
    2024-7-22 17:43:08

    大佬带带我

    • 博主
      Nop(ba1100n的小迷弟)
      3 月前
      2024-7-22 17:52:09

      0day战神带带我呜呜

    • 博主
      Nop(ba1100n的小迷弟)
      3 月前
      2024-7-22 17:53:24

      看iot挖0day技巧,我只看微信公众号”只关于二进制”

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
粤ICP备20015830号