自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 收藏
  • 关注

原创 手写TCP/IP协议栈——TCP数据接收

使用自己实现的TCP/IP协议栈接收数据

2026-01-14 21:39:53 38

原创 手写TCP/IP协议栈——TCP数据发送

使用自己实现的TCP协议发送数据

2026-01-14 21:11:14 607

原创 手写TCP/IP协议栈——TCP四次挥手代码实现

TCP连接释放之四次挥手C语言代码实现

2026-01-06 20:10:12 294 1

原创 手写TCP/IP协议栈——TCP三次握手代码实现

TCP连接建立之三次握手C语言代码实现

2026-01-06 19:11:53 354

原创 手写TCP/IP协议栈——TCP结构定义与基本接口实现

TCP控制块的定义与基本操作接口实现

2025-12-29 10:10:06 380 1

原创 手写TCP/IP协议栈——UDP协议实现

传输层UDP协议的完整实现

2025-12-29 09:31:16 771

原创 手写TCP/IP协议栈——实现ping响应不可达

打开Tftp32软件,选择Tftp Client选项,配置目的主机的IP地址,下面几个内容随便填。对方检查校验和出现问题就直接丢包了,不会给我们回应,但是可以使用wireshark提醒。同时对于TCP和UDP的校验和检查也可以提前勾选上(后面会用到)编辑 -> 首选项 -> 协议 -> IPV4 勾上校验和检查。wireshark抓包ICMP不可达响应截图。点击Get之后可以向目的主机发送请求。

2025-12-27 15:36:16 565 1

原创 手写TCP/IP协议——实现ping的响应

C语言实现TCP/IP协议栈的ping响应

2025-12-27 15:31:32 336 1

原创 手写TCP/IP协议——IP层输出处理

由于需要返回mac_addr的值,而在ethernet_out中mac_addr是uint8*所以这里mac_addr需要使用二级指针,才能返回解析后的值。由于以太网层面无法直接识别IP地址,还需要实现一下IP地址到MAC地址的转换函数ethernet_out。将IP地址转为MAC地址之后,再调用以太网底层发送函数ethernet_out_to来完成发包。okok,今天的你就到此为止吧,明天还要接着🐺啊!最后实现arp解析函数:xarp_resolve。在无人问津的渡口,总是开满鲜花。

2025-12-10 11:41:45 301 1

原创 手写TCP/IP协议——IP层输入处理

③IP包发送的时候,填写包头的字段时将checksum填0 ,然后对整个IP包头计算一遍之后再写到checksum中去,接收的时候同样的是先把checksum置零,然后在本地协议栈再计算一遍校验和,观察是否和发送时的计算结果一致,如果一致的话,就说明通过校验;④还有判断一下这个包是不是发给本地协议栈的,因为在网络中发给别人的包也有可能发到我这里,比如我们的ICMP的广播包,我们可以收到但是经检查不是发给我的,就直接丢弃掉就好了,这种处理机制本身也可以认作是一种无回报的处理方式。

2025-12-10 11:28:38 614

原创 手写TCP/IP协议栈——ARP超时重新请求

除此之外,还需要设置另外一个超时值,因为我们重新发送ARP请求之后,还需要判断一下在指定的时间内有没有收到响应,从而避免的等待时间过长的情况的出现。arp_entry记录的是网络当中主机IP地址与MAC地址的映射关系,但是由于网卡绑定的IP地址是动态的。如果对方的机器下线,此时DHCP服务器可能会回收这个IP地址进而分配给别的网卡,这时候我们本机保存的arp表项当中维护的映射关系就出错了,需要重新进行修正。由于网络是不可靠的,所以我们需要在自己的协议栈当中添加ARP的超时重传机制。

2025-12-07 23:15:59 915

原创 手写TCP/IP协议栈——ARP输入处理

