用shell写一个猜价格脚本?

Vim文本编辑器内设有三种模式:命令模式、末行模式和编辑模式。
命令模式:控制光标移动,可对文本进行删除、复制、粘贴和查找等工作。
输入模式:正常的文本录入。
末行模式:保存、退出与设置编辑环境。
命令模式和末行模式下的一些快捷键:

Shell终端解释器类似人与计算机硬件的翻译官,作为用户与Linux系统内部通讯的媒介。Shell脚本命令的工作方式有两种,首先是前面所接触的交互方式,即当用户每输入一条命令就执行一次,而批量处理则是用户事先编好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。可以通过SHELL变量查看系统当前已经默认使用bash解释器作为命令行终端了。

使用vim编辑器把Linux命令按照顺寻一次写入文件就是编写完成一个最简单的脚本,下体是编写一个查看当前所在工作路径并列出目录下所有文件及属性信息。
Shell脚本的名称可以任意起,行业规范脚本文件的后缀一般是.sh,脚本内容中:#!表示用何种shell解释器来执行脚本程序,#表示注释信息,后面就是命令行。执行脚本的方法有两种:第一种是如上图使用“解释器 shell脚本”运行,这样系统则会忽略掉脚本内容中的#!内容,第二种是输入完整路径的方式来执行,但是系统会默认因为权限不足而提示报错信息,这时需要为脚本文件增加权限。

脚本中定义了很多变量功能,例如“$0”对应当前shell脚本程序的名称,“$#”对应总共有几个参数,“$*”对应所有位置的参数值,而“$1”“$2”等对应第N个位置的参数。

为了判断用户输入的参数,需要使用条件测试语法,若条件成立则返回0,否则则返回其他随机数值。测试语句格式:[ 条件表达式 ]两边均有一个空格,条件判断语句按测试对象可分为文件测试、逻辑测试、整数值比较与字符串比较.

文件测试是按照指定条件来判断文件是否存在或者权限是否满足,具体参数为:
通过$?得到上一条命令的返回值

逻辑测试则是判断用户给出的条件是为真还是假,从而把条件测试语句与逻辑语句相搭配结合使用可以实现一个更高级的使用方法,例如在Shell终端中逻辑“与”符号是&&,它代表当前面的命令执行成功后才会执行后面的命令。
“或”符号是“||”,其代表前面的命令执行失败后才会执行后面的命令

整数比较运算符是仅对数字的测试操作,不能把数字与字符串、文件等内容一起操作,而且不能想当然的使用日常生活中的等号、大于号、小于号等来做判断,因为等号与是赋值命令符冲突,大于号和小于号分别是和输出重定向命令符和输入重定向命令符冲突。虽然有时候碰巧也能执行成功,但是在后面脚本程序中普遍会产生错误,一定要使用规范的整数比较运算符来进行操作:

字符串比较是判断测试字符串是否为空值,或两个字符串是否相同的操作,常常用来判断某个变量是否未被定义(即内容为空值),常用参数:



下面是批量创建用户的例子:
第1行的read命令是读取客户输入的值作为变量PASSWD的值,-p参数是为了输出提示语句。
第6行的id $UNAME命令可查看是否存在该用户,&>表示不管前面命令输出的是正确结果还是错误结果,都将输出信息重定向到/dev/null,/dev/null是被称作Linux黑洞的文件,把输出信息重定向到这个文件后等同于删除数据(没有回收功能的垃圾箱),让用户的屏幕窗口保持简洁。
第7行表示如果id $UNAME执行成功,则说明该用户存在。
第11,12行则是添加用户的命令和设置密码的命令。
注意:变量间的相加在linux系统中默认是字符串相加,例如:
要实现两个变量的值相加,需要使用expr命令将字符串转换为数字

利用while写一个猜价格的脚本

一次性计划任务(使用at命令行)

使用atrm + 编号可以删除对应编号的计划任务

可以使用Linux系统中默认启用的crond服务创建任务。创建、编辑计划任务的命令为crontab -e,查看当前计划任务的命令为crontab -l,删除某条计划任务的命令为crontab -r,如果使用管理员登陆系统,可以用crontab -u来编辑他人的任务。口诀:分、时、日、月、星期
需要说明的是,除了用逗号来表示多个时间段,例如”8,9,12”表示8月,9月和12月;还可以用减号来表示连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
另外,在crond服务的计划参数中,所用命令一定要用绝对路径的方式来写,如果不知道绝对路径,可以用whereis命令进行查询,绝对路径为输出信息的加粗部分。

比赛介绍:于5月21日在Buu正式开赛,本次竞赛共有 656 支队伍报名,本次挑战赛特邀出题人:魔法少女雪殇、V、v0id、不愿透漏姓名的大帅gei,经商讨决定此次公开非零解官方wp供大家学习参考,快来一起看看吧!




    10.复杂数据太多了,猜测这个手的位置是比较关键数据,结合提示和镜像的blue,猜测要把手的这个blue全部提取然后进行转换二进制。

13.最后就比较简单了,简单分析一下图片,直接转灰度然后八位一组,最后用gzip解压即可

知识点:音频分析、频谱隐写、波形分析

1.听音频,完全的噪音,没有任何规律,常规隐写和一些工具查看频谱都没有数据。
2.au把波形方法,详细观察

3.发现看似没有规律,但是貌似他的所有的音频数据高度都是一致的,有迹可循
4.将其音频能量全部输出来看看。

5.观察到果然音频能量是重复排序的,那么排序一下看看总共多少个内容

6.果然,总共15个,猜测分别对应从0-f。那么对应的转换然后输出hex

7.最后获得一大串hex,丢入cyberchef进行转换即可

知识点:usb流量分析、golang逆向、xor分析

P.s:这题出了点小问题,出的时候忘记考虑USB流量在传输中会造成一定的数据丢失,所以源数据无法提取,修复后降低了不少难度。
1.首先分析流量,可以看见一个7z文件头,提取出来获得一串连接,访问是谷歌网盘,打开后下载out.txt是一串乱码,猜测是根据main.exe加密得来,那么直接对main.exe进行逆向分析。
2.简单分析一下,程序通过打开文件然后对内容与key进行了异或运算。

4.最后直接写脚本就行了。

考虑不周全了,下次应该用arm编译hhh,由于是xor运算,密钥也在程序里,所以只需要把out.txt改成flag.txt运行程序就可以了

知识点:不懂PCB的厨师不是好黑客

3.转换3d视图即可看见flag转换3d视图即可看见flag

知识点:卡比文字、维吉尼亚

1.根据题目描述得知图片的文字是卡比游戏的文字,直接根据表替换

(1)Yusa的密码学课堂——一见如故

1.注意到题目是实现了一个稍微魔改版本的MT19937算法,除了一些参数的小改之外,最大的变化在于rand函数

2.这里对从状态数组MT中提取出来的y进行了两次处理,都是异或循环移位后的自己。可以将每一个比特拆开来看会清晰一些,那第一次异或运算举例

3.那么原来的y的第1,22,18个比特会进行异或生成结果值的第一个比特,因此我们根据偏移可以构造如下矩阵

4.设该状态转移矩阵为 ML,那么我们图片 因此根据图片 我们即可恢复前一个状态
5.对624个输出均如此操作之后,我们即可获取一组状态数组
6.然后接着往后生成随机数,即可获取flag

(2)Yusa的密码学课堂——二眼深情

1.题目仍然沿用了《Yusa的密码学课堂——一见如故》的魔改算法,根据题意,据需要根据交互中提供的两个随机数来恢复初始化种子的值。
2.那么第一步是根据前一题构建的状态转移矩阵对随机数进行untamper获取获取两个状态数组中的值,那么此刻注意到 generate 函数

3.下一轮新的状态值【i+624】由这一轮的【i】(提供最高位)和【i+1】(提供除最高位)拼接,右移以为后异或【i+397】而来。随后根据右移抹掉得一位选择要不要异或
4.因此我们可以选择第 622 和第 395 两个随机数,untamper后得到相应得状态值
5.随后两者相异或,根据最高位判断是否需要异或并且最低位是0还是1,由此我们可以恢复y(由这一轮的【i】(提供最高位)和【i+1】(提供除最高位)拼接),扔掉最高比特,就是上一轮最后一个状态值的低31位比特值了。而至于最高比特,这里我们选择直接爆破。
6.而获取第一轮状态得最后一个值后,怎么前推呢?注意到 init 函数

30),至于这个自异或的操作呢,再运行一遍就可以返回原来的self.MT[i-1]的值了。

(3)Yusa的密码学课堂——三行情书

知识点:线性攻击、z3解密方程组

1.题目只有三行,用的是传统的MT19937算法,但是问题在于,给出的2000个随机数与上了一个,显然与运算是不可逆的,我们没办法获取完整的原始随机数。但是通过查看的二进制,总够有18个‘1’,考虑到MT19937又都是线性变换,于是这里我们使用z3约束去对原始状态进行求解。
2.首先我们根据的比特,恢复剩余有效信息,无法恢复处使用‘?’占位

3.然后把每一个确定比特的约束都加进去

4.接着需要对每一个随机数的输出根据它tamper的约束获取原始状态值

5.状态值够624个了后,根据twist,生成下一轮状态值

6.并对添加对下一轮状态值的约束

7.最后我们跑z3获取状态值,然后调用自带的random库生成后续随机数就可以得到flag了

知识点:字符串末尾无\x00会连带输出、格式化字符串漏洞、文件名的地址也在栈上,可以覆盖为存flag的堆地址、低版本libc在free报错时会输出文件名

1.栈上存在堆地址,里面有flag,利用name跟堆地址相邻,覆盖\x00连带泄露堆地址
2.输入yes时,后面的栈空间可以存放堆地址-8,便于之后格式化字符串漏洞修改size为0使报错
3.题目给的gift是栈地址,可以根据偏移算出存放文件名的指针的地址
4.利用格式化字符串漏洞修改堆块size为0和存放文件名的指针改为堆地址
5.程序最后free堆块触发报错输出flag

(编译优化把 miracl 大数库的几千个函数编译没了,导致 main 向上翻一翻就能找到,同时原来加密的字符串 correct 也变成明文了。。)
4.main 中的逻辑是 ECC 中的点加法,但是设置为了不可能成立,同时在 mp_read_radix 中动了手脚,能把输入保存下来。

内容简介:Shell脚本实现的猜数字小游戏脚本实现的猜数字小游戏主要介绍了Shell脚本实现的猜数字小游戏,本文的猜数字规则相对一般规则的猜数字可能难度要大不少,需要的朋友可以参考下生成的密码和用户输入可以接受重复数字。所以相对一般规则的猜数字可能难度要大不少。本版本规则:A--数字对,位置也对B--排除A的结果后,数字对,但位置不对开始后,系统化初始化一个4位可重复数字,如“1223”。假设用户第一次输入“1234”,那么系统将提示“2A1B”,前两位数字“12”相同并且位置也相同,为“2A”。后两位数字中,用户输入的“3”与密文中“3”相同,但两者位置不同,则为“1B”,最终结果为“2A1B”。再假...

我要回帖

更多关于 怎么用python写抢购脚本 的文章

 

随机推荐