Python/2.7 simple coding(+ c++) 42

remove docker image over 2 month

로컬에서 테스트로 도커 빌드를 자주 해보는데 이미지가 계속 쌓인다. 이미지를 계속해서 만들다보면 도커의 이미지를 저장하는곳의 공간이 풀나서 정말 몇개월에 한번씩 이미지를 더이상 생성할수 없다고 나오는데 2달이 지난 이미지는 필요없다고 판단해 지우는 스크립트를 하나 만들었다. 여기에 저장해놓고 가져다가 쓰려고 간단하게 만들어둠. python3 import subprocess import re def get_docker_image_list(name): docker_image_list, _ = subprocess.Popen(['docker', 'image', 'ls'], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() docker_image_lis..

vector, hashmap,

1. vector의 정렬.sort()함수는 앞자리를 보고 정렬하는걸 알수있다. 근데 함수를 선언해서 정렬할수 있다. #include #include #include #include using namespace std; bool _reverse(pair a, pair b) { return a.first > b.first; } bool _reverse2(pair a, pair b) { return a.second > b.second; } int main() { vector v1; v1.push_back(make_pair(1,"abc")); v1.push_back(make_pair(3,"def")); v1.push_back(make_pair(2,"ghi")); v1.push_back(make_pair(4,"j..

canyouhack.it Programming Challenge 3 Lost!

http://canyouhack.it/Hacking-Challenges/Programming-Challenges/Lost/최소한의 짧은 길을 찾는 프로그래밍을 하는 문제이다. http://canyouhack.it/Content/Challenges/Programming/Prog3.php 를 들어가보면. 대충 요런식의 길이 나오는데, 초록색부터 빨간색까지 가는 최소의 길 수를 5초안에 계산해서 내면 된다.(초록색과 빨간색 칸도 포함하여 낸다.) 예시로 위의 사진은 72칸이다. 돌아다니다가 설명도 잘되있고 구현도 잘되있는 사이트를 찾았다. A*알고리즘이란다.http://www.laurentluce.com/posts/solving-mazes-using-python-simple-recursivity-and-a-s..

canyouhack.it Programming Challenge 2 Sudoku!

스도쿠 그림이 나오고, 해당 스도쿠 그림이 있는 부분을 파싱해서 데이터를 잘 가져와서 문제를 푼 다음, A,B,C,D,E,~이런식으로 이어서 3초안에 다 계산해서 보내면 된다. 다른곳에서 알고리즘을 가져왔다.http://code.activestate.com/recipes/578140-super-simple-sudoku-solver-in-python-source-code/ 코드. # -*- encoding: cp949 -*- import urllib2 import re import random import os import operator session = 본인 세션 # GLOBAL VARIABLES grid_size = 81 def isFull (grid): return grid.count('.') ==..

hack this site Programming missions : Parse an XML file

https://www.hackthissite.org/missions/prog/4/ 시작하면 시간이 2분이 주어진다. 2분이 주어진다는건 프로그래밍 과정중 하나쯤은 프로그래밍을 안하고 손으로 노가다해도 된다는 의미이다.(난 마지막에 나온 숫자들을 판별하는것에 시간을 썼다. 즉 결과가 나오면 보고 직접 타이핑했다는 의미) 들어가면 랜덤하게 xml파일이 하나 나오고, 그 xml파일대로선과 호를 그린 후 파랑,녹색,빨강,노랑,검정(원래는 흰색인데 내가 흰색대신 검정으로 바꿈.) 순서대로 읽어서 '파랑,녹색,빨강,노랑,검정' 과 같은 형식으로보내면 통과이다. python의 matplotlib을 참조했다. 이것은 파이썬에서 매트랩을 쓸수 있는 모듈이다. 하는 방법은. http://matplotlib.org/user..

DareYourMind programming 1~2, 5, 9

http://www.dareyourmind.net/ 1. 항상 통과의례같은 요청 빨리보내기 문제. # -*- encoding: cp949 -*- import urllib2,re req = urllib2.Request('http://www.dareyourmind.net/prog1.php') req.add_header('cookie','PHPSESSID=ee20pn4vmdh97melrb0mh6ei64') password = re.findall(": '(.*?)'",urllib2.urlopen(req).read())[0] print password req = urllib2.Request('http://www.dareyourmind.net/menu.php?page=programming1&checked='+pas..

hack this site Programming missions : String manipulation

This level is about string manipulation.In this challenge, you will be given a string. Take all the numbers from the string and classify them as composite numbers or prime numbers. You should assume all numbers are one digit, and neither number 1 nor number 0 counts. Find the sum of every composite number, then find the sum of every prime number. Multiply these sums together. Then, take the firs..

hack this site Programming missions : Reverse Ascii Shift

Generated String: 60/59/56/67/24/38/48/45/39/ Shift: -11 와 같은 형식으로 랜덤으로 string이 매번 생성되는데, 구분자가 매번 달라진다. 예시로는 /를 썼지만 $가 나올수도있고, "이나 .도 나오는걸 봐서 구분자도 랜덤이다. Shift한 string이 위의 만들어진 string이므로 Shift값을 뺀 연산의 결과값을 출력하면 된다. # -*- encoding: cp949 -*- import urllib2,re req = urllib2.Request('https://www.hackthissite.org/missions/prog/11/index.php') req.add_header('cookie','PHPSESSID=쿠키') req.add_header('ref..

TheBlackSheep Programming 1~3

1. index.php를 방문 후, tryout.php에서 문자열을 가져와서, solution.php?solution="+letters. 와 같은 형식으로 전송. 많이 해본 버튼 빨리 누르기같은거.... #-*- coding: cp949 -*- import urllib2,re req = urllib2.Request('http://www.bright-shadows.net/challenges/programming/get_started/tryout.php') req.add_header('cookie','쿠키') text = re.findall("'(.*?)'",urllib2.urlopen(req).read())[0] print text req = urllib2.Request('http://www.bright-..

WeChall Training: ASCII, Encodings: URL, Training: Crypto - Caesar I

Training: ASCII # -*- encoding: cp949 -*- ascii = '84, 104, 101, 32, 115, 111, 108, 117, 116, 105, 111, 110, 32, 105, 115, 58, 32, 101, 97, 101, 104, 109, 115, 98, 98, 98, 105, 110, 105'.split(', ') print ''.join(map(chr,map(int,ascii))) Encodings: URL # -*- encoding: cp949 -*- import urllib2 url = '%59%69%70%70%65%68%21%20%59%6F%75%72%20%55%52%4C%20%69%73%20%63%68%61%6C%6C%65%6E%67%65%2F%74%72%..

WeChall Training: Net Ports, Can you read me

Training: Net Ports희한하게도 소스 포트를 설정하는 문제이다.(이런 문제는 처음 봄.) 소켓으로 보낼 생각을 하고,소켓 옵션 설정하는 함수인 setsockopt함수에 뭔가 인자가 있어서 그걸로 어떻게 설정하면 될거라고생각했는데 docs에 찾아봐도 없다.(내가 못찾은걸수도.) 구글링해보니http://bytes.com/topic/python/answers/555361-how-set-source-ip-adress에 어떤 분이 해결책을 적어주셨다.서버를 여는것처럼 bind로 내 아이피 주소를 열고, 포트 인자로는 내 포트를 준다. 그 후에 바로 connect()함수로 내가 원하는 서버에 연결하면 bind된 아이피주소와 포트로 보내진다고 한다. 신기함. # -*- encoding: cp949 -*-..

WeChall Training: Programming 1, Flow Over Astronomy

Training: Programming 1 아주 일반적인 요청 빠르게 보내기 문제. # -*- encoding: cp949 -*- import urllib2 req = urllib2.Request('http://www.wechall.net/challenge/training/programming1/index.php?action=request') req.add_header('cookie','쿠키') message=urllib2.urlopen(req).read() req = urllib2.Request('http://www.wechall.net/challenge/training/programming1/index.php?answer='+message) req.add_header('cookie','쿠키') pri..

lob gremlin->cobolt

이것도 그냥 손으로 풀어보니까 대충 이해가서 프로그래밍적으로 다 해주는거 만들려다가 페이로드 출력까지 하고 끝.... 기왕이면 쉘까지 실행시켜보고 싶었지만 그게 되지를 않는다..... gdb를 알아서 분석해서 스택크기 계산하는 그런것도 자동화 시켜보려고 했는데 그건 오바일듯; 1. execve의 시스템 콜 번호를 /usr/include/asm/unistd.h에서 가져옴. 2. 가져온 시스템 콜 번호로 어셈블리어를 짠 후 objdump까지 완료한 결과값을 obj라는 파일에 넣음. 3. obj에서 정규표현식으로 opcode부분만을 공백으로 잘 연결해서 shells라는 파일에 넣음. 4. shells파일에서 opcode를 잘 가져와서 문자열로 잘 캐스팅 후 shell이라는 환경변수로 등록함. 5. 환경변수의 ..

Security Override Programming 11~12

캡챠를 프로그래밍적으로 인식해서 제한된 시간안에 보내면 성공이다. 이전 글에서 pytesser을 언급했었는데 그때 풀어보려고 했었는데 풀라고 나온 캡챠가 너무 작아서 그냥 포기했었다. 우연찮게 돌아다니다가 http://kthan.tistory.com/176 요 글을 보았는데. 요 글에서는 캡챠를 인식하기 쉽게 변형하는 부분이 맨 아래에 나오는데 나도 이걸 보고 생각을 해봤다. 글자가 너무 작아서 인식하기 어려우면 글자를 크게 하고, 인식하기 쉽게 픽셀을 변경해주면 될거같은데? 라고 생각해서 PIL공식 홈페이지에서 이것저것 찾아서 시도해봤더니 됬다. 내가 한 작업은. 1. 이미지를 받아온다. 2. 이미지를 보정한다. 이미지 크기를 늘리고, 글자가 있는 부분의 픽셀은 진하게, 글자가 없는 부분의픽셀은 그냥 ..

Security Override Programming 10

문제가 moo directory에서 아래에 랜덤으로 3개 나온 문자열이 나온 서브디렉터리의 위치를 찾아서 서브디렉터리:문자열; 형식으로 이어주는건데.. moo directory가 뭐지? 싶어서 이것저것 찾아봤다. 포럼에서 글을 보니 http://securityoverride.org/challenges/programming/10/moo/ 가 moo 디렉터리를 말하는 거였다.. 브루트 포스 공격하듯이 하나하나 서브디렉터리로 들어가봐서 해당 문자열이 존재하면 이어주면 된다. 오히려 level9보다 더 쉽다. # -*- coding: euc-kr -*- import urllib2,re req = urllib2.Request('http://securityoverride.org/challenges/programmi..

Security Override Programming 9

랜덤으로 미국식으로 달 일, 년; 형식의 날짜가 3개씩 나온다. 그럼 그 날짜의 해당 요일을 ;로 구분지어서 보내면 된다. 처음에는 해당 년도에서의 요일 구하는 알고리즘까지 직접 구현하려고 귀찮아 죽겠는데 관련 정보를 찾아다니던 도중... datetime이라는 모듈의 존재가 떠올랐다! 날짜 관련된 모듈인데 아마도 여기서 잘 찾아보면 해당 년도를 입력하면 요일이 나오는 함수가 있을거라 생각하고 찾아봤더니 있었다. 다른 분의 티스토리인데 정리가 잘 되어있다. 링크 여기서 datetime.isoweekday() 라는게 있는데. 월요일은 1을 반환하고 ...... 일요일은 7을 반환한다. 이것을 잘 이용해서 포맷을 만들어 보내면 된다. 주의점 : 문제에는 답변 포맷을 "Monday; Tuesday; Wednes..

Security Override Programming 8

level 8. 요러한 원이 있다. A의 반지름, CD,AB의 길이가 주어져있고 A,B는 정원이다. 주어진 3개의 정보만으로 BC의 길이를 구하는건데. 오른쪽 사진은 예시값을 대입한 것이다. 피타고라스로 잘 변형해서 풀면 된다. 코드를 짜 봤는데.. 반반의 확률로 에러가 뜬다. math domain error라고 뜨는데 아마도 루트씌운값을 몇자리까지 쓰겠다. 그런 말 없이 바로 제곱에 쓰니 범위가 길어져서 에러가 뜨는 것 같다. 답이 나오는 경우가 있어서 고치기 귀찮다. import urllib2,re from math import * req = urllib2.Request('http://securityoverride.org/challenges/programming/8/index.php') req.add..

Security Override Programming 6~7

level 6. x^2 + 3x + 4 같은 다항식은 (x+1)(x+3) 과 같이 변형해서 보내야 한다. 몇번 돌려보니 +만 나오고, 대략 -50000~0사이의 값이 해가 된다. 그냥 가장 단순한 알고리즘으로 하나하나 대입해봐서 값이 맞으면 그걸 값으로 정하는 알고리즘으로 짰다. 주의점 : 방정식을 만들어서 그냥 보내면 안된다. 데이터 전송시 url인코딩되어져서 보내지는데 (,)가 인코딩되지 않고 그냥 보내면 서버에서 알아먹질 못한다. urllib2.quote()같은걸로 한번 인코딩해서 보내야 한다. import urllib2,re,math req = urllib2.Request('http://securityoverride.org/challenges/programming/6/index.php') req...

Security Override Programming 4~5

level 4. 정육면체가 하나 떡하니 그려져 있는데, 1에서 2까지 가는 최단경로를 찾는 문제이다. 조건은. 정육면체 중앙을 통과해서 갈 수 없음, 가장 짧은 거리를 찾는 것, 소숫점 부분은 버림. 등이다. 그림이 있어서 더 복잡해보일지도 모르지만 level3보다도 간단하다. 어떤 길이가 나오면 루트( (2*길이)^2+(길이)^2 ) 와 같은 형식으로 계산하면 된다.(피타고라스) import urllib2,re,math req = urllib2.Request('http://securityoverride.org/challenges/programming/4/index.php') req.add_header('cookie','PHPSESSID=쿠키') length = float(re.findall("\s*(...

Net-Force Programming 4~5,6?

4. app.txt에서 8방향으로 123이 나타나는지 검사해서 나타난 갯수를 구하는 문제이다. 이거 뭔가 알고리즘이 있을텐데 내 낮은 프로그래밍 실력으로는 일일히 검사하는방법밖에 모르겠다. 으아아아ㅏ아아 더러워 이거 좋은 알고리즘 아시는분 좀 알려주세요... import urllib2 req = urllib2.Request('http://www.net-force.nl/challenge/level604/aap.txt') req.add_header('cookie','PHPSESSID=1ltc3b2dod3nc2ft8jbc47irt0') num = urllib2.urlopen(req).read() num = num.split('\n') cnt = 0 for i in range(0,len(num)): for j ..

Net-Force Programming 1~3

http://www.net-force.nl/ 1. 의사 코드가 쓰여져있는데 의사 코드대로 프로그래밍해보면 다음과 같다. x = 1 y = 1 answer = 1 while 1: answer = x*y + answer + 3 if x==525: break x += 1 y += 1 print answer 2. prog2.php에서 숫자를 받은 뒤 2초안에 answer = (number * 3 + 2) - 250처럼 계산해서 prog2.php?solution=12345와 같은 형식으로 전송해라. import urllib2,re req = urllib2.Request('http://www.net-force.nl/challenge/level602/prog2.php') page = urllib2.urlopen(re..

webhacking.kr 31

webhacking.kr 서버에서 내 주소로 10000~10010사이의 랜덤한 숫자의 포트로 패킷을 쏜다. 그걸 그냥 받아먹으면 된다. 1. 공유기를 쓰는 사람은 10000~10010포트를 다 포워딩해준다. 2. 방화벽 규칙에서 허용하던지, 아니면 문제 풀 동안 방화벽을 잠시 끈다. 3. nc를 실행시키거나 프로그램을 짜서 패킷을 받는다. nc를 실행시키면 커맨드창 하나당 하나밖에 nc를 못띄우는데, nc를 한개만 띄우고 새로고침을 여러번 해서 내가 설정한 포트로 오게하거나, nc를 10개를 띄우면 패킷을 한방에 받을 수 있다. 아니면 nc를 10개를 실행시키는것과 같은 효과의 코드를 짤 수도 있다. import socket,threading,urllib2 def bind(port): s = socket..

Enigmagroup missions/programming 9

8번은 뭔지 잘 모르겠다. 9번 같은경우 실행시키면 요런 이미지가 나오는데. 이 이미지와 숫자의 뜻은 다음과 같다. 1행 : 2*하트+별+사각형 = 11492행 : 3*삼각형+원 = 1364.... 1열 : 2*삼각형+사각형+하트 = 13852열 : 하트+3*삼각형 = 1525..... 이런식인데 이걸 연립방정식을 만들어서 각각 하트,삼각형,별,사각형,원 이 5개의 값을 방정식을 푼 뒤에 값을 찾아내서 2초안에 전송하면 성공이다. 미지수는 5개이나 식은 10개가 나오니 반드시 푸는게 가능하다. 풀려면 미지수 5개에 식 5개만 나와도 된다. 단순 프로그래밍만 좋아해서는 몰랐을텐데 이번에 듣는 수업중에 수치해석이라는 수업이 있는데, 해당 수업에서 매트랩으로 해당 미지수의 계수와 해당 값만 알면 구할수 있는 ..

Enigmagroup missions/programming 7

페이지를 열어보면 We need you to steal data from the Research department. 부분에서 빨간색 부분이 계속 바뀌고, 상자 내부의 Company: N.O.G.N.A 부분이 계속 바뀐다. 위의 두 빨간색 부분을 얻어와서 저장해두고 위의 department라는 이름의 회사의 budget총액을 계산해서 전달하면 된다. 본격적으로 정규표현식을 쓰기 시작했는데 이전의 쳐다보기도 싫은 더러운 코드보다 더 깔끔해진걸 느낄수 있었다. import urllib2,re req = urllib2.Request('http://www.enigmagroup.org/missions/programming/7/') req.add_header('cookie','내 쿠키값') page = urllib..

hack this site Programming missions : Unscramble the words

외국워게임 https://www.hackthissite.org 의 프로그래밍 문제이다. 우연찮게도 enigmagroup.org가 막혀서 이리로 와서 프로그래밍 1번을 풀어봤는데 이게 enigmagroup 에서 마지막으로 풀었던 프로그래밍 6번과 비슷한 문제이다. 들어가보면 단어가 섞여져 있고 사전파일을 하나 준다. 여기서 찾아서 알맞는 단어로 만든다음 word1,word2~이런형식으로 보내면 된다. 외국서버라 그런지 응답시간이 느리다. 그래서 30초나 준 듯 싶다. enigmagroup 6번을 더럽게 문자열을 가져오는것과 달리 이번부터는 정규식을 써서 가져왔다. 까먹었던 건데 파일열때는 f = open('wordlist.txt','r')for line in f: print line 요런식으로.. 또 re..

Enigmagroup missions/programming 6

페이지를 열면 섞인 단어 리스트가 나온다. ex) o)orrcspao ls a lte p(mfslntmmptiire punes rocoe ggnaostrheay acinkkb eDBSnop eEuSponS oeskoiigopcinno gpmoegr inua ecle aknnrip nardviam rtroten ielntuvylairb ncionlqitsej gaop)D ( d nPtfoehi cgM( ae)nmeihalxX SBl etner)ud os aDefboh(ce taoieln t (rse)PclpfrTofFro honkgio )f(pone utppscrfeut http://www.enigmagroup.org/missions/programming/6/keywords.txt에 사전 파일이 있고, 저..