对方ARP包过来之后,我们需要先检查包的合法性,然后在switch...case里面处理ARP包。在ethernet_in以太网输入部分,添加对XNET_PROTOCOL_ARP的处理。此时我们通过arp_make_response已经可以给对方回复并更新arp缓存表了。ARP输入主要处理两种情况:①别人的ARP请求处理 ②别人的ARP回复处理。在虚拟机当中ping一下我们的协议栈,发现可以进入arp请求处理。arp -d:清除本机arp缓存表(需要管理员权限)arp -a:查看本机arp缓存表。

2025-12-07 15:16:35 685

原创 手写TCP/IP协议栈——无回报ARP包生成

结合wireshark抓包软件/RFC文档可以看到arp包的具体结构字段,注意这部分内容需要夹在#pragma pack()中间,因为需要解析具体字段。不妨设定:主机启用网卡的时候,自动在网络上广播自己的IP地址&&MAC地址,表示我已经上线了,方便网络当中的其他主机能感知到你的存在。以太网的dst mac填写的是广播包,protocol为ARP,表示交给ARP协议处理。在ARP协议中,发送方和接收方的IP地址都填写的自己的。网卡上线的广播包设置为无回报的ARP包。这里通过一个比较巧妙的手法。

2025-12-05 18:59:35 543

原创 手写TCP/IP协议栈——ARP初始化

ok,今天的你就到此为止吧,明天还要接着🐺啊!至此我们就完成了ARP协议的初始化。重新生成解决方案,没有问题即可。

2025-12-05 09:51:37 122

原创 手写TCP/IP协议栈——以太网数据包处理

不包含前导码(最前面)和CRC(在payload的最后),这部分内容由驱动自动填充,使用硬件电路可以自动校验CRC。为了预防编译器自动内存对齐的优化,我们使用#pragma pack(1)和#pragma pack()把该格式夹住。则是按照0x22 0x11进入内存,所以大小端完全不同。并且hdr->protocol转换前是0x0608,转换后是0x0806就没问题了。在以太网输入处理部分下断,能正常断下。

2025-12-04 19:49:14 425

原创 手写TCP/IP协议栈——数据包结构定义

使用while(1)轮询网卡上有没有数据,一旦硬件(例如以太网网卡)检测到有数据到来,就会交给以太网协议并继续向上交付处理。以太网底层所有数据+包头最大1514B,可以再添加2B的CRC,一共1516B。ok,今天的你就到此为止吧,明天还要接着🐺啊!轮询处理数据包,并在协议栈中处理。

2025-12-03 11:31:13 248

原创 手写TCP/IP协议栈——环境配置

这样虚拟机(192.168.254.3)和真机(192.168.254.1)就都能ping通了。使用wireshark也可以正常抓取两张虚拟网卡的通信了。貌似是程序兼容性问题,修改成x86就好了(暂时)实现可能不一样但是遵循同样的协议就可以正常通信。ok,今天的你就到此为止吧,明天还要接着🐺啊!1)将虚拟机的网卡1设置为仅主机。

2025-12-03 11:30:18 184

原创 中科大计算机网络——网络安全

使用checksum作为H不合适,因为很容易反向计算出m'与m有同样的报文摘要。为何不能让你逆向推导出报文m?防止你用不合法的协议m'在法庭上要挟签名人。使用公开密钥加密体系作认证的缺陷:中间人攻击。本质原因:Bob没有拿到真正Alice的公钥。解决方案:让Bob可靠地拿到Alice的公钥。只要根是可靠的,后面大概率也是可靠的。求幂次方和求模运算代价非常大。

2025-12-01 22:19:04 434

原创 数据结构与算法——数组

数组相关的算法从入门到熟练

2025-09-19 09:12:44 897

原创 EasyX开发——绘制跟随鼠标移动的小球

peekmessage函数:如果成功拉取到了消息,函数就会返回true,反之就会返回false。使用另外一个循环来不断地从消息队列当中拉取已有的消息,并进行处理,直到消息队列当中没有消息为止。在主循环前后分别添加BeginBatchDraw()和EndBatchDraw()okok,今天的你就到此为止吧,明天还要接着🐺啊!但是在绘制新的位置的圆的时候,没有对之前位置的圆进行擦除。在msg变量当中保存有鼠标的x和y坐标。每次鼠标移动,我们就立刻绘制出圆的图案。运行之后,发现绘制出来的圆一直在闪烁。

