CUDA与CUDNN安装教程
CUDA与CUDNN安装教程(torch.cuda.is_available() 的返回值为true)前言在跑训练算法的时候,发现算法用的一直都是CPU去跑,导致于CPU被占满了,一直发热,所以决定去解决torch.cuda.is_available() 的返回值为false这个问题,刚好我的电脑有独立显卡GTX1650
解决办法GPT去寻找解决办法
可能是没有安装CUDAtoolkit,和CUDNN
安装的CUDAtoolkit与pytorch-gpu版本不一样
没有独立显卡
首先独显我是有的,但是我确实没有独立安装CUDAtoolkit和CUDNN,可能是这个原因,第二个原因也说可能版本不对,所以安装的时候得注意版本,我们先去看看我们的版本的pytorch支持的CUDAtoolkit是多少,先去官网查询一下,https://pytorch.org/get-started/locally/
发现最高支持的CUDA版本为12.1
查看一下本地CUDA的版本
命令为nvidia-smi
发现本地的CUDA版本为12.4,于是我们只能安装12.1的CUDAtoolkit了
安装CU ...
CTF竞赛权威指南之汇编基础的学习
CTF竞赛权威指南之汇编基础的学习0x1 CUP架构与指令集0x1.1 指令集架构
最先诞生的是复杂指令集计算机(CISC),典型代表就是x86处理器。
后面1974年IBM提出了精简指令计算机(RISC)的概念。旨在通过减少指令的数量和简化指令的格式来优化和提高CPU的指令执行效率。典型代表是ARM处理器。
两种指令集的对比
大多数RISC的指令长度是固定的,对于32位的ARM处理器,所有指令都是4个字节,即32位;而CISC的指令长度是不固定的,通常在1到6个字节之间。固定长度的指令有利于解码和优化,可以实现流水线,缺点则是平均代码长度更大,会占用更多的存储空间。
基于80%的工作由其中20%的指令完成的原则,RISC设计的指令数量相对较少,或者说更简洁。
对于寻址方式,由于ARM采用了load/store架构,处理器的运算指令在执行过程中只能处理立即数,或者寄存器中的数据,而不能访问内存。因此,存储器和寄存器之间的数据交互,由专门的load(加载)和store(回存)指令负责。相反,X86既能处理寄存器中的数据,也能处理存储器中的数据,因此寻址方式更加多样 ...
CTF比赛类型
CTF比赛类型题目类型在CTF中主要包含以下5个大类的题目,有些比赛会根据自己的侧重点单独添加某个分类,例如移动设备(Mobile), 电子取证(Forensics)等,近年来也会出来混合类型的题目,例如在Web中存在一个二进制程序,需要选手先利用Web的漏洞获取到二进制程序,之后通过逆向或是Pwn等方式获得最终flag
WebWeb类题目大部分情况下和网、Web、HTTP等相关技能有关。主要考察选手对于Web攻防的一些知识技巧。诸如SQL注入、XSS、代码执行、代码审计等等都是很常见的考点。一般情况下Web题目只会给出一个能够访问的URL。部分题目会给出附件
所需知识:PHP、python、SQL、计算机网络、OWASP TOP10
PwnPwn类题目重点考察选手对于二进制漏洞的挖掘和利用能力,其考点也通常在堆栈溢出、格式化漏洞、UAF、Double Free等常见二进制漏洞上。选手需要根据题目中给出的二进制可执行文件进行逆向分析,找出其中的漏洞并进行利用,编写对应的漏洞攻击脚本(Exploit),进而对主办方给出的远程服务器进行攻击并获取flag通常来说Pwn类题目给出的远程服 ...
CTFwiki之基本ROP
CTFwiki之基本ROP现在才知道CTFwiki上有这么多的好东西,果断转换到这里来学,在这里能学到很多好东西。
基本 ROP - CTF Wiki (ctf-wiki.org)
这是官方给出的wp。
接下来开始写我自己对这些题的理解和收获。
ret2text原理
ROP的基本原理就是栈溢出,只是通过栈溢出,然后返回的地址不同罢了。这里就是返回回程序本来就有的函数。
由给出的题来解释这个原理。
题目
通过checksec和file命令查出该文件只开启了堆栈不可执行保护,是个32位的程序。
ida反汇编看出来,这里存在栈溢出漏洞。
接下来就是寻找该数组到返回地址的偏移是多少来控制返回地址。
其实这里是可以看出来偏移为多少的,但是ida算出来的偏移地址有时候是有问题的,最好是以gdb调试出来的返回地址为准。(这里的偏移地址就有问题,这里算出来是0x68,但是实际上并不是,貌似可能是ida的机制问题,没有去细细研究)
接下里就是通过gdb调试来调试出偏移地址。
1230x80486a7 <main+95> lea eax, [esp + 0x1c] 0x ...
CTF PWN 题之 setbuf 的利用
setbuf 的利用前言在学习IO_FILE的时候,学到关于IO_FILE结构体的时候死活都不理解为什么在pwn题要设置缓冲区才能够有显示,不设置的话就没有显示,学到了setbuf的时候了解到了setbuf的利用,于是写这篇笔记,算是对自己的学习加深理解,文章很多参考其他师傅的,后面会给出参考链接
setbuf关于IO__FILE的结构体介绍和几个std(stdin,stdout,stderr)这里就不介绍了。有兴趣的师傅可以参考我的另一篇笔记
C 库函数 void setbuf(FILE *stream, char *buffer) 定义流 stream 的缓冲区在哪。除非 buffer 是 NULL 。
也就是说buffer这个数组会被设置为stream的缓冲区,当你调用 setbuf 函数并将其 BUFF 参数设置为 NULL(通常用数字 0 表示)时,你正在告诉标准I/O库停用缓冲机制。
deme案例为了方便理解setbuf函数的用法,这里写两个demo案例
demo (setbuf buff)代码如下
12345678#include<stdio.h>i ...
CPU卡加密系统与M1加密系统比较
CPU卡加密系统与M1加密系统比较非接触CPU卡与逻辑加密卡1、 逻辑加密存储卡逻辑加密存储卡:在非加密存储卡的基础上增加了加密逻辑电路,加密逻辑电路通过校验密码方式来保护卡内的数据对于外部访问是否开放,但只是低层次的安全保护,无法防范恶意性的攻击。
早期投入应用的非接触IC卡技术多为逻辑加密卡,比如最为著名的Philips公司(现NXP)的Mifare 1卡片。非接触逻辑加密卡技术以其低廉的成本,简明的交易流程,较简单的系统架构,迅速得到了用户的青睐,并得到了快速的应用和发展。据不完全统计,截至去年年底,国内各领域非接触逻辑加密卡的发卡量已经达到数亿张。随着非接触逻辑加密卡不断应用的过程,非接触逻辑加密卡技术的不足之处也日益暴露,难以满足更高的安全性和更复杂的多应用的需求。特别是2008年10月,互联网上公布了破解MIFARE CLASSIC IC芯片(以下简称M1芯片)密码的方法,不法分子利用这种方法可以很低的经济成本对采用该芯片的各类“一卡通”、门禁卡进行非法充值或复制,带来很大的社会安全隐患。因此,非接触CPU卡智能卡技术正成为一种技术上更新换代的选择。
2、非接触CPU卡非接 ...
CPU 的 ring0,ring1,ring2,ring3
CPU 的 ring0,ring1,ring2,ring3Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用。如果普通应用程序企图执行RING0指令,则Windows会显示“非法指令”错误信息。
ring0是指CPU的运行级别,ring0是最高级别,ring1次之,ring2更次之…… 拿Linux+x86来说, 操作系统(内核)的代码运行在最高运行级别ring0上,可以使用特权指令,控制中断、修改页表、访问设备等等。 应用程序的代码运行在最低运行级别上ring3上,不能做受控操作。如果要做,比如要访问磁盘,写文件,那就要通过执行系统调用(函数),执行系统调用的时候,CPU的运行级别会发生从ring3到ring0的切换,并跳转到系统调用对应的内核代码位置执行,这样内核就为你完成了设备访问,完成之后再从ring0返回ring3。这个过程也称作用户态和内核态的切换。
RING设计的初衷是将系统权限与程序分离出来,使之能够让OS更好的管理当前系统资源 ...
const和static的区别
const和static的区别const
const修饰的变量不能被更改,但是const修饰又有三种特殊的修饰方法。
const修饰指针——常量指针
const修饰常量——指针常量
const既修饰指针,又修饰常量
const修饰指针1const int *p = &a;(p为常量指针)
在被const修饰后,p为常量指针。
常量指证:指针的指向(即指向的地址)可以修改,但是指向的
数值不能修改。
const修饰常量1int *const p = &a;(p为指针常量)
指针常量:指针的指向不可以修改,指针指向的值可以修改
const既修饰指针,又修饰常量1const int* const p = &a;
指针指向的值和指向的地址都不能改。
staticstatic修饰的变量为全局变量,在局部函数进行完之后不会被销毁。
static修饰也有三种办法。
static修饰局部变量——静态局部变量
static修饰全局变量——静态全局变量
static修饰函数——静态函数
static修饰局部变量static可使得局部变量出了自己的范围也不会销毁,本质 ...
Colab使用教程
Colab使用教程前言有兴趣学习了李宏毅的Machine learning and deep learning的教程,对教授提出来的使用Google Colab作为训练神经网络的平台深感有用,特此记录使用方法
一、Colab介绍在第一次使用Colab时,最大的困难无疑是对整个平台的陌生而导致无从下手,因此我们首先介绍一些与Colab相关的基础概念,以帮助大家更快地熟悉Colab平台。
Colab是什么?Colab = Colaboratory(即合作实验室),是谷歌提供的一个在线工作平台,用户可以直接通过浏览器执行python代码并与他人分享合作。Colab的主要功能当然不止于此,它还为我们提供免费的GPU。熟悉深度学习的同学们都知道:CPU计算力高但核数量少,善于处理线性序列,而GPU计算力低但核数量多,善于处理并行计算。在深度学习中使用GPU进行计算的速度要远快于CPU,因此有高算力的GPU是深度学习的重要保证。由于不是所有GPU都支持深度计算(大部分的Macbook自带的显卡都不支持),同时显卡配置的高低也决定了计算力的大小,因此Colab最大的优势在于我们可以“借用” ...
Cobalt Strike BOF原理分析
Cobalt Strike BOF原理分析0x01 Beacon Object File BOF(Beacon 对象文件)是C/C++编译,但未链接产生的Obj文件,BOF运行在Beacon进程中,并执行内部的Beacon API和Win32 API函数。BOF本质是COFF Obj文件,其符合COFF文件格式规范,结构类似于windows PE文件格式。在被Cobalt Strike加载和使用过程中,BOF是一段地址无关的Shellcode,BOF本身体积比较小,在传输过程中,适用于那些传输带宽小的模式,然后其本身运行在beacon进程内部,不会重新创建进程,也可以有效规避EDR。
0x02 如何开发BOF 下面是官方提供的一个demo
12345#include <windows.h>#include "beacon.h"void go(char * args, int alen) { BeaconPrintf(CALLBACK_OUTPUT, "Hello World: %s", arg ...



