ctfshow-php特性(web102-web115)

news2024/11/24 0:19:04

目录

web102

web103

web104

web105

web106

web107

web108

web109

web110

web111

web112

web113

web114

web115


实践是检验真理的 要多多尝试

web102

<?php
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);#执行函数 $v1作为函数名 $s作为参数
	echo $str;#输出变量
	file_put_contents($v3,$str);#将数据写文件
}
else{
	die('hacker');
}

首先就是v2必须是全数字的 v3任意

获取v2的第二个字符开始的字串作为$str的值 也就是为了获得正确的payload最前方要填充两个无用字符 从而获得除了前两个无用字符后的有用字符

call_user_func($v1,$s) 可以理解为执行函数 $v1($s) 

也就是说$v1($s)  输出的结果是我们要的payload

知识点

1 php5(php7.1一下)下is_numeric可识别16进制(如果0x开头 就会识别为十六进制字符串 从而绕过),如0x2e,然后调用hex2bin转成字符串写入任意木马

十六进制字符串转换二进制字符串也就是相当于

但是这道题环境用的是php7.0以上的环境所以就不能用0x开头从而绕过is_numeric函数 导致大多

为了能绕过is_numeric函数 目前构造一个很神奇的字符串

5044383959474e6864434171594473

十六进制转换字符串

PD89YGNhdCAqYDs

base64解码

<?=`cat *`;

因为开头不能使用0x所以 目前只有这一个字符串能满足要求 里面的e会被函数当成科学计数法从而绕过死亡函数

但是十六进制转换字符串需要用一个函数 base64解码又要用一个函数 但是题目只有一个函数位置

于是写文件的时候可以通过过滤器来对写的内容进行过滤php://filter/write=convert.base64-
decode/resource=2.php(该过滤器可以在文件操作函数中使用,起到过滤作用)变成了

file_put_contents(php://filter/write=convert.base64-decode/resource=2.php,$str); 

简单解释 将数据$str利用过滤器进行base64解码写入文件2.php中

这样只需要十六进制转换字符串的函数就可以了

访问2.php文件

2 <?=`cat *`;  cat * 是一个shell命令如果一个php文件中存在该内容 它会执行 cat * 命令并将结果输出到页面上

3 等号的优先级大于and

web103

<?php
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');
}

?>

过滤了payload中 php 且不区分大小写 这么一看对我们没影响

尝试一波发现确实没影响  上一道题其实不是那么做的 上一道题就是让你写任意的木马 但是环境配成7.1了 只能按照这道题的方式去做 就算上一题用的5.2版本且也使用者这个正则 写任意木马 也不影响 因为$str是base64编码后的字符串 匹配字符串中存在php的概率很小

web104

<?php
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就是将字符串进行哈希加密使用SHA1的方式

第一种正常解 函数没有判断传参的两个值是否不相等

使v2v1值相等即可 他们的哈希加密值也相等

第二种解法 

这道题和md5加密那道题一样 就i是换了一个函数 

加密函数的参数必须传入字符串 否则函数返回值为false 传入从数组而实现false==false

第三种解法

大佬跑出来的

aaK1STfY
0e76658526655756207688271159624026011393
aaO8zKZF
0e89257456677279068558073954252716165668

在==比较的时候 对字符串形式的数值,PHP 会尝试将其转换为数值类型进行比较恰巧这个payload中除了e全是数字 成功转换为数值类型 0的任意次方还是等于0 所以0==0

web105

<?php
highlight_file(__FILE__);
include("flag.php");
error_reporting(0);#安全级别为0 不输出任何报错信息
$error="你还想要flag嘛";#如果有报错不输出报错语句而输出该语句
$suces="既然你想要就给你吧";
# 遍历变量中的键值对  对于http来说就是遍历传入的参数名以及参数值
foreach($_GET as $key=>$value){
	if($key==='error'){
		die("what are you doing");
	}
	$$key=$$value;#将变量value值作为变量名 
}
foreach($_POST as $key=>$value){
	if($key==='error'){
		die("what are you doing");
	}
	$$key=$$value;
}
if(!($_POST['flag']==$flag)){
	die($error);#输出
}
echo "are you good".$flag."\n"
die($suces);

有个死亡函数 必须让post中的falg参数的值为flag 才能绕过死亡函数 这有点过分了 我要知道那还做啥题了哈哈

$$key=$$value; 很关键 先看GET参数