2025-05-13 17:31:07 561

原创 Godot开发2D冒险游戏——第三节:游戏地图绘制

游戏制作,第三节:设计游戏场景

2025-04-27 16:13:51 2508 1

原创 Godot开发2D冒险游戏——第二节:主角光环整起来!

游戏制作,第二部分:游戏玩家的设计

2025-04-24 21:25:33 730

原创 Godot开发2D冒险游戏——第一节:主角登场!

完整游戏开发第一节课

2025-04-24 15:59:05 981

原创 布布のC语言课堂——第一讲:揭开C语言的神秘面纱

开幕:C语言预备知识科普

2025-04-23 15:25:38 510

原创 驱动通信封装

R0comm.hComm.cmain.cR3comm.hcomm.cR3.cpp。

2025-03-17 21:16:11 260

原创 C语言圣诞节表白程序(超级炫酷版❤)

使用C语言实现超级炫酷圣诞节表白代码

2024-12-12 17:47:11 263 2

原创 js逆向——2024最新有道翻译过控制台反调试

js控制台反调试

2024-10-11 11:47:58 860

原创 js逆向——webpack实战案例(一)

首先通过跟栈的方法找到加密位置我们跟进u函数,发现是通过webpack加载的向上寻找u的加载位置,然后打上断点,刷新网页,让程序断在加载函数的位置u = r.n(a)

2024-09-28 20:10:26 2074 5

原创 js逆向——webpack扣取代码

介绍了webpack扣取代码的通杀流程

2024-09-27 19:58:47 2973 1

原创 js逆向——RSA实战案例讲解

rsa加密案例讲解

2024-09-04 16:57:57 911

原创 js逆向——异步栈分析(上)

这里的异步是一个while循环,不断取出一些回调函数来执行,对于then前面的e.shift表示执行成功的情况,而后面的e.shift表示执行失败的情况,而e是一个数组,用于存放很多异步的回调函数,shift相当于栈里面的pop,用于从异步栈当中取出,执行,并删除栈顶的回调函数。的位置在文件chunk-vendors.a1bfb9a0.js:formatted的第668行,然后先取消断点,等时机到了再打上!前三个函数很有可能是封装的发包函数,直接跟异步的栈。将所有断点移除,然后在异步栈里面下断。

2024-08-29 22:40:26 957 1

原创 js逆向——2024最新金山词霸(练习二)

注:当看到加密函数传入字符串的时候,一定要先用123456测试一下,不要上来就扎入细节当中。然后就是解密数据了,过程相对简单,就是应该普通的AES-ECB解密。就是跟栈的时候注意看一下url对不对,别跟错接口了😂😂。经过分析sign的生成,是先经过md5然后AES加密生成。整个加密参数的生成流程我们都清除了,下面就是扣代码环节了。ok,今天的你就到此为止吧,明天还要接着狼🐺啊!简单看一下加密参数,就sign是比较可疑的。经过测试,也拿到正确的响应数据,并成功解密。对于XHR请求的包,直接跟栈就对了!

2024-08-12 17:41:01 641

原创 js逆向——2024最新有道翻译(练习一)

注意:这种一般是请求参数出现错误,先检查get/post是否正确,然后就是post的请求参数一定是缺一不可!这个和请求头略有不同!往上跟栈到这里看不到表单数据了,就在附近找参数e,t如何被加工的即可,于是找到了k(t)函数,或者上下翻翻看也会有意外之喜哦~首先看请求头,重放测试有没有cookie反爬(重放的时候注意松开断点,不然可能返回数据为0B)很明显返回的数据被加密了,根据之前的经验,返回的大概率是json格式的数据。我们搜索sign值,发现并没有匹配到接口,说明是动态生成的加密参数。

2024-08-12 13:13:24 1374

原创 js逆向——客户端js生成cookie反爬

js客户端生成cookie反爬参数acw_sc_v2逻辑分析

2024-08-06 11:36:33 3213 2

原创 js逆向——返回加密数据的处理

这样数据解密的步骤我们已经分析完了,现在还有一个问题就是我怎么知道返回的7个XHR数据包哪一个是列表页展示的、我们希望得到的目标数据呢?这说明我们收到的响应数据是加密后的结果,返回客户端之后由客户端解密拿到明文字符串展示在前端当中,所以我们才能在网页看到有效的信息。现在我们还需要确认一件事,就是这个网站使用的AES-CBC是不是标准的AES算法,这将决定我们需不需要扣代码。而且通过观察,js代码没有特别需要扣的地方,都是使用的库当中自带函数。ok,今天的你就到此为止吧,我们下期再见~

2024-07-28 22:35:38 2608

原创 js逆向——origin/refer请求头反爬

但是如果将origin和refer同时注释就会报错403,说明这里是一个检测点,服务端需要判断客户端是不是点击链接进来的,如果直接请求会失败。我们注释掉x-api-key返回了403,这个参数是必不可少的,而且有可能是动态生成用于检测爬虫的。使用正则表达式提取出来静态参数x-api-key的值,为二次请求真正的摘要做准备。保留有用的参数(当然都保留也行,我们主要是想看一下哪些参数会对爬虫进行检查)排除掉在请求头当中的目标之后,我们顺利找到静态参数在文件当中的位置。

2024-07-25 10:33:11 1057

原创 js逆向——url重定向处理

结果报错$未定义,这是因为我们本地缺少浏览器的环境,我们去浏览器找$(this).attr('target');发现是写死的一个字符串:var ee = $(this).attr('target');ee=‘_blank’因此我们需要监听点击a标签之后发生了什么(执行了哪些动作),以此来判断究竟访问的是哪个网页。反正扣js代码就是缺啥补啥即可,不知道是什么情况就去浏览器调试观察一下就ok了。ok,下面是最后一步,使用pycharm调用js代码即可大功告成了。结果返回的是403,访问出错,被禁止了。

2024-07-19 14:00:50 958

原创 X科网js逆向分析

所以我们可以直接对pwd使用md5加密(省事)/ 把网页中的md5函数代码抠出来。显然这是函数内实现的函数,也就是闭包,所以我们只需要把闭包的整个函数拿下来即可。然后我们可以测试一下md5(1)发现得到的是正确的结果c4ca4.......我们将闭包代码复制到js调试工具当中,发现调试工具已经自动识别出来md5了。通过$.md5(pwd)之后得到的加密结果就是我们的pwd参数。得到c4ca4,说明就是$.md5(),md5加密。1)测试使用$.md5(1)加密数字1。2)测试$.md5(pwd)

2024-06-30 23:40:29 512

原创 某山词霸翻译js逆向分析

当发起一次Post请求,若未指定Content-type,则默认content-type为application/x-www-form-urlencoded,即参数会以FormData的形式进行传递,不会显示出现在请求URL中。当发起一次post请求,若Content-Type为application/json,则参数会以Request Payload的形式进行传递(数据格式为json),不会显示出现在请求url中。我们发现只有参数sign是动态生成的,需要特殊处理,根据经验sign是通过加密生成。

2024-06-28 17:50:47 1142

原创 token、session、cookie、sign分析

接口在网络传输过程中如果被黑客挟持,并修改其中的参数值,然后再继续调用接口,虽然参数的值被修改了,但是因为黑客不知道sign是如何计算出来的,不知道sign都有哪些值构成,不知道以怎样的顺序拼接在一起的,最重要的是不知道签名字符串中的key是什么,所以黑客可以篡改参数的值,但没法修改sign的值,当服务器调用接口前会按照sign的规则重新计算出sign的值然后和接口传递的sign参数的值做比较,如果相等表示参数值没有被篡改,如果不等,表示参数被非法篡改了,就不执行接口了。

2024-06-28 16:45:47 651

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除