自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CW2算法源码解析

该公式左半部分含义是尽量降低对抗样本与原始图像的L2距离,右半部分是为了达到误分类的目的。,也就是优化的起点。的值在目标函数中的权重,文中使用二分法来确定在成功产生对抗样本的情况下的最小的。中,同时其处处可导数,有利于优化。在代码中,该方法先将图像输入。来表示增加扰动后的图像,这样做可以保证扰动后的图像的范围在。在模型中的输出值logits。相关代码的解析我写在了注释中。表示双曲正切函数,本方法使用。越大,则最终的置信度越高。的值,可以控制对抗样本。对于目标标签的置信度,被误分类为了目标标签。

2023-11-15 16:21:27 226

原创 JMSA(Jacobian Saliency Map Attack)算法源码解析

通过显著图寻找对分类器特定输出影响程度最大的输入特征对,即每次计算得到两个特征。作者引入了显著图的概念,该概念来自于计算机视觉领域,表示不同的输入特征对分类结果的影响程度。通过如上的前向梯度,我们可以知道每个像素点对模型分类的结果的影响程度,进而利用前向梯度信息来更新干净样本。FGSM、PGD等算法生成的对抗样本的扰动方向都是损失函数的梯度方向(可以参考。的偏导,该偏导值表示不同位置的像素点对分类结果的影响程度。,生成的对抗样本就能被分类成为指定的类别。),该论文生成的对抗样本的扰动方向是。

2023-11-08 19:39:44 270

原创 PGD(projected gradient descent)算法源码解析

换句话说,也就是图像开始迭代的起点随机,而不是像BIM算法一样从原始图像开始迭代。论文这么做的目的是为了研究从随机的起点开始迭代扰动,损失能够达到的不同的局部最大值的关系。目标标签的选取有多种方式,例如可以选择与真实标签相差最大的标签,也可以随机选择除真实标签外的标签。PGD算法(projected gradient descent)是在BIM算法的基础上的小改进,二者非常相近,BIM算法的源码解析在。,torch就会在图像的计算过程中自动计算计算图,用于反向梯度计算。:获得图像的在模型中的输出值。

2023-11-04 22:27:56 2169 4

原创 1024快乐~

₍ᐢ..ᐢ₎♡。

2023-10-31 10:18:39 108

原创 BIM&ILLC算法源码解析

的作用:在迭代更新过程中,随着增加扰动的次数的增加,样本的部分像素值可能会溢出,比如超出0到1的范围,这时需将这些值用0或1代替,最后才能生成有效的图像。于是本篇论文就提出迭代的方式来找各个像素点的扰动,而不是一次性所有像素都改那么多,即迭代式的FGSM。,因为论文中认为这足够对抗性示例到达最大范数球的边缘,同时也保证实验的计算成本可控。的情况下找到对抗样本的,如果找不到,最差的效果就跟原始的FGSM一样。迭代的含义:每次在上一步的对抗样本的基础上,各个像素增长。:获得图像的在模型中的输出值。

2023-10-31 10:15:51 365

原创 FGSM(Fast Gradient Sign Method)算法源码解析

可以仔细回忆一下,在神经网络的反向传播当中,我们在训练过程时就是沿着梯度下降的方向来更新更新。之间是近似线性的,但是这个线性假设不一定正确,如果J JJ和x xx不是线性的,那么在。是将克隆的新的tensor从当前计算图中分离下来,作为叶节点,从而可以计算其梯度;于是,有学者就提出迭代的方式来找各个像素点的扰动,也就是BIM算法。,得到的“扰动”加在原来的输入 上就得到了在FGSM攻击下的样本。中大于1的部分设为1,小于0的部分设为0,防止越界。:获得图像的在模型中的输出值。对输入的导数,然后用符号函数。

2023-10-28 11:03:22 410

原创 【CTF-web】buuctf-[CISCN2019 华北赛区 Day2 Web1]Hack World(sql盲注)

根据上图可知,页面中已经告诉我们要从flag表中的flag列取出flag,思考是sql注入。经过抓包发现发post包中的id字段是注入点。同时还发现是盲注,即当存在SQL注入时,攻击者无法通过页面或请求的返回信息,回显或获取到SQL注入语句的执行结果。由此可以通过if函数来测试flag每一位的值,以下为编写的测试脚本。经测试当输入id=1时,结果为。,发现过滤了空格、#等符号。,当id=2时,结果为。

2023-08-18 17:33:29 393 1

原创 【CTF-web】buuctf-[极客大挑战 2019]EasySQL 1(sql注入)

根据题目判断出可能需要sql注入,看源码可知数据是通过GET的方式传输的,即放在url的username和password两个参数中。,password可以为任何值,即可顺利登录。只要将username输入为。

2023-08-18 15:32:24 256

原创 【CTF-web】bugku-成绩查询(sql注入)

再测试,当id为1’时,无数据,而当id为1’#时,又正确返回了数据,推测构造的数据库查询语句可能是类似。查询skctf库中的表的名称,结果其中有一个表名为fl4g,很可能其中就包含了flag。查询fl4g表中的列名,发现其中有一列的名称为skctf_flag。如上图所示,当id为1时返回名字为“龙龙龙”的成绩单。我们要找到能返回能够返回我们需要的信息的位置,当。时,数据不显示,可以知道一列数据有4列。时,我们可以查询到库名,如下图所示。这样的,其中XX为传入的参数。时,可以正常显示,直到。

2023-08-17 18:38:05 508

原创 【CTF-web】备份是个好习惯(查找备份文件、双写绕过、md5加密绕过)

由代码可知我们要绕过md5加密,两数如果满足科学计数法的形式的话,php会将其当作科学计数法所得的数字来进行比较,根据该原理,如果两个md5码是0e开头且满足科学计数法的表示形式就会判断相等(只对==比较有效,===无效)。还有一个问题,那就是str_replace()函数,原代码中会将’key’给删去,所以我们要用双写绕过,将key写成kekeyy即可。经过扫描可以找到index.php.bak备份文件,下载下来后打开发现是index.php的原代码,如下图所示。于是在url最后输入?

2023-08-16 15:20:13 870

原创 【CTF-web】变量1(php全局变量)

注意到$$args,那么我们可以通过args输入一个已定义变量的名称来得到它的值,于是查询php的九大全局变量,如下表所示。

2023-08-15 15:40:52 824

原创 【CTF-MISC】眼见非实(掌握各类文件头)

下载是一个.docx文档,用010 Editor打开查看文件头发现应该是zip文件,修改后缀后解压,查找flag。各类常用文件头如下表所示。

2023-08-14 17:01:13 269

原创 【CTF-MISC】1和0的故事(二维码定位点补全)

文件中得到一个01方阵,可以在010 Editor中高亮设置将1涂为黑色、0涂为白色,如下图所示。截图以后调整大小再加入三个定位点即可得到二维码。要注意的是定位点和内容之间有一格空隙。

2023-08-14 16:39:43 620 1

原创 【CTF-MISC】这是一张单纯的图片

在文件末尾可以看到疑似HTML实体的内容,将其解码即可得到答案。

2023-08-14 15:45:50 110

原创 【CTF-web】修改请求头(XFF)

该请求标头是一个事实上的用于标识通过代理服务器连接到 web 服务器的客户端的原始 IP 地址的标头。我们可以通过伪造XFF头来假装本地登录,即在request头中加入。随意输入后可以看到需要本地管理员登录,得知这是一道需要修改XFF头的题。

2023-08-13 18:06:14 769

原创 数据库三大范式、BC范式、第四范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。

2023-03-04 16:42:26 5873 1

原创 PAT(甲级)2022年夏季 3

看dfs顺序是否合法,模拟dfs的过程。如果当前应该遍历到的点为cntcntcnt,找当前所有可能到的点是否存在cntcntcnt:若存在:则先cnt++cnt++cnt++,然后走到该点,继续该步骤;否则:cntcntcnt应该在现在所在点的先前节点,那么如果此时现在所在的点的所有连接的节点(有向边)还有没有遍历到的点,下一个点就不可能是cntcntcnt,该dfs顺序就不合法。若现在所在点的所有连接的点都遍历过了,就可以直接回退。要注意的是某个点搜完回退回来时,要再判断cntcntcnt和该点是

2022-06-10 00:10:32 289

原创 git基本操作及原理

git的使用1 git的安装使用库安装:sudo apt updatesudo apt-get install git测试:git --version2 git工作流程概念:工作区:就是你在电脑里能看到的目录。暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。3 git常用命令

2021-12-11 20:15:19 270

原创 【2021ICPC上海站】H-Life is a Game(kruskal重构树)

题目链接:https://ac.nowcoder.com/acm/contest/24872/H分析利用kruskal重构树,倍增法向上找到能够走到的最远点,再维护一个子树和即可。代码#include <bits/stdc++.h>#define INF 0x3f3f3f3ftypedef long long ll;const int maxn = 2e5+5;const int mod = 1e9+7;using namespace std;ll sz[maxn], va

2021-11-30 16:59:48 7150 2

原创 【CF1611】E. Escape The Maze(easy+hard)

E1题目链接:https://codeforces.com/contest/1611/problem/E1E2题目链接:https://codeforces.com/contest/1611/problem/E2分析我们定义一个点叫做安全点,即走到这个点上即可到达安全的叶子节点(不会被朋友逮到);朋友初始站的点叫朋友点,否则叫非朋友点;deep[i]deep[i]deep[i]表示第iii号点的深度,md[i]md[i]md[i]表示在第iii号点下面距离iii最近的朋友点的深度。很明显若一个点是叶

2021-11-26 11:43:32 671 2

原创 【CF1610】D. Not Quite Lee(lowbit)

题目链接:https://codeforces.com/contest/1610/problem/D分析所有情况减去不符合要求的情况。可以发现,一个奇数是必定可以的,因为可以以000为中点对称,同理,一些数的和为奇数也是可以满足要求的。那么我们就不必考虑奇数以及和为奇数的情况。经过推断可以发现,若两个数的lowbitlowbitlowbit是不同的,那么他们一定不可以满足要求(例如{2,4}\{2,4\}{2,4})。两个相同lowbitlowbitlowbit的数可以加成一个高一位的lowbit

2021-11-25 00:11:05 529

原创 【CF1612】D. X-Magic Pair(数学)

题目链接:https://codeforces.com/contest/1612/problem/D分析可以发现只需要一直将两个数中较大的那个数变小就可以得到所有能得到的数字,需要注意的是,每次都需要把小的那个数化为最小(例如a=6,b=8a=6,b=8a=6,b=8,需要先将aaa化为222),这样才能得到所有情况。代码#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned

2021-11-22 20:08:39 1019

原创 【CF1612】E. Messages(排序)

题目链接:https://codeforces.com/contest/1612/problem/E分析根据每个位置kkk值的和降序排序,因为kkk最大只有202020,所以最多设置前202020个位置。把202020种情况都跑一遍算一遍期望取最大就是答案。代码#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair&lt

2021-11-22 19:57:17 1039 4

原创 【CF1201】D. Treasure Hunting(dp动态规划)

题目链接:https://codeforces.com/problemset/problem/1201/D分析可以发现,若一行中所有的宝箱刚好都被拿完之后,只可能停在最左边或者最右边的宝箱。那么该行的最左边的宝箱点可以从上一行的最左边或最右边的宝箱点的状态转移过来。我们设dp[i][0]dp[i][0]dp[i][0]为刚好拿完前iii行宝箱后停留在第iii行最左端的宝箱的状态的最少步数,dp[i][1]dp[i][1]dp[i][1]则为刚好拿完前iii行宝箱后停留在第iii行最右端的宝箱的状态的

2021-11-15 21:24:45 487

原创 【CF1605】D. Treelabeling(二分图)

题目链接:https://codeforces.com/contest/1605/problem/D分析根据题意,我们需要尽量让两个相连的点之间不能到达,于是想到二分图。我们发现,两个数若最高位不同,那么必定不能到达,于是可以根据最高位将n个数划分为若干个不同的集合,集合之间的数不能互相到达。(例如n=9时,我们可以划分为4个集合{1},{2,3},{4,5,6,7},{8,9},集合size分别是1,2,4,2)那么我们只需要根据二分图不同颜色的数量将这些集合组合成两个集合,再将答案填入即可。根

2021-11-13 12:26:47 589

原创 【CF1280】C. Jeremy Bearimy(贪心)

题目链接:https://codeforc.es/contest/1280/problem/C分析**最小值:**根据贪心策略,我们每一条边用的次数要尽量少,如果一条边的两边都有偶数个点,那么这条边肯定不用;相反的,如果一条边两边都有奇数个点,那么这条边不得不用,因为奇数个点不足以都凑成对,必须跨边去借点。**最大值:**类似于最小值的思路,每一条边我们要用尽量多的次数,如果一条边的两边分别有 n ,2 * k - n 个点,那么这条边最多可以被用到 min(n, 2 * k - n) 次,这样我们就

2021-10-24 10:05:35 1456

原创 【CF1389】E. Calendar Ambiguity(数论)

题目链接:https://codeforces.com/problemset/problem/1389/E分析根据所给条件,可以写出:(x−1)d+y≡(y−1)d+x (mod w)(x-1)d+y\equiv (y-1)d+x \ (mod \ w)(x−1)d+y≡(y−1)d+x (mod w)进一步推出:(x−y)(d−1)≡0 (mod w)(x-y)(d-1)\equiv 0\ (mod\ w)(x−y)(d−1)≡0&nbsp

2021-10-23 21:53:10 145

原创 【CF1391】D. 505(思维+dp)

题目链接:https://codeforces.com/problemset/problem/1391/D分析可以发现情况为4×44\times44×4以及更大时,不存在符合要求的矩阵,所以只需要判断n=1,2,3n=1, 2, 3n=1,2,3三种情况:n==1n==1n==1:不存在长度是偶数的方阵,答案即000n==2n==2n==2:每列111的数量须是奇偶交错,两种情况试一遍即可n==3n==3n==3:定义dp[i][a][b][c]dp[i][a][b][c]dp[i][a][b]

2021-10-23 00:00:59 118

原创 【CF1398】E. Two Types of Spells(set)

题目链接:https://codeforces.com/problemset/problem/1398/E分析不难发现,每次我们要让能被双倍使用的咒语尽量大,能被双倍使用的咒语数量就是1类咒语的数量。而能被双倍使用的咒语即是除了第一次使用的1类咒语外的所有咒语。根据贪心的思想,第一次使用的1类咒语肯定是1类咒语种最小的,其他咒语根据大小排序之后选择最大的几个即可。可以用set来维护,具体实现看代码。代码#include<bits/stdc++.h>using namespace s

2021-10-22 11:56:37 133

原创 【CF1393】D. Rarity and New Dress(dp)

题目链接:https://codeforces.com/problemset/problem/1393/D分析如果仅考虑菱形的左上角那块三角,可以发现这是可以用dpdpdp来算出最大长度的,如果(i−1,j)(i - 1, j)(i−1,j)以及(i,j−1)(i, j - 1)(i,j−1)的颜色与(i,j)(i, j)(i,j)颜色相同,那么转移方程就为dp[i][j]=min(dp[i−1][j],dp[i][j−1])+1dp[i][j]=min(dp[i-1][j], dp[i][j-1])+

2021-10-22 11:49:17 108

原创 【CF1392】E. Omkar and Duck(构造)

题目链接:https://codeforces.com/problemset/problem/1392/E分析要构造除每一条路径上的和都不同的矩阵只需要根据类似字典序的构造方法即可代码#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int, int> pii;#define fi first#define se second#define lson (k &

2021-10-22 11:43:53 121

原创 CCPC-2020威海 C. Rencontre

题目链接:https://codeforces.com/gym/102798/problem/C分析三个人选出来的情况都是等概率的,所以答案就是每种情况的路程相加的和除以情况数。总情况数就是三个人可选的点数相乘。至于路程总和,对于每条边来说,若其一侧有一个人的点,另一侧有另外两个人的点,那么条边肯定是要被选择的,至于被选到的次数,一定是一侧有一个人的点,另一侧有两个,总共有六种情况,即可算出。注意每种情况路程总和可能会爆longlong,可以开__int128。代码#include<bi

2021-10-20 20:54:58 438

转载 构建笛卡尔树的两种方法

摘自:https://www.cnblogs.com/LiuRunky/p/Cartesian_Tree.html利用单调栈O(n)O(n)O(n):#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int N=100005;int n;int a[N];int root;int ls[N

2021-10-18 20:46:47 314

原创 【CF1437】E. Make It Increasing(最长上升子序列好题)

题目链接:https://codeforces.com/problemset/problem/1437/E分析简单地说,就是求被几个确定的数分成的每个区间内的最长上升子序列,我们可以对每个区间求一遍最长上升子序列。题目中会有约束:区间的两边是已经确定的数。可以先去除已经在这两个数范围之外的数,因为这样的数是一定要进行操作来修改的。那么如何求最长上升子序列呢,可以参考文章,时间复杂度为O(nlogn)O(nlogn)O(nlogn)。但是要将一个数列修改成严格单调是不能仅仅看最长上升子序列的,例如[

2021-10-09 14:04:54 154

转载 求最长上升子序列O(nlogn)

摘自:https://blog.csdn.net/qq_37774171/article/details/81203890假设存在一个序列d[1…9] ={ 2,1 ,5 ,3 ,6,4, 8 ,9, 7},可以看出来它的LIS长度为5。下面一步一步试着找出它。我们定义一个序列B,然后令 i = 1 to 9 逐个考察这个序列。此外,我们用一个变量Len来记录现在最长算到多少了首先,把d[1]有序地放到B里,令B[1] = 2,就是说当只有1一个数字2的时候,长度为1的LIS的最小末尾是2。这时L

2021-10-09 11:52:40 97

转载 求较大组合数对P取模的两种方法(Lucas定理)

摘自百度百科:https://baike.baidu.com/item/lucas/4326261?fr=aladdinint Lucas (ll n , ll m , int p) { return m == 0 ? 1 : 1ll*comb (n%p , m%p , p) * Lucas (n/p,m/p,p)%p ;}//comb()函数中,因为q , r < p , 所以这部分暴力完成即可。//C++求C(n, m) mod 10007 版本二 要求p z在100000左右

2021-10-06 14:33:53 230

原创 【CF1430】E. String Reversal(树状数组区间修改)

题目链接:https://codeforces.com/problemset/problem/1430/E分析先将字符串reverse一下,然后从后往前遍历,每次遍历一个字符,找到这个字符在原串中的最后一个位置,将其移动过来即可。简化一下,相当于每次将某个字符的最右边一个移动到最右边(用过以后要去掉),先记录每个字符的位置pospospos,然后记录这个字符前面有xxx个字符已经被移走了,答案就加上n−pos−xn-pos-xn−pos−x。每个位置的xxx值可以用树状数组来维护,维护区间修改。代

2021-10-01 20:12:24 119

原创 欧拉函数学习记录

欧拉函数及其性质:https://blog.csdn.net/qq_37493070/article/details/81988725

2021-09-26 18:59:09 89

原创 【CF1566】E. Buds Re-hanging(思维+dfs)

题目链接:https://codeforces.com/contest/1566/problem/E分析对于一棵树,我们可以将所有的bud都分离开来,分成许多最大深度为2的块:然后可以将其尽量往一条链上连:可以发现如果一个bud点有xxx个叶结点,那么其对答案的贡献为x−1x-1x−1。递归即可,具体看代码代码#include<bits/stdc++.h>using namespace std;typedef long long ll;#define fi first#

2021-09-13 10:50:09 1694 1

原创 【CF1569】D. Inconvenient Pairs(思维+二分)

题目链接:https://codeforces.com/contest/1569/problem/D分析横线和竖线分开来考虑,可以发现不方便的点对只会出现在相邻两条直线之间(不包含线上的点),那么我们只需要知道相邻两条直线之间有多少点就行了,注意要减去选同一直线上点的情况。代码#include<bits/stdc++.h>using namespace std;typedef long long ll;#define fi first#define se second#defi

2021-09-09 16:06:55 409

空空如也

空空如也

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

TA关注的人

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