如果想要获取到flag $value=flag -----$$key=$flag

参数名随便来一个x $key=x  -----$x=$flag

$$key=$$value;  再看POST参数

现在flag值已经存在于$x中了  使$value=x -----$$key=$x

到这我想了好久如何对POST参数进行赋值 他是将post参数遍历存入key中的 反赋值只靠-$$key代表$post['flag']不存在呀

从新审核一下代码 没必要绕过死亡函数 直接让die输出错误error即可

所有让$key=error --------$error=$x

第二种方法

?suces=flag&flag=

这个也比较好理解 先把flag值放入suces中 然后 让$flag=$  php会将$视为空字符串 从而$flag为空

因为post中没有flag参数 所有 post['flag']也为空 

web106

和web104一个样 就是增加了v1!=v2

方法一

传数组 使得函数返回值为false

大佬方法

aaK1STfY
0e76658526655756207688271159624026011393
aaO8zKZF
0e89257456677279068558073954252716165668

web107

<?php
highlight_file(__FILE__);
error_reporting(0);
include("flag.php");
if(isset($_POST['v1'])){
	$v1=$_POST['v1'];
	$v3=$_GET['v3'];
	parse_str($v1.$v2);
	if($v2['flag']==md5($v3)){
		echo $flag;
	}
}

首先我想到 $v2['flag']==md5($v3) 是不可能的 只能让md5返回值为false

在php中未定义的值被转换为布尔值时会被视为 false 所以无需定义v2中的flag即可 但是要注意 必须还要给v1随便传值 否则v2没被定义 就会出现报错等问题

第二种方法 弱类型比较  flag=0  让md5函数返回一个0e开头的即可 这样0=0

GET: ?v3=240610708 POST: v1=flag=0

web108

<?php
highlight_file(__FILE__);
error_reporting(0);
include("flag.php");
if (ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE)  {
    die('error');

}
//只有36d的人才能看到flag
if(intval(strrev($_GET['c']))==0x36d){#经过反转再转换整形是否等于十六进制的0x36d 也就是877
    echo $flag;
}

?>

intval函数本来想着将十六进制转换十进制可不可以 不可以 必须给定第二个参数intval($str, 16);

ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE) 必须a-z开头 a-z结尾 如果没匹配上 执行语句块

为了让他不执行语句块 只能让他匹配上 a%00778 只能使用截断了 ereg函数就有这个漏洞 识别%00也就是空字符就不往下识别了 从而绕过了死亡函数

经过反转877空字符a 就转换为了877 所以最终能得到flag

知识点:

==弱比较 十进制877和十六进制0x36进行比较的时候 是相等的 因为php会将其中十六进制自动转换为十进制

web109

<?php
highlight_file(__FILE__);
error_reporting(0);
if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];

    if(preg_match('/[a-zA-Z]+/', $v1) && preg_match('/[a-zA-Z]+/', $v2)){
            eval("echo new $v1($v2());");
    }
}

#但是这道题没给类所以要使用内置类
#死记硬背 有个mysqli内置类 用于mysql连接的 需要传递很多参数用于连接数据库 如果这时传递一个函数作为参数 也会执行 比如phpinfo 

这个页面还在加载也就是还在连接数据库中 显然他肯定连接不上

 既然能执行phpinfo 那肯定就能执行system('ls')

知识点system('ls')()()多几个括号不报错

知识点题外话 php可能有很多内置类 在phpinfo中是可以看到的

 exception类也如此 这东西就是死记硬背简单理解就行 记住这个类实例化时传入函数可以被执行 前提是实例化的对象被echo输出

小知识 echo phpinfo() 会输出php信息 不使用echo也可以输出php信息

echo system('ipconfig'); 也是一个道理 不使用echo也是可以将结果输出到页面来

但是字符串必须要echo才能输出到页面来因为出发了tostring 有return的返回值 使用echo输出

这道题弄了将近两个点 很多很多基础知识都是很基础的

web110

<?php
highlight_file(__FILE__);
error_reporting(0);
if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];

    if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v1)){
            die("error v1");
    }
    if(preg_match('/\~|\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]/', $v2)){
            die("error v2");
    }

    eval("echo new $v1($v2());");

}

?>

和上一道题同理 但是传参的时候禁用了很多字符 貌似没影响

尝试一下看看有什么影响

?v1=mysqli&v2=phpinfo 成功

?v1=mysqli&v2=system(ls) 不成功查看后发现禁用了()  

看来条件很苛刻 看来只能使用正常的$v1($v2() 函数调用 只能使用内置类然后无参进行rce

rce远程命令执行

?v1=FilesystemIterator&v2=getcwd

DirectoryInterator:遍历目录的类
FilesystemIterator:遍历文件的类

getcwd函数获取当前目录的路径返回一个字符串

web111

<?php
highlight_file(__FILE__);
error_reporting(0);
include("flag.php");

function getFlag(&$v1,&$v2){
    eval("$$v1 = &$$v2;");
    var_dump($$v1);
}
if(isset($_GET['v1']) && isset($_GET['v2'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];

    if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v1)){
            die("error v1");
    }
    if(preg_match('/\~| |\`|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\-|\+|\=|\{|\[|\;|\:|\"|\'|\,|\.|\?|\\\\|\/|[0-9]|\<|\>/', $v2)){
            die("error v2");
    }
    if(preg_match('/ctfshow/', $v1)){
            getFlag($v1,$v2);
    }
}
?>

本来以为没什么难度 正常传值 ?v1=ctfshow&v2=falg 但是输出NULL也就是没有值 这是为什么呢

因为在方法外部进行的文件包含 在方法内部不能直接调用文件包含的文件中的变量的 不光是文件包含的变量 只要是方法外部的变量就不能在方法内使用 除非传参

那就使用全局变量$GLOBALS 将全局变量的所有值赋值给$ctfshow 然后进行输出

知识点 死记硬背即可

1 eval("$$v1 = &$$b;"); 可以

eval("$v1 = &$b;"); 不可以 

ai说是eval函数的原因无法直接处理引用 但是对$$又有特殊规则

2 $GLOBALS 全局变量 是一个数组里面存着所有变量的名和值

web112

<?php
highlight_file(__FILE__);
error_reporting(0);
function filter($file){
    if(preg_match('/\.\.\/|http|https|data|input|rot13|base64|string/i',$file)){
        die("hacker!");
    }else{
        return $file;
    }
}
$file=$_GET['file'];
if(! is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";
}

有一个判断 参数不能是个文件 这该如何绕过 

直接用过滤器 过滤器不影响 伪协议不影响file_get_contents,和highlight_file。

php://filter/resource=flag.php
php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php
php://filter/read=convert.quoted-printable-encode/resource=flag.php
compress.zlib://flag.php

web113

和上一题同理就是不能使用filter php过滤器了 

它试图打开并读取经过 zlib 压缩的 flag.php 文件,并返回解压后的内容 不是压缩文件也可以 简单记住就是远程读取文件 是一个伪协议compress.zlib://flag.php 不影响file_get_contents,和highlight_file。

<?php
highlight_file(__FILE__);
error_reporting(0);
function filter($file){
    if(preg_match('/filter|\.\.\/|http|https|data|data|rot13|base64|string/i',$file)){
        die('hacker!');
    }else{
        return $file;
    }
}
$file=$_GET['file'];
if(! is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";
} <?php

预期解就是目录溢出
预期解payload:

file=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

在linux中/proc/self/root是指向根目录的,也就是如果在命令行中输入ls /proc/self/root,显示的内容是根目录下的内容
原理:利用函数所能处理的长度限制进行目录溢出: 原理:/proc/self/root代表根目录,进行目录溢出,超过is_file能处理的最大长度就不认为是个文件了

知识点 highlight_file 不能高亮显示数组

web114

<?php
error_reporting(0);
highlight_file(__FILE__);
function filter($file){
    if(preg_match('/compress|root|zip|convert|\.\.\/|http|https|data|data|rot13|base64|string/i',$file)){
        die('hacker!');
    }else{
        return $file;
    }
}
$file=$_GET['file'];
echo "师傅们居然tql都是非预期 哼!";
if(! is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";
}

无法使用目录溢出 禁用了root

无法使用读取压缩文件的伪协议compress.zlib://flag.php

但是发现他并没有禁用filter过滤器 php://filter/resource=flag.php

web115

<?php
include("flag.php");
highlight_file(__FILE__);
error_reporting(0);
function filter($num){
	$num=str_replace("0x","1",$num);
	$num=str_replace("0","1",$num);
	$num=str_replace(".","1",$num);
	$num=str_replace("e","1",$num);
	$num=str_replace("+","1",$num);
	return $num;
}
$num=$_GET['num'];
# 必须是数字或者数字字符串  不能完全等于字符36  函数返回值等于字符36
if(is_numeric($num)and $num!=='36'and trim($num)!=='36'and filter($num)=='36'){
	if($num=='36'){
		echo $flag;
	}
	else{
		echo "hacker";
	}
}
else{
	echo"hacker";
}

%0c36 

is_numeric($num) ‘   36’ 在数字前加空格 也会认为是数字字符串

$num!=='36'  不完全等于‘36’ 因为有个tab

trim($num)!=='36' 去空格 但是不去除%0c

filter($num)=='36' ‘36’与‘    36’ 进行弱类型比较是相等的

知识点

  1. \t 的意思是 :水平制表符。将当前位置移到下一个tab位置。%09

  2. \r 的意思是: 回车。将当前位置移到本行的开头。%0D

  3. \n 的意思是:回车换行。将当前位置移到下一行的开头。%0A

  4. \f的意思是:换页。将当前位置移到下一页的开头。%0C

  5. \0的意思是:空字符 %00

  6. \v的意思是:垂直制表符 和制表符差不多意思%0B

  7. 空格是%20

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

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

相关文章

就业|高校毕业生就业信息小程序|基于微信小程序的高校毕业生就业信息的设计与实现(源码+数据库+文档)

高校毕业生就业信息小程序目录 目录 基于微信小程序的高校毕业生就业信息的设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户小程序模块 2、用户信息管理 2、职位招聘管理 3、公司信息管理 4、论坛信息管理 四、数据库设计 1、实体ER图 五、核心代码 …

【十六】【C++】stack的常见用法和练习

stack的常见用法 C标准库中的stack是一种容器适配器&#xff0c;它提供了后进先出&#xff08;Last In First Out, LIFO&#xff09;的数据结构。stack使用一个底层容器进行封装&#xff0c;如deque、vector或list&#xff0c;但只允许从一端&#xff08;顶部&#xff09;进行…

C++ //练习 6.4 编写一个与用户交互的函数,要求用户输入一个数字,计算生成该数字的阶乘。在main函数中调用该函数。

C Primer&#xff08;第5版&#xff09; 练习 6.4 练习 6.4 编写一个与用户交互的函数&#xff0c;要求用户输入一个数字&#xff0c;计算生成该数字的阶乘。在main函数中调用该函数。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代…

分析“e^iπ+1=0”的错谬及其违反数学规则

如果评选从远古到现代对人类智商羞辱最严重的事件&#xff0c;欧拉公式“e^iπ-1”若说第二、就没有哪个能称第一。 看下面罗列的关系&#xff0c;数学伦理在大数学家欧拉眼里形同虚设&#xff1a; ①“e^iπ-1”没有代码&#xff0c;不能表示数量变化关系&#xff0c;它来自e^…

【Docker】Docker Container(容器)

文章目录 一、什么是容器&#xff1f;二、为什么需要容器&#xff1f;三、容器的生命周期容器OOM容器异常退出容器暂停 四、容器命令详解docker createdocker logsdocker attachdocker execdocker startdocker stopdocker restartdocker killdocker topdocker statsdocker cont…

【网站项目】028蜀都天香酒楼管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【蓝桥杯选拔赛真题34】C++最大值 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C最大值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C/C最大值 第十三届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现&#xff08;C&#xff09; 给定一个…

黄金交易策略(Nerve Nnife.mql4):趋势做单

完整EA&#xff1a;Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 当大小趋势相同行情走向也相同&#xff0c;就会开仓做顺势单&#xff0c;并会顺势追单&#xff0c;以达到快速止盈平仓的效果。大趋势追求稳定&#xff0c;小趋势追求敏捷&#xff0c;行情走向比小趋势更敏…

【JAVA-Day75】Java字节输出流,掌握OutputStream

标题 《Java字节输出流深度解析&#xff1a;掌握OutputStream的奥秘》摘要引言一、什么是字节输出流 &#x1f680;基本原理常用方法write(int b)write(byte[] b)write(byte[] b, int off, int len) 示例代码注意事项 二、字节输出流操作TXT &#x1f4c4;文件写入基本步骤示例…

i.MX6ULL 嵌入式学习(一)

i.MX6ULL 嵌入式学习(一) i.MX6ULL理论知识 i.MX6ULL 嵌入式学习(一)进程psipc 进程间通信管道信号(类似中断)system-V 消息队列system-V 信号量system-V 共享内存 进程 创建进程(复制)&#xff0c;同程序 fork #include<unistd.h> a. 返回值 成功 0 或 非负非零整数( 父…

FL Studio版本升级-FL Studio怎么升级-FL Studio升级方案

已经是新年2024年了&#xff0c;但是但是依然有很多朋友还在用FL Studio12又或者FL Studio20&#xff0c;今天这篇文章教大家如何升级FL Studio21 FL Studio 21是Image Line公司开发的音乐编曲软件&#xff0c;除了软件以外&#xff0c;我们还提供了FL Studio的升级服务&#…

【C语言】assert断言:保护程序的利器

在软件开发过程中&#xff0c;我们经常会遇到一些假设条件或者预期行为。例如&#xff0c;我们可能假设一个函数的输入参数必须在某个范围内&#xff0c;或者某个变量的值应该满足特定的条件。当这些假设或预期行为被打破时&#xff0c;程序可能会出现异常行为&#xff0c;甚至…

轻薄型机型EM-T195,对移动作业so easy

由于移动工作环境特殊且不固定&#xff0c;不仅温差大&#xff0c;还会产生潮湿、干燥、灰尘等恶劣气候环境&#xff0c;使普通平板电脑无法适应移动工作。但三防平板电脑是设计制造的&#xff0c;材料特殊&#xff0c;可以平静面对上述恶劣环境&#xff0c;保证随时随地保持良…

备战蓝桥杯---数学基础3

本专题主要围绕同余来讲&#xff1a; 下面介绍一下基本概念与定理&#xff1a; 下面给出解这方程的一个例子&#xff1a; 下面是用代码实现扩展欧几里得算法&#xff1a; #include<bits/stdc.h> using namespace std; int gcd(int a,int b,int &x,int &y){if(b…

C++三剑客之std::optional(一) : 使用详解

相关文章系列 C三剑客之std::optional(一) : 使用详解 C三剑客之std::any(一) : 使用 C之std::tuple(一) : 使用精讲(全) C三剑客之std::variant(一) : 使用 C三剑客之std::variant(二)&#xff1a;深入剖析 目录 1.概述 2.构建方式 2.1.默认构造 2.2.移动构造 2.3.拷贝构…

【深度学习:迁移学习】图像识别预训练模型的迁移学习

【深度学习&#xff1a;迁移学习】图像识别预训练模型的迁移学习 什么是迁移学习&#xff1f;为什么不从头开始训练模型&#xff1f;迁移学习的优点是&#xff1a;如何使用预训练模型进行迁移学习&#xff1a;迁移学习的过程&#xff1a;实施迁移学习来构建人脸识别模型&#x…

tcp 中使用的定时器

定时器的使用场景主要有两种。 &#xff08;1&#xff09;周期性任务 这是定时器最常用的一种场景&#xff0c;比如 tcp 中的 keepalive 定时器&#xff0c;起到 tcp 连接的两端保活的作用&#xff0c;周期性发送数据包&#xff0c;如果对端回复报文&#xff0c;说明对端还活着…

【GAMES101】Lecture 22 物理模拟与仿真

目录 单粒子模拟 显式欧拉方法 改进 中点法/修正的欧拉方法 自适应步长 隐式欧拉方法 非物理改变位置&#xff08;Position-Based / Verlet Integration&#xff09; 刚体模拟 流体模拟 单粒子模拟 先来研究粒子的运动&#xff0c;假设有一个速度矢量场&#xff0c;对…

记录一下,我使用stm32实现pwm波输入,以及对频率和占空比的计算,同时通过串口输出(实现-重要)

1&#xff0c;首先看下半物理仿真 看下我的配置&#xff1a; 看下计算方法以及matlab的仿真输出的数据&#xff1a; timer3的ch2是选择高电平&#xff0c;计算频率 timer3的ch1是选择的是低电平&#xff0c;用来计算周期 其中TemPIpre表示的是CH2输出的值&#xff0c; TemPI…

牛客周赛 Round 32 解题报告 | 珂学家 | 状压 + 前缀和异或map技巧

前言 整体评价 属于补题&#xff0c;大致看了下&#xff0c;题都很典。 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 A. 小红的 01 背包 思路: 数学题 v, x, y list(map(int, input().split()))print (v // x * y)B. 小红的 dfs 思路: 枚举 其实横竖都有dfs…