关于 AFL 与 AFLNet 中对代码功能的一些理解,未完。

阅读全文 »

在C语言Socket通信中,客户端和服务器端的流程如下:

服务器端流程

  1. 创建服务器套接字(socket):使用socket()函数创建一个套接字,指定地址族(例如,AF_INET表示IPv4)和套接字类型(例如,SOCK_STREAM表示TCP套接字)。
  2. 绑定套接字到指定地址和端口(bind):使用bind()函数将套接字绑定到服务器的IP地址和监听端口上。
  3. 监听连接请求(listen):使用listen()函数监听指定端口上的连接请求。可以指定一个等待队列的最大长度。
  4. 接受连接请求(accept):使用accept()函数接受来自客户端的连接请求。它会阻塞程序,直到有客户端连接请求到达。返回一个新的套接字,用于与客户端进行通信。
  5. 与客户端通信:使用新的套接字进行与客户端的通信。可以使用read()write()函数从客户端接收数据和发送数据。
  6. 关闭套接字(close):通信结束后,使用close()函数关闭套接字。

客户端流程

  1. 创建客户端套接字(socket):使用socket()函数创建一个套接字,指定地址族和套接字类型。
  2. 设置服务器地址和端口:使用struct sockaddr_in结构设置服务器的IP地址和端口号。
  3. 连接服务器(connect):使用connect()函数连接到服务器。传入服务器的地址和端口号。
  4. 与服务器通信:使用已连接的套接字进行与服务器的通信。可以使用read()write()函数从服务器接收数据和发送数据。
  5. 关闭套接字(close):通信结束后,使用close()函数关闭套接字。

这些是基本的流程,你可以根据具体需求在通信过程中进行数据的读取和写入。记得在错误处理方面进行适当的处理,例如检查函数返回值是否为负数来判断是否出现错误,并采取相应的措施。

阅读全文 »

fuzz libmodbus by AFL

下载编译libmodbus库

libmodbus库源码可从github仓库下载,命令如下:

1
git clone https://github.com/stephane/libmodbus/

下载好后进入源码文件夹,编译命令如下:

需要注意的是:编译使用afl-gcc,而不使用默认的gcc

1
2
3
4
cd libmodbus
./autogen.sh
CC=afl-gcc CXX=afl-g++ ./configure --enable-static
make -j4

--enable-static:用于生成静态库

阅读全文 »

AFL技术 白皮书

GPT翻译AFL whitepaper,建议对照原文阅读,或者直接阅读原文。

附原文链接:https://lcamtuf.coredump.cx/afl/technical_details.txt

本文档提供了对American Fuzzy Lop(AFL)内部工作原理的简要概述。有关通用指南,请参阅README;关于AFL背后的动机和设计目标的讨论,请参阅historical_notes.txt。

阅读全文 »

Python导出项目依赖包

python项目开发完后,需要部署到生产或其他环境下,为了快速安装当前项目所需要的依赖包,常规的做法:

1
pip freeze > requirements.txt

此方法是导出pip安装的所有依赖包,而不仅仅是当前项目,这么做显然没有必要。

python 提供了pipreqs包解决这个问题。

1.安装pipreqs

1
pip install pipreqs

2.进入当前项目根目录下执行

1
pipreqs . --encoding=utf8 --force

“.” 指的是将导出依赖包的文件放在当前目录下

“–encoding=utf8” 指的是存放文件的编码为utf-8,否则会报错

“–force” –force 强制执行,当生成目录下的requirements.txt存在时强子覆盖

3.在新的环境下,进入项目根目录执行以下脚本完成所有依赖包的安装

1
pip install -r requirements.txt

这样做的好处可以保证依赖包的版本跟开发环境一样,避免了很多坑。

How to Read a Paper

ABSTRACT

研究人员花费大量时间阅读研究论文。然而,这项技能很少被教授,导致了许多不必要的努力。本文概述了一种实用且高效的三遍阅读研究论文的方法。同时,我还描述了如何使用这种方法进行文献调查

1. 引言

研究人员必须阅读论文的几个原因:为了为会议或课程审查论文,为了保持对其领域的了解,或者为了对新领域进行文献调查。一个研究人员可能每年会花费数百小时来阅读论文。

高效阅读论文是一项至关重要但很少被教授的技能。因此,初入研究生阶段的学生必须自行通过试错来学习。这个过程中,学生会浪费很多精力,而且经常会感到沮丧。

多年来,我一直使用一种简单的方法来高效阅读论文。本文介绍了“三遍阅读”的方法及其在进行文献调查中的应用。

阅读全文 »

TinyHttpd源码分析

前言

最近在分析固件,逆向完后反编译得到的伪代码看到不是特别懂,自我感觉是对web服务器端的Http请求处理流程比较模糊,正好之前学习《IoT安全入门》课程的时候提到过一个比较轻量的服务端程序Tinyhttpd,俗话说的好”麻雀虽小,五脏俱全”,之前听课的时候没有好好学,特此来补课留档。

Tinyhttpd简介

Tinyhttpd是J.David Blackstone在1999年写的一个不到500行的超轻量型Http服务端程序,通过阅读代码,可以帮助我们理解Web服务器程序的本质。

Tinyhttpd主页地址:https://tinyhttpd.sourceforge.net/

注:分析该源码需要了解Http报文的相关知识,这里就先不介绍了(以后有空的话可能补上),大家可以自行百度、Google或者ChatGPT学习。

阅读全文 »

hexo静态博客搭建

五一假期给老电脑硬件升下级,换了个1T的固态硬盘+原有的1T机械,嗯,感觉还能再苟两年。顺手重装了下系统,环境啥的都要重新安装,正好重新做个记录。

阅读全文 »

Shell 脚本

参考书籍:《Linux C一站式编程》

注:由于书比较老,部分内容可能已过时。

1. Shell 的历史

Shell 的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。

阅读全文 »