我们可以使用Cython、Nuitka对代码进行打包,编译成.so文件、.dll文件或者是可执行文件,从而在一定程度上避免别人看到你的源代码。...我在字节的时候,内部的一个系统就是使用Cython打包的,然后部署到客户的服务器上。 Cython、Nuitka在打包大型项目时,需要写大量的配置文件甚至是额外的程序,有一定的使用成本。...如果你对安全的要求并没有那么高,那么其实你只需要对Python代码进行混淆,就能防止自己的代码被人轻易看到了。 我们可以使用Pyminifier来对Python代码进行混淆。...由于这个程序的代码很久没有更新了,因此如果你的Python版本比较高,那么需要首先降一下setuptools的版本,然后再安装pyminifier: pip install "setuptools<58.0.0..." pip install pyminifier 安装完成以后,我们来对代码进行混淆,执行如下命令: pyminifier --nonlatin --replacement-length=50 main.py
在保护Python代码安全方面,有多种混淆工具可供选择,包括 Cython, Nuitka, Pyminifier 和 IPA guard。...这些工具能够将 Python 代码转换为二进制文件或混淆代码,提高代码的安全性。然而,需要注意的是,混淆并不能完全阻止专业攻击者对代码的分析,因此在选择工具时需综合考虑实际安全需求。...优点: 编译后的二进制文件不易被逆向工程分析,提高了代码的安全性。 缺点: 需要编写额外的配置文件或程序,处理大型项目时可能较为复杂。...Pyminifier 特点: Pyminifier 是一个简单易用的 Python 代码混淆工具,可通过 pip 安装并使用命令行操作。 优点: 操作简单,可快速对代码进行混淆。...开发者在选择混淆工具时,应根据实际需求和项目规模综合考虑,选择最适合的解决方案。同时,定期更新和维护混淆策略也是保持代码安全的重要措施。
答:当然不,总所周知c/c++程序都是从上至下执行,说明在我们sleep期间,printf函数早就已经执行完了!但是我们打印的内容去了哪里??...答:我们打印的字符串被缓存在缓存区了,缓冲区是由c语言维护的一段内存,所有没有打印到显示器上,而且缓存区会在程序结束的时候或者遇到 “\n” 自动刷新,然后显示。...此段代码现象:字符串会直接打印到我们的显示器上,如然后等待三秒,程序结束,因为我们带了 \r\n 那么如果我们不带\n或者\r\n,就想立即看到字符串,应该如何做?...这里我们需要将字符串输出到我们的屏幕上,所以我们需要stdout 二、倒计时程序 实现原理:通过while循环,将数字不断输出到屏幕上 要求:在相同位置,不断刷新,进行倒计时 注意事项: 当我们带上...所以我们需要进行格式控制%-2d左对齐,如果使用%2d,默认占两个字符(10就是两个字符)且是默认右对齐,如果内容为1个字符,那么另一个字符位置不显示内容,所以在屏幕上打印字符’9’,就变成了空格字符’
随着研究的深入,此文章会进一步更新,目前我们所知道的有: 新型Apache Struts 目标为Windows和Linux系统 Zealot的攻击复杂,多平台,且及其模糊 Zealot利用的服务器均有以下两种漏洞...图5 内置64进制编码的 python代码 Little Snitch 和未知类别 可以看到,这个python代码会检查是否“Little Snitch” 进程是否在执行(“Little Snitch”...图8 在HTTP响应中应用的 RC4解密路径 Windows 被利用后 如果检测到Windows,STRUTS 载荷会通过一种隐蔽的方法运行一个PowerShell interpreter,即64进制编码的代码...该脚本使用“pyminifier”进行混淆,这是一个Python代码最小化,混淆和压缩的公共包。原脚本是一个64进制编码的脚本,压缩过20次。...随着漏洞利用在windows设备上的进行,它会下载 “zealot.zip” 和“raven64.exe”文件。
事实上,这就是 print 函数真正所做的;它会在正打印的字符串后面加上回车换行符,并调用sys.stdout.write。...始终在重定向 stdout 之前保存它,这样你可以在后面将其设回正常。 打开一个新文件用于写入。 将所有后续的输出重定向到我们刚打开的新文件上。...这样只会将输出结果“打印”到日志文件中;在IDE窗口中或在屏幕上不会看到输出结果。 在我们将 stdout 搞乱之前,让我们把它设回原来的方式。 关闭日志文件。...将我们新打开的日志文件的文件对象赋给 stderr 重定向标准错误。 引发一个异常。从屏幕输出上我们可以注意到这样没有在屏幕上打印出任何东西。所以正常跟踪信息已经写进 error.log。...我们所做的全部是在函数的开始处添加三行代码,用来检查是否 source 是“-”,如果是,我们返回sys.stdin。实际上,就是这样!
以一个开源项目pyminifier (https://github.com/qiyeboy/pyminifier)来说明混淆的技巧方法,这个项目已经有4年没更新,有一些bug,但是依然值得我们学习和入门...- 用于混淆Python 代码 token_utils.py - 用于收集Python Token 从项目代码中,可以看到pyminifier的混淆方法是基于Token的,即基于词法分析,假如大家之前做过混淆的话...n' 代表所在的行 Token还原代码 能从源文件中提取token 列表,如何从token列表还原为源代码呢?...在pyminifier中,有两个缩小Python代码的方法:一个是精简方式,另一个是使用压缩算法的方式。...精简 在minification.py中使用的是精简方式,具体代码如下: def minify(tokens, options): """ Performs minification on
主要有以下几种模式: 全缓冲模式(Fully Buffered): 数据只有在缓冲区满时才会被刷新到屏幕上。通常用于文件I/O。...行缓冲模式(Line Buffered): 当遇到换行字符(LF, \n)时,缓冲区内容会被刷新到屏幕上。常见于终端I/O。 一些标准输出流(如stdout)在连接到终端时默认使用行缓冲模式。...在行缓冲模式下: 当输出流遇到换行字符时,缓冲区的内容会被立即刷新到屏幕上,从而实现行缓冲的机制。 在许多现代终端和编程环境中,输出一个换行字符通常意味着会将当前行的数据刷新到屏幕。...输出回车字符后,下一次的输出会从行首开始,覆盖当前行的内容。 3、换行回车在屏幕缓冲区中的作用 行缓冲模式:换行字符(\n)会触发缓冲区刷新,将内容显示到屏幕上。...回车字符(\r):不触发缓冲区刷新,而是移动光标,通常与手动刷新缓冲区结合使用,以实现动态行更新。 缓冲区刷新模式(全缓冲、行缓冲和无缓冲)控制了何时将数据从缓冲区刷新到屏幕。
引言:Linux实战:动态进度条从零实现,多版本优化与缓冲区原理全解析 在Linux终端环境中,动态进度条是提升用户体验的经典组件——无论是编译程序、文件传输还是批量处理任务,直观的进度反馈都能避免“等待焦虑...版本1:基础版——循环+printf,踩坑缓冲区 先写一个最直观的版本,核心思路是循环打印进度符号,每秒更新10%。...,而是等10秒后一次性输出完整进度条!...修复方案:在printf后添加fflush(stdout)主动刷新缓冲区。...进度条的本质是“通过精准控制输出与光标,实现视觉上的动态效果”,而缓冲区是实现这一效果的关键底层逻辑。
一个节点(索引节点)是在一个表项,包含有关文件的信息(元数据),包括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数据...(3) 链接数:硬链接会增加链接数,软链接不增加。 (4) 节点编号:硬链接相同,软链接不相同。 (5) 删掉原始文件是否会影响到链接文件?...,但打包的数据不是记录到文件,而是传达到stdout,经过管道后,将tar -cvf- /home 传送给后面的tar -xvf-,后面的这个- 则是取前一个命令的stdout,因此,就不需要使用临时file...复杂管道的故障排除 -同时查看和记录输出 文件查找 在文件系统上查找符合条件的文件 文件查找:locate,find 非实时查找(数据库查找):locate 实时查找:find Locate命令 locate...,[],[^] -iname“文件名称”:不区分字母大小写 -inum n 按inode号查找 -samefile name 相同inode号的文件 -links n 链接数为n的文件 -regex “
所以如果包含\n的话立即打印到显示器上 如果不包含的话改字符串不做刷新,要么程序要么结束自动刷新,要么我们进行强制刷新的操作 如果我们想让不带\n的消息进行刷新的话怎么办呢?...那么我们就进行主动刷新的操作 我们在代码的后面加上fflush(stdout);就行了 输出后我们立即进行刷新,将我们的数字显示出来 但是我们发现我们的数字一打印完就会消失了,光标一直回到开头 最后被命令行覆盖了...随着进步不断增加,我们括号中的#就会增加,右边的数字也是显示的进度 然后右边的斜杠就是我们的光标移动 我们这里声明在.h文件中,实现在.c文件中,然后我们在main.c中进行编译操作 我们将我们的Makefile...不推荐使用(现代 POSIX): 在 POSIX.1-2008 标准中,usleep 已被标记为不推荐使用(deprecated),建议使用更精确的 nanosleep 或 clock_nanosleep...~ 但是我们这个进度条的右侧的中扩号不是固定的,而是随着#的增加而往右边进行移动的 所以我们必须预留出足够大的空间来进行#的填充操作 所以这个右括号不应该随着进度条的移动而移动 我们将代码改成这样子
本应该打印在显示器中,但是打印到在指定文件中,这种技术叫做重定向。...在C语言层面对应的struct FILE*对应的结构体除了_fileno还有语言级别的文件缓冲区,在使用printf/fprintf时,并不是通过1号文件操作符将数据直接写到操作系统内部,而是直接写入对应的语言级别的文件缓冲区里...如果你运行这段代码,你将看不到hello world的输出在终端上,而是在log.txt文件中。...当在使用fork时,write数据已经写到操作系统内部,乃至硬件上,但是printf和fprintf的消息依旧在语言级别的stdout对应的缓冲区中。...具体地说,1>表示将stdout重定向到文件all.txt,2>&1表示将stderr重定向到与stdout相同的位置,即all.txt文件。
在讲解后面的内容之前,我们还是先来了解一点补充知识,是关于我们上一篇讲的struct_file,上一篇我们只是提了一嘴,并没有讲解相关知识,下面我们先来了解一部分。...所以说在内存中一定存在空间来保存被打开文件的内容和属性,就和进程一样,在内存中有专门的空间来保存进程的代码和数据,进而通过某种方式来将内容更新到处于硬盘的文件中,那这个空间是什么呢?...对于输出重定向想必大家都不陌生,在上一篇我们在复习C语言文件接口时就提过,不过当时的操作并不是如现在这样,而是通过" > "来实现的,那么这两者有什么联系呢?...,当3号下标的内容覆盖了1号下标中的内容,那么1号下标中的指针就不再指向标准输出stdout了,而是指向了3号下标所指向的文件。...虽然子进程执行了close的操作,实际上并不会关闭父进程打开的文件,而是将子进程的文件描述符表的相应位置中的指针置为NULL,这样子进程就无法访问这个文件,但是父进程依旧可以访问这个文件。
使得无论操作对象是普通文件、目录、设备,用户都可以通过相同的文件系统与之交互。...这些个文件提供统一的文件操作接口(write、read、open、close等),无论操作对象是键盘、鼠标还是其他什么硬件,用户都可以通过相同的接口与之交互。...2.缓冲区的刷新策略 通过以下代码观察缓冲区: 在程序sleep的十秒之间printf不会打印,等sleep结束后才会打印。 注意printf没有带\n。...3.用户级缓冲区 引子——观察下列代码在bash不同指令下的执行情况: 1 #include 2 #include 3 #includestdout默认采用的是行刷新,在进行fork之前三条C函数已经将数据打印到显示器上了,FILE中不在存有相应数据了; ②如果我们进行了>,写入的文件不再是显示器,而是普通文件,采用的刷新策略也不再是行缓冲而是全缓冲
它将光标移动到当前行的开头位置,但不移动到下一行。 【功能】:在Linux系统中,\r通常用于在同一行上连续输出不同的内容。如果有新的字符输入,它们将覆盖已存在的字符。...这使得在同一行内更新文本内容成为可能。 在制作进度条等动态文本输出时,\r非常有用。通过不断更新同一行的内容,可以创建出动态的视觉效果。...标准输出流是一个缓冲流,当数据写入到标准输出流时,并不会立即显示出来,而是先存储在缓冲区中,当缓冲区被填满或者手动调用fflush函数时,才会将缓冲区的内容刷新到显示器上。 3....上打开vim编辑器创建progress.c代码,将上述进度条代码写上去,然后使用make/makefile工具搭配gcc的使用,将progress.c编译成可执行文件progress,然后在命来行输入....所以对于进度条代码,我们可以将其设置我们喜欢的颜色,只需要在循环打印前后设置和取消字体颜色,代码如下: 然后我们使用make命令重新编译progress.c源文件: 运行结果如下: ✨模拟真实下载速度的进度条
C++时,使用C++风格的C语言代码 int main() { //C语言 printf("hello printf->stdout\n");//...,来完成对应的读写,不关心底层的差异化 操作系统也有自己的wirte和read,本质上是拷贝,将应用层的数据拷贝到缓冲区里,在调用底层不同设备的方法,所以看起来就是Linux下一切皆文件 4....me,打开新文件发现本来应该打印到显示器的内容,打印到log.txt中了 本来应该打印到显示器上的内容,打印到文件里 ,这种现象叫做重定向 ---- 在文件描述符表中,最小的,没有被使用的数组元素分配给新文件...,这叫做输入重定向 追加重定向 关闭文件描述符1后,导致printf不会打印在显示器上,而是追加到log.txt文件中 运行可执行程序,无显示,都追加到log.txt文件中 ---- 重定向函数...,打印出三行信息,说明重复打印了 ---- 若将fork函数注释掉后,发现 两者显示结果相同\ ---- struct FILE除了会封装fd之外,还会预留一部分输出缓冲区 当把字符串想写入stdout
前言 在上文中,我们讲解了pyminifier中简化和压缩代码的功能。本篇作为第二篇,也是最终篇,讲解一下最重要的功能:代码混淆,学习一下这个项目的混淆策略。...大家如果觉得不错的话,一定要分享到朋友圈哈,写了快5000字,基本上每一个细节都给大家拆分出来了,贴了一部分关键代码,会长一些,一定要有耐心哟。...一.混淆效果 在讲解混淆策略之前,先看一下混淆的效果,恶不恶心,哈哈。对比着混淆的结果,再结合我的讲解,会理解地更加深入。 原始代码 专门设计了一段代码,基本上涵盖了经常出现的语法内容。...,接着遍历token,获取源文件中模块调用的函数,和之前的方法一样通过赋值的方式进行替换,举个例子:原代码: import os os.path.exists("text") 混淆后的代码: import...在Py3中,支持unicode字符作为变量名称,所以基本上是使用unicode字符作为数据源,混淆后会出现各个国家的语言符号,看着着实恶心,而Py2则是使用的ASCII码的大小写作为数据源。
文件:要搜索的文件列表。如果不指定文件,则 grep 将从标准输入中读取数据。...一些常见的 grep 用法示例: 在文件中搜索特定字符串(不区分大小写): grep -i "search_text" file.txt 在多个文件中递归搜索特定字符串并显示包含匹配项的文件名: grep...这通常是因为我们手动构建 Rust 或从源代码仓库中获取 Rust 的最新版本。这种情况的话,在使用rustup update进行版本更新的时候,会有问题。所以我推荐安装官方的二进制发布版。...} 在代码中不包含文件名的情况下,很难确定哪个文件是NotFound。...❞ ---- 打印错误信息 通过stderr来打印错误,以使用户和其他工具更容易将其输出重定向到文件或其他工具。 ❝在大多数操作系统上,程序可以写入两个输出流,stdout和stderr。
也就是说在把echo命令的输出写入文件之前, temp.txt中的内容首先会被清空。.../cmdRW.sh /root/Templates 0 RIGHT [root@entel1 Templates]# ---- 默认stderr打印到屏幕上 下面的命令会将stderr文本打印到屏幕上...---- 工作原理 就输出重定向而言, >和>>并不相同。尽管两者可以将文本重定向到文件,但是>会先清空文件,然后再写入内容,而>>会将内容追加到现有文件的尾部。...当使用重定向操作符时,输出内容不会在终端打印,而是被导向文件。重定向操作符默认使用标准输出。 如果想使用特定的文件描述符,你必须将描述符编号置于操作符之前。...null设备通常也被称为黑洞,因为凡是到这儿的数据都将一去不返。 ---- 补充内容 从stdin读取输入的命令能以多种方式接收数据。
0; } 这次运行代码就会在屏幕上直接打印。...(不包含结尾的空字符 \0),适用于文件流或标准输出(stdout)。...return 0; } 如果我们将fprintf中的fp改为stdout将会直接给信息打印到屏幕上。..., "%s %d %.1f\n", s.name, s.age, s.score);//打印数据在stdout 上 //不再使⽤⽂件时,需要关闭⽂件 fclose(fp); fp = NULL...如果不做,可能导致读写文件的问题。 九、更新文件 在文件的打开模式中有三种方式值得注意,分别是: "r+"、"w+"、"a+",分别是什么意思?
前言 因为有Qmsg酱 这样的一个QQ通知服务,于是我想做一个版本更新通知的东西玩玩,宝塔版本更新通知的我已经搞定了,宝塔是开源的没有加密,分析一下面板代码接口就出来了,刚好最近授权了一个小储云程序,于是也想做一个小储云商城通知更新的程序...这个参数不设置,tshark将会把解码结果输出到stdout。“-w-”表示把raw输出到stdout。如果要把解码结果输出到文件,使用重定向“>”而不要-w参数。...-r 设置tshark分析的输入文件。tshark既可以抓取分析即时的网络流量,又可以分析dump在文件中的数据。-r不能是命名管道和标准输入。...-x 设置在解码输出结果中,每个packet后面以HEX dump的方式显示具体数据。 -S 在向raw文件输出的同时,将解码结果打印到控制台。 -l 在处理每个包时即时刷新输出。 -X 扩展项。...-f 'tcp dst port 80' -w abc.txt` 刷新你想抓包的页面地址(我抓包的是小储云商城的更新接口,狂点刷新那个检查更新就行了) 在ssh结束(ctrl+c)抓包,然后下载abc.txt