一段结束

自己这段时间做了做CTF题,想想自己从刚开始时刚做题,完全什么都不会,但现在能做些个简单的题目,莫名感到欣喜,但是一碰到那些大题参看某些个答案后,发现自己根本什么都不会,我有时觉得CTF在我心中似乎没那么有趣了,增强自己的真正本领,才是关键!!!

我感觉自己的基本知识是有的,可是有时候就是不知道如何使用,每天学了一点点东西,总感觉不够或者是说没有学透。我感觉我得把握一个方向,那就是代码审计了,反正今天我都不知道我在说写个什么,但是我知道这是一个新的开始!

python-网易云音乐签到,词云

时间过的真快,8月份悄悄地就没了,这段时间一直在回顾以前的电子书,做一个累计,也在一点点找回说英文和写汉字的感觉,电脑打字久了,感觉自己都不会提笔了…
一:网易云签到
就是模拟浏览器去做这些个事情,其实就是练练手,没多大意义,代码如下

实验吧 CTF 编程题 (六)

十九:两个最大子串和

一开始以为是连续子串和,并且没看对题目,没对搞蒙了都,非连续的就很简单判断是否为最大的就是从第一个数就开始往上加,大于就加入,小于就不管,继续找下一个数。两个最大就是将原子串一分为二分别找最大就好了。但还是提交不对,可能是我get不到这个点吧。给出网上的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include   
using namespace std;
const int INF = -0xfffffff;
const int Max = 100000;

int n;
int b[Max + 2];
int m1[Max + 2], m2[Max + 2]; // m1[i]:Max sum of sub array [0,i] of a
// m2[i]:Max sum of sub array [i,n-1] of a
int maxSum; // res
int a[] = { -132,133,134,-11,12,-139,-140,62,63,-64,65,66,67,1,2,3,4,5,-6,7,-48,-49,50,138,16,17,20,101,102,-103,104,-105,106,146,147,148,-107,108,109,110,96,21,-22,23,-24,-25,25,-27,-28,-29,30,41,-42,8,9,10,-46,-47,51,52,-53,54,-55,-56,57,-58,59,60,73,-74,75,-71,-72,18,-97,-98,19,-129,130,-137,136,-13,14,144,-145,15,128,77,-78,-31,32,35,-76,149,-150,99,100,119,91,-92,-93,94,95,116,117,114,118,120,81,82,83,-84,85,-122,-123,112,111,-43,44,45,-113,-115,36,-37,-38,39,40,25,126,127,131,-135,61,-69,70,141,-142,143,-86,68,-87,-90,121,-88,89,-124,-179,-80,-33,34 };

int main()
{
int n = sizeof(a) / sizeof(a[0]);
m1[0] = m2[n + 1] = INF;
memset(b, 0, sizeof(b));
for (int i = 1; i <= n; ++i)
{
if (b[i - 1] >= 0)
b[i] = b[i - 1] + a[i];
else
b[i] = a[i];
m1[i] = b[i] > m1[i - 1] ? b[i] : m1[i - 1];
}
for (int i = n; i >= 1; --i)
{
if (b[i + 1] >= 0)
b[i] = b[i + 1] + a[i];
else
b[i] = a[i];
m2[i] = b[i] > m2[i + 1] ? b[i] : m2[i + 1];
}
maxSum = INF;
for (int i = 1; i < n; ++i)
{
if (m1[i] + m2[i + 1] > maxSum)
maxSum = m1[i] + m2[i + 1];
}
printf("%d\n", maxSum);
return 0;
}

实验吧 CTF 编程题(五)

十六:二叉树遍历

这算是比较老的一道题了,如果是做题,可以直接画图画出来,以前写过已知二叉树前序中序求后序的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include 
#include
#include
#include
using namespace std;
struct Tree{
struct Tree *left;
struct Tree *right;
char num;
};
typedef struct Tree treenode;
void getit(char* inor,char* preor,int length){
if(0==length)
return;
Tree * newnode = new Tree;//分配空间
newnode->num=*preor;
int flag=0;
for(;flagnum;
return;
}
int main(){
char* preor="DBACEGF";
char* inor="ABCDEFG";
//printf ("%d",sizeof(preor));
getit(inor,preor,8);
printf("\n");
return 0;

}

实验吧 CTF 编程题(四)

十一:括号表达式

这道题要写,数都数得来,画画图或者模拟整个过程一定会出来结果,我们不妨看看能否找出规律。举个例子,P=4 5 6 6 6 6,而每个右括号所在的括号内包含的括号数为W=1 1 1 4 5 6。P中的每一个数可以代表的是一个右括号,则数字4,不用说,必然与前面一左括号匹配,即为,数字4与5之间两个右括号有(5-4)个左括号,而数字4与5之间没有其他数字也即没有其他右括号,则这个左括号必然是与数字5所代表的右括号匹配,则也为1,同理数字5与6也是这样,到了第二个数字6,其往前找到第一个数字6,中间没有左括号,则继续往前找到5,数字5与数字6中间有(6-5)个左括号,而两个数之间还有一个右括号,则不行,得继续往前,找到4,同理不行,前面没有数了,那么就看这个数字6(第二个的)在p中是第几个就好了,应该说是与找到合理的数字下表之差,往后依旧。则对于4 6 6 6 6 8 9 9 9 即为 1 1 2 4 5 1 1 3 9 转化为代码即为

1
2
3
4
5
6
7
import
a=[0,4,6,6,6,6,8,9,9,9]
for i in range(1,len(a)):
j=i-1
while(a[i]-a[j]<i-j):
j=j-1
print i-j,

实验吧 CTF 编程题(三)

六:循环

送分题,这里判断奇数偶数的时候我用了逻辑与,其实一个数是否为奇数还是偶数就是看二进制的最后一位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
max=0
for a in range(900,10001):
n=a
num=0
while(n!=1):
num+=1
if(n&amp;1==0):
n=n/2
else:
n=3*n+1
if(num&gt;max):
max=num
#print max
print max

实验吧 CTF 编程题 (一)

我进过一些安全类的QQ群,发现挺多”小白“(当然我也是^^)遇到不懂得就一顿糊涂拿到群里来问,其实很多问题在网上就能找到,并且许多的刚入这个方向的伙伴们喜欢用工具,不喜欢了解其中道理,当然这可能需要一个过程,当时我也是这样,喜欢拿个御剑到处乱扫^^。不说了,说多了大家还以为我很牛呢。不管怎样,要想搞好安全,一定要会编程,这是当年教我入门的老师跟我说的一句语重心长的话!就拿实验吧的题目来写写吧。话说这个网站真的很好,题目质量很好,但是好像好久没更了,并且有些题出错了,不过每周四都会有老师开直播教一些简单基本实用的东西,免费的,很实在。题目链接http://www.shiyanbar.com/ctf/practice

一:百米

这道题很基础,速度要快,就是用代码呗

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#coding=utf-8
import requests
from bs4 import BeautifulSoup
import urllib
def getit():
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
}
url=u'http://ctf5.shiyanbar.com/jia/index.php'
response=session.get(url,headers=headers)
a=response.text
b=BeautifulSoup(a,"html.parser")#beautfiulsoup解析
c=b.find("div",{"name":"my_expr"})
d=c.get_text()#提取出那个计算式
e=d.replace('x','*')#用正儿八经的*代替那个字母x
print e
print eval(e)#eval很好用,直接就算出来了
f=eval(e)
data={
"pass_key":f
}
h=session.post(url,data=data,headers=headers)#发包
print h.text#看结果
if __name__=='__main__':
with requests.Session() as session:#建立会话
getit()

python Django别人的轮子修改

最近突然想用python写一写微信公众号后台,说起微信挺那个啥的,公众号接口似乎必须占着80端口。不知道为毛线。扯远了,由于以前用JAVA写过微信公众号后台,当时的一些基本回复消息还有事件的处理都是有现成的轮子,这一部分都封装好了的,只要到时根据自己需要修改增加相应代码即可。我就想会不会有python写的这一方面轮子。果然有http://ningning.today/2015/02/21/python/django-python%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F%91%E4%B9%8B%E4%B8%80%EF%BC%8D%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C/,其实这些个轮子都是根据微信的开发文档设计而来的,写出来难度不大,只是要时间而已。然后我就用了这个轮子,就有了接下来的故事。

python-12306-查票

已经是暑期了,许多小伙伴们都已经回家,说到回家突然想到以前的12306查余票的python脚本不能用了,是官方的json变了,不管怎么变,其实我们要的信息都在那里面就好了,关键是如何提取出来。借助之前网上有的例子。我们首先得到城市站名与其对应得编号(这个网上有),关键是这条链接https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9006,然后正则匹配出来即可。接下来就是如何解析了,其实不要太多花里胡哨的功能,本来就是用来用的,不是好看的。拿自己本人为例找一找成都到南昌的: