一些代码
Python 3求补码代码作用:输入一个十进制的整数输出它的八位二进制补码其中8可以修改为其他数,例如改成32就会输出32位的二进制数
1234567891011121314151617n=int(input())if n >0: b=bin(n)[2:] list_b = [0] * (8 - len(b)) list_b=list_b+list(map(int,b)) str_b="".join('%d'%i for i in list_b) print(str_b)elif n<0: b=bin(n)[3:] list_b=[1]*(8-len(b)) list_b=list_b+list(map(lambda x: (int(x) + 1) % 2, b)) str_b = "".join('%d' % i for i in list_b) int_b=int(str_b,base=2)+1 ans=bin(int_b)[ ...
AES算法
推一下大佬写的文章,本文中部分内容转载自此处:AES加密算法的详细介绍与实现
算法简介高级加密标准(AES,Advanced Encryption Strandard)为最常见对称加密算法
加密流程如下:
AES为分组密码,加密过程中将明文分成多个长度相同的组,每次加密一组数据,直到加密完整个明文。
在AES标准规范中,分组长度只能是128位,每个分组为16个字节(每个字节8位)。
密钥的长度可以使用128位、192位或256位。
密钥的长度不同,推荐的加密轮数也不同,如下表所示:
AES
密钥长度(32位比特字)
分组长度(32位比特字)
加密轮数
AES-128
4
4
10
AES-192
6
4
12
AES-256
8
4
14
以AES-128为例,128位的明文分组P和密钥K都被分成了16个字节,分别记为 P = P0 P1 …… P15 和 K = K0 K1 …… K15
一般地,明文用字节为单位的正方形矩阵描述,称为状态矩阵。
在算法的每一轮中,状态矩阵的内容不断变化最后作为密文输出。
矩阵中字节的排列顺序为从上到下、从 ...
UPX脱壳和加壳
UPXUPX工具下载:链接
首先进入cmd命令行cd进入upx.exe所在的目录代码如下:
dir可以查看upx文件夹可以看到有upx.exe程序
输入upx.exe出现以下画面表示upx可以正常使用
脱壳将需要脱壳的文件放在upx.exe所在的文件夹下使用代码upx -d [文件名]就可以脱壳了脱壳成功会显示”unpacked 1 file”表示脱壳了一个文件
例题 CTF show 卷王杯 简单的RE首先将附件拖进查壳软件查壳
最后一行的简易信息显示有UPX壳把文件放进upx.exe所在的文件夹开始脱壳脱壳成功再将脱壳后的文件拖进查壳软件中就会显示”Not packed”
加壳和脱壳一样,将要加壳的文件放在upx.exe所在的文件夹下输入命令upx [文件名]就可以给文件加壳显示’Packed 1 file’就表示加壳成功
我们将文件拖进查壳软件就可以看到文件加了一个upx的壳
PicoCTF Re
0x00 run拿到附件丢进IDAF5反编译看一下主函数,送分题,主函数就一个输出语句直接shift + f12查看字符串列表就可以看到flag
0x01 run2送分题+1丢进IDA反编译看下主函数代码的意思是输入”Hello!”就可以得到flag如果输入的不是flag就不行shift+f12查看字符串列表即可得到flag
0x02 gdbme看到题目名字,想到扔到linux里面用GBD调试但是尝试了一下并没有什么收获,我太菜了,对GDB调试器的运用不太熟练遇事不决IDA,直接丢进去反编译,主函数清晰可见找到关键函数点开分析源代码的作用是将字符串中的每个字符的ascll码值与79进行比较如果大于79,则减去47再返回如果小于等于79,则加上47再返回分析完源代码就开始编写解密脚本菜狗编写的垃圾脚本如下,运行结果是flag中每个字符的ascll码值按照ascll码表一一对应即可获得flag
0x03 unpackme题目附件给我们了一个python的源代码我们先跑一遍,运行结果是让我们输入一个密码获取flag打开源代码进行分析:可以看出源代码的作用是对key_str进行base64加密 ...
py文件封装成.exe文件
准备工作pyinstaller工具打开cmd窗口输入命令pip install pyinstaller命令行输出successfully install就表示已经安装成功
生成exe文件命令参数pyinstaller工具命令格式: pyinstaller [opts] yourprogram.py
参数含义:-F 指定打包后只生成一个exe格式的文件-D -onedir 创建一个目录,包含exe文件,但会依赖很多文件-c -console ,-nowindowed 使用控制台,无界面-w -windowed , -noconsole 使用窗口,无控制台-P 添加搜索路径,让其找到对应的库-i 改变生成程序的icon图标
单个py文件在py文件所在目录下打开cmd窗口输入命令pyinstaller -F ···.py封装完毕后提示”Buliding EXE from EXE-00.toc completed successfully”执行成功的话会在目录下生成一个dist文件夹,.exe文件就在此文件夹下
Linux学习笔记
在虚拟机中安装Linux系统个人使用的是在VMware中安装的kali linux教程在这选择kali是因为这个版本自带了很多工具库对于我这种新手,优先选择安装图形界面
命令行模式下命令的执行基础命令格式:[dmtsai@study ~]$ command(命令) [-options](选项) parameter1(参数一) parameter2(参数二)
一行命令中第一个输入的部分绝对是命令或可执行的文件命令太长时可以使用反斜杠’'来转义回车键,使命令延续到下一行,反斜杠后立刻接着特殊字符才能转义英文大小写字母是不一样的!
语系的支持Linux支持多国语系但是终端在默认的情况下无法以中文编码输出数据,这时候就得将支持语系改为英文1.显示目前所支持的语系:lcoal2.修改语系为英文语系:LANG=en_US.utf8export LC_ALL=en_US.utf8
重要的快捷键[Tab]:[Tab]接在一串命令的第一个字段后面,为’命令补全’[Tab]接在一串命令的第二个字段后面,为’文件补全’输入a-z中任一字母按tab就能查看这个字母开头的所有命令
[Ctrl]-c:中断 ...
RSA加密算法学习
RSA加密学习简介:RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制
算法原理:根据数论,寻求两个大素数比较简单,而将他们的乘积进行因式分解却极其困难,因此可以将成绩公开作为解密密钥。
算法描述:(1)任意选取两个不同的大素数p和q计算乘积n = pq。
(2)根据欧拉函数,求得**r=φ(N)=φ(p)φ(q)=(p-1)(q-1)**。
(3)任意选取一个大整数e,满足gcd(e,φ(N))=1,整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用)
(4)确定的解密钥d,满足 (de)modφ(N) = 1 ,即de = kφ(N) + 1,k>=1是一个任意的整数;所以,若知道e和φ(N),则很容易计算出d
(5)将明文m加密成密文c,加密算法为:c = E(m) = m^e mod n
(6)将密文c解密为明文m,解密算法为:m = D(c) = c^d mod ...
浅学天文学
素材来源: 南开大学 苏宜教授《天文学的奥秘》
天文学中重要的距离单位:AU: 地球到太阳之间的平均距离(约为1.5亿公里)光年: 光走一年走出来的长度秒差距(pc): 1 pc = 206265 AU ,约等于3.26光年由三角形可得公式: D = AU / tanρ
日月星辰的运行规律“世界上有两件东西能够深深地震撼人们的心灵:一件是我们心中崇高的道德准测;另一件是我们头顶上灿烂的星空” ————康德
天文学是一门研究天体运动、探索宇宙奥秘的科学。
斗转星移星空有两种运动:周日运动星空的周日运动是地球自转的反映。地球自转导致地球各点都在动,唯南北极不动。而周日运动又分为北天周日运动和南天周日运动:
什么是冬夜大三角冬夜大三角就是在南天周日运动中,参宿四、南河三和天狼星所组成的三角形。
如何辨别周日运动的方向左螺旋系统:伸出左手,握拳翘起大拇指,将拇指的方向指向天上的北极星,那么另外四个手指的方向,就是星空周日转动的方向。适用于地球上的任何地方
周年运动:地球围绕太阳的公转造成了星空的周年运动
北天星空周年运动导致北斗七星的斗柄指向不同
南天星空的周年运动导致一年四季所 ...
Hexo+github搭建博客
一、下载所需工具1.Hexo Hexo 官网2.Git Git 官网3.Node.js Nodejs 官网4.Github账号 Github 官网tips:github是国外的网站,国内访问经常性不稳定,搭建博客的过程中有可能因为连接问题导致部分过程失败,建议挂个梯子。
二、Github 搭建仓库Github注册+登录方法
创建好我们的Github账号后进入主界面点击左边的New 或者右上角的加号新建仓库Tip: 仓库名要设置成 “你的用户名.github.io”像我这边就设置成M1nG0.github.io报错是因为我已经有一个同名的仓库下面的设置不用动,直接新建就可以
三、生成 SSH Keys 将Github与本地绑定随便进入一个文件夹,在空白区域右键选择Git Bash here进入git页面
然后依次输入以下命令:(linux 环境下的粘贴不是CTRL+V 可以直接右键Paste)1.ssh (检查本地有没有安装ssh,下载git的时候一般都会自带)
2.ssh-keygen -t rsa -C "注册Github的邮件地址"
然后连敲4次回车!
(生成R ...