C筑基——顺序结构
顺序结构基于过程的程序设计和算法程序(有限命令的有序集合)必须明确”做什么”,还要设计出具体的操作步骤,解决“怎么做”。 编程时需要给出计算机全部操作的具体过程,当程序执行完成,就实现了问题的求解。 在设计算法(解决某个问题的一组确定的有限的操作步骤)时间需要考虑:如何设计操作步骤,怎样保证正确性,怎样保证高效性。 一个基于过程的程序包括: (1)对数据的描述:数据结构(指定数据的类型和数据的组织形式) (2)对操作的描述:算法 程序 = 数据结构+算法 程序设计过程:具体问题→算法分析、设计→编写程序 【关键:算法设计&具体实现】 对于C++代码而言,一个源程序由三部分组成:预处理指令(如#include<>)+全局声明+函数(只能有一个main函数) 全局变量:变量在函数外进行声明(有效范围为全局) 局部变量:变量在函数内声明,仅在函数内部生效 C++语句声明语句声明变量/函数,对于变量的声明被认为一条语句,满足先定义后使用的原则; 执行语句控制语句: ...
软件安全逆向——基本概念
基本概念 关于软件安全的内容分享主要用于专业课程复习所用,所以我会直接打乱结构,分为可理解和需掌握两大部分分章节进行后续阐述。 可理解病毒?木马计算机病毒影响计算机使用并能自我复制的一组计算机指令或程序代码,具备感染性、潜伏性、破坏性和特定触发性; 蠕虫(worm)是一种特殊的计算机病毒,它利用网络进行复制和传播(传播自身功能的copy,或将自身的某些部分传到其他的系统中) 木马在表面伪装成可用软件,实际目的是危害计算机安全并导致严重破坏的计算机程序。(基于远程控制,具有非授权性和隐蔽性【攻击者会利用多种手段隐藏木马,使得即使被发现也难以确定位置】)。 漏洞分类0Day:处于未公开状态的漏洞,当前网络战的主要武器。 1Day:补丁发布在一天内的漏洞,通常指发布补丁时间不长的漏洞。 2Day:厂商已发现但未公开细节,未发布补丁的漏洞 已公开漏洞:大多数用户已打补丁的漏洞。 POC(样本验证代码)用于验证目标系统是否存在特定漏洞的一段程序或脚本。 漏洞应急响应机构CVE:(美国MIT)通用漏洞列表,实现了安全漏洞命名机制的规范化和标准化。 NVD:(美国技术局)美国国家漏洞数据库。...
C筑基——基础概念
C筑基——基础概念什么是程序设计语言 系统软件:管理计算机的各种资源(操作系统,语言处理程序等); 应用软件:专为实现某一应用开发的软件(QQ,WeChat等); 软件=程序(为完成特定任务而用某种语言编写的一组指令序列)+文档+数据; 程序设计语言分为:机器语言(计算机直接识别和执行,可读性差),汇编语言(加入助记符的二进制编码,通过Assembler转换为机器指令执行)和高级语言(易于学习和编程,编写成的程序成为源程序); 源程序通过compiler翻译为机器语言(目标程序)执行,目标程序与支持库代码连接构成可执行文件(.exe) C++语言特点:简洁高效,功能强(在C语言基础上增加了面向对象机制) C语言特点:结构化与模块化(面向过程) 程序设计过程:问题分析→算法设计→编写程序(对算法的具体描述)→运行调试(先编译后执行)→文档编写 基本知识 所有变量在使用前都需要定义,包括类型和变量名int a, 变量名的第一个字符只能是下划线或者字母 //单行注释; /* */多行注释;contol+/可对多行同时加注释,再按可取消 #预处理指令,类似于Pytho...
漏洞利用——从shellcode 到安全防护
漏洞利用基本概念 Exploit(漏洞利用)——指利用已有漏洞进行尝试/发起实质攻击。 其核心就在于利用程序漏洞去劫持进程的控制权,实现控制流劫持,以便执行植入的shellcode或者达到其它目的。早期攻击通常采用代码植入(上载一段代码,控制进程转向这段代码去执行,即劫持了进程的控制权)的方式,但是我们通常把它作为一个攻击动作的统称,实际动作还是看结构里的东西。 有漏洞不一定就有Exploit,因为其相较于vulnerable需要具备可行性 Shellcode 在广义上表示为植入进程的代码 Exploit结构: payload(触发漏洞,转移控制权) Shellcode 负责包含shellcode,并加壳(以触发漏洞并让系统/程序执行shellcode) 用来实现具体功能 Shellcode植入以一个含验证过程漏洞的程序案例展开, 1234567891011121314151617181920212223242526272829303132333435#include <iostream>#includ...
Crypto——GMR
GMR notation from A Digital Signature Scheme Secure Against Adaptive Chosen-Message Attacks SIAM Journal on Computing, 1988,by S. Goldwasser, S. Micali, R. Rivest . 在允许的攻击模型下,攻击者成功的概率有多大? 现代密码学中将安全性通过形式化的安全实验来定义,GMR就是用于描述的一套标准化记号体系。 建模 在GMR体系中,所有实体都会被形式化被建模为概率多项式时间算法(PPT): 对象1.系统算法: KeyGen(密钥生成),如:$$(pk,sk)\gets KeyGen(1^\lambda),1^\lambda为公共参数$$ Sign(签名)$$\sigma \gets Sign(sk,m),m即消息明文$$ Verify(验证,作为确定性布尔函数,返回1代表通过,返回0代表失败)$$b:=Verify(pk,m,\sigma)$$ Setup(初始化)等; 2.攻击者算法...
Web3入门—去中心化交易所的部署
一、ERC20代币合约部署 本次代币合约部署过程参考https://www.wtf.academy/en/course/solidity103/ERC20 ERC20是什么 ERC20是以太坊上的一种代币标准,由Vitalik Buterin于2025年11月提出。它实现了代币转移的基本逻辑: 账户余额 转移 批准转账 代币总供应量 令牌信息(optional):名称、符号、小数 基于此衍生的IERC20规定了代币需要实现的功能和事件,一种接口合约。定义接口的原因在于ERC20代币拥有通用的函数名和输入输出函数;在接口函数中只需要定义函数名和输出输出参数,无需关心函数内部的具体实现方式;因此函数分为内部实现和外部接口两部分,重点在于接口之间共享数据的实现和约定。这就是为什么在合约的实际部署过程之中通常需要ERC20.sol和IERC20.sol来实现一个合约。 Solidity 作为当前社区中一种用于编写以太坊虚拟机 (EVM) 智能合约的主流编程语言,能够帮助我们快速完成本次部署;不过在本次正式开始编写之前,我们还需了解...
密码学入门——消息认证码
加密&完整性Goal在无需保密性的情况下提供完整性,基本机制如MAC(消息认证码) MACs基本组成(发送方和接收方共享同一密钥k)$$S(k,m)\to tag\space \space ;V(k,m,tag)\to ‘yes’/‘no’$$$$[其一致性要求为\forall k \in \mathcal{K},m\in \mathcal{M}:V(k,m,S(k,m))=’yes’]$$ 若双方不共享同一密钥k,则难以达到完整性目的保障,比如CRC(循环冗余检验):$$CRC(m)\to tag\space ,Verify(m,tag)\stackrel{?}{=} yes$$但是攻击者可以直接拦截并伪造新的消息和验证码,从而破解消息。 系统安全性(目标) 攻击者可以通过m向挑战者寻问其生成的tag,之后攻击者伪造一个新的(m,tag)(优势为挑战者最终输出’yes’的概率大于1/2)若攻击者在已知消息-标签对后,无法为同一消息生成一个新的有效的标签,则此系统处于安全状态(SU-CMA:存在性不可伪造性); ...
密码学入门——流密码
Welcome!

