class Node:

    def __init__(self, value = None, next = None):

        self.data = value

        self.next = next

    def __str__(self):

        return str(self.data)

#우선순위 큐

class Priority_que:

    def __init__(self, head = None ):

        self.node = Node(head)

        self.head = self.node

#제일 앞의 큐를 뽑아낸다

    def Dequeue(self):

        self.head = self.head.next

#데이터를 받아서 순위에 따라 배치한다

    def Enqueue(self,data):

        insert_data = Node(data)

        comp = self.head

        pre = Node()

        if insert_data.data < comp.data:

            self.head = insert_data

            insert_data.next = comp

        else:

            while  True:

                if comp.data >= insert_data.data:

                        pre.next = insert_data

                        insert_data.next = comp

                        break

                elif comp.data < insert_data.data:

                    if comp.next == None:

                        comp.next = insert_data

                        break

                    else:

                        pre = comp

                        comp = comp.next

#우선순위 큐를 출력한다

    def PrintLL(self):

        node_print = self.head

        

        while True :

            if node_print.next == None:

                print(node_print.data)

                break

            else:

                print(node_print.data , "->", end=" ")

                node_print = node_print.next

#큐를 만든다

k=Priority_que(5)

#여러 숫자로 큐를 만든다

k.Enqueue(4)

k.Enqueue(7)

k.Enqueue(8)

k.Enqueue(4)

k.Enqueue(7)

k.Enqueue(8)

k.Enqueue(4)

k.Enqueue(7)

k.Enqueue(8)

k.Enqueue(10)

#만든 큐를 출력한다

k.PrintLL()

#큐를 뽑아낸다

k.Dequeue()

k.PrintLL()

k.Dequeue()

k.Dequeue()

k.PrintLL()   


1. class Node:

우선 받은 data 값과 next 값을 초기화 해 줄수있다.



2. Priority_que:

노드를 가리키는 self.node와 제일 처음노드 self.head를 초기값으로 가진다.

2-1 Dequeue

제일 첫 머리의 큐를 밖으로 보내기 때문에 self.head 값을 next값으로 바꾸어 준다.

2-2 Enqueue

먼저 넣으려는 노드를 만들고 그 전의 값을 저장하기위해 노드를 하나더 만든다. 그리고 제일 첫값을 비교값으로 만든다. 우선 if문으로 비교하는 데이터값보다 넣으려는 값이 더 작다면 그 값을 제일 앞에 오게 만들어 준다.

그것이 아니라면 while문 안에서 우선 조건을 모두 만족시키지 않으면 pre값에는 현재 비교값 그리고 비교값에는 다음비교값을 넣어서 한칸 이동시켜준다. 그리고 만약 비교값이 넣어주려는 노드값보다 크면 pre값의 next에 삽입값을 넣어주고 삽입값의 next에 비교값을 넣어준다. 그리고 만약 모든 비교값보다 삽입값이 더 크다면 제일 뒤의 값의 next에 삽입값을 넣어준다.

2-3 PrintLL

제일 마지막 값까지 계속 출력시켜준다



class Node:

    def __init__(self,value = None, next = None):

        self.data = value

        self.next = next

        self.number = 0

    def __str__(self):

        return str(self.data)

    

class LinkedList:

    def __init__(self, head = None):

       self.node = Node(head)

       self.head = self.node

    #리스트에 노드 추가

    def AppendNode(self,data):

        pre_node = self.node

        self.node = Node(data)

        pre_node.next = self.node

        self.node.number = pre_node.number + 1

    #loc번째 노드에 든 값

    def GetNodeAt(self,loc):

        new_node = self.head

        while new_node.next:

            if new_node.number+1 == loc:

                print (new_node.data)

                break

            else:

                new_node = new_node.next

    #리스트의 길이

    def GetNodeCount(self):

        return self.node.number+1

   

    #loc번째 자리에 data값의 노드 추가

    def InsertNodeAt(self,loc,data):

        node_head = self.head

        insert_node = Node(data)

        insert_node.number = loc-1

        temp = Node()


        while node_head.next:

            if node_head.number+2 == loc:

                temp = node_head.next

                node_head.next = insert_node

                insert_node.next = temp

                break

                

            else:

                node_head = node_head.next

        while True:

            temp.number = temp.number + 1

            temp = temp.next

            if temp.next == None:

                temp.number = temp.number + 1

                break

    #data값이 든 노드 삭제

    def Remove(self,data):

        node_head = self.head

        node_temp = self.head

        remove_node = Node(data)


        while node_head.next:

            if node_head.data == remove_node.data:

                while True:

                    if node_head.number == node_temp.number:

                        self.head = self.head.next

                        break

                    elif node_temp.number == node_head.number - 1:

                        node_temp.next = node_head.next

                        break

                    else:

                        node_temp = node_temp.next

                break

            else:

                node_head = node_head.next

        temp = node_temp.next

        while True:

            temp.number = temp.number - 1

            temp = temp.next

            if temp.next == None:

                temp.number = temp.number - 1

                break

    #리스트에 리스트 추가

    def ExtendList(self, aList):

        for k in aList:

            node_add = Node(k)

            self.AppendNode(node_add)

            

    #리스트 전체 출력

    def PrintLL(self):

        node_print = self.head

        

        while True :

            if node_print.next == None:

                print(node_print.data)

                break

            else:

                print(node_print.data , "->", end=" ")

                node_print = node_print.next

        

#리스트  k 생성

k = LinkedList(4)

#k 리스트에 노드 추가

k.AppendNode(1)

k.AppendNode(2)

k.AppendNode(3)

k.AppendNode(4)

k.AppendNode(5)

#k 리스트 출력

k.PrintLL()

#k리스트에 5번째 자리에 3 추가

k.InsertNodeAt(5,3)

k.PrintLL()

#데이터 4 를 가진 노드 삭제

k.Remove(4)

k.PrintLL()

#리스트[1,2,3]을 리스트k에 추가

k.ExtendList([1,2,3])

k.PrintLL()


1. class Node:

먼저 노드 클래스는 __init__함수와 __str__함수로 구성했다.

Node는 data , next, number로 구성했는데 data는 그 노드의 값, next는 그 다음 링크되어진 값을 가리킨다. 넘버는 위치를 알때 쓰기위해서 만들었다.

2. class LinkedList:

먼저 링크 클래스에서는 초기값으로 노드와 그 노드값중 제일 처음을 가리키는 헤드값을 준다.


2-1. AppendNode( self, data )   

AppendNode는 노드를 하나씩 추가해주기 때문에 먼저 현재 가리키는 노드를 받은 data값으로 만들어 주고 원래 제일 마지막 노드를 가리키는 self.node의 next를 만들어준 노드로 가리키게 하고 self.node를 다시 새로만든 노드로 가리키게 해준다. 또 새로만든 노드의 number값은 그 전값의 +1을 해준다.

2-2 GetNodeAt( self, loc )

loc번째의 노드에 든 값을 나타내어 준다. 먼저 노도의 헤드부분을 가리키는 값을 만들고 while문으로 처음부터 맨 마지막값까지 

if문을 써서 인덱스 값은 0 부터 시작하기에 그값에 1을 더한값의 위치일때 그 값을 출력해준다.

2-3 InsertNodeAt( self, loc, data )

loc번째 자리에 data값의 노드를 추가해주는 함수로 우선 넣어줄 자리를 알아야 한다. 그렇기 때문에 먼저 넣어줄 loc번째 자리에 -1값을 만들어준 노드의 number에 넣어주고 또 while문을 돌려준다. 우선 넣어줄 노드의 앞의 값을 알아야 하기때문에 넣어줄 자리보다 2자리 앞의 값을 찾아서 그값의 next를 넣어줄 데이터로 또 그 다음 자리를 넣어줄 노드의 next값으로 만든다. 그리고 그 뒤의 자리에 값들은 모두 number값에 1을 더해준다.

2-4 GetNodeCount(self)   

self.node의 값은 항상 제일 마지막 자리를 가리키고 있기 때문에 self.node의 number값에 1을 더한 값이 전체 길이!

2-5 Remove( self, data )

먼저 변수가 node_head는 제일처음부터 차례로 내려가면서 삭제할 데이터와 비교할 값이고 node_temp는 삭제할 값 전 노드를 가리킬 변수이다. 우선 삭제할 데이터 값과 현재의 값을 비교하면서 헤드값을 차례로 내려간다. 그리고 삭제할 값과 비교값이 같을때 

우선 제일 첫 헤드노드가 temp노드와 같을때 즉 self.head노드가 삭제할 값일 때 self.head를 next값으로 해줌으로써 제일 앞 노드를 삭제했다. 또 그 다음은 temp노드가 비교노드의 바로 전값이 되기 전까지 내려주고 전 값이면 temp노드의 next를 비교노드의 next와 연결해 줌으로써 가운데 값을 삭제해 준다. 그리고 그후는 삭제된 노드의 다음자리부터 모두 number값을 하나씩 줄여 줌으로써 number값도 세팅해 준다.

2-6 ExtendList( self, aList)

이 함수는 노드를 linked list형으로 바꾸어 주는 것 으로 for 문으로 리스트를 받아 하나씩 AppendNode로 이어준다.

2-7 PrintLL(self)

전체 LinkedList를 끝자리가 아니면 계속해서 이어서 출력해주는 함수이다.





SELECT * FROM [TABLE NAME] limit 10;

// TABLE NAME으로 부터 10개 가져오기

SELECT * FROM [TABLE NAME] limit 2,15;

//TABLE NAME으로 부터 2번째부터 15개 가져오기

//첫번째의 인덱스는 0


'함수들' 카테고리의 다른 글

@file함수  (0) 2018.01.04
fwrite함수  (0) 2018.01.04
fopen함수  (0) 2018.01.04
ereg, eregi함수  (0) 2018.01.02
mysql if문  (0) 2017.09.10

javascript challenge!

자바스크립트 도전!

우선 소스를 보기로 한다.

WorkTimeFun=String.fromCharCode(118,97,114,32,101,110,99,111,61,39,39,59,13,10,118,97,114,32,101,110,99,111,50,61,49,50,54,59,13,10,118,97,114,32,101,110,99,111,51,61,51,51,59,13,10,118,97,114,32,99,107,61,100,111,99,117,109,101,110,116,46,85,82,76,46,115,117,98,115,116,114,40,100,111,99,117,109,101,110,116,46,85,82,76,46,105,110,100,101,120,79,102,40,39,61,39,41,41,59,13,10,32,13,10,32,13,10,102,111,114,40,105,61,49,59,105,60,49,50,50,59,105,43,43,41,13,10,123,13,10,101,110,99,111,61,101,110,99,111,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,105,44,48,41,59,13,10,125,13,10,32,13,10,102,117,110,99,116,105,111,110,32,101,110,99,111,95,40,120,41,13,10,123,13,10,114,101,116,117,114,110,32,101,110,99,111,46,99,104,97,114,67,111,100,101,65,116,40,120,41,59,13,10,125,13,10,32,13,10,105,102,40,99,107,61,61,34,61,34,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,52,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,51,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,49,57,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,54,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,48,48,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,48,52,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,50,50,50,45,50,41,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,95,40,49,57,56,41,41,43,34,126,126,126,126,126,126,34,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,50,41,43,83,116,114,105,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,40,101,110,99,111,51,41,41,13,10,123,13,10,97,108,101,114,116,40,34,80,97,115,115,119,111,114,100,32,105,115,32,34,43,99,107,46,114,101,112,108,97,99,101,40,34,61,34,44,34,34,41,41,59,13,10,125,13,10); eval(WorkTimeFun);

소스가 난독화 되어있는 모습을 볼 수 있다.

굉장히 보기 불편하다.

우선 eval(string) 는 자열로 넘어온 자바스크립트 구문을 실행하는데,

호출하는 위치와 방식에 따라 eval의 실행 컨텍스트와 범위(scope)가 달라진다.

그래서 우선 WorkTimeFun을 해독하기 위해서

크롬console 에 넣어보던지

javascript:document.write(WorkTimeFun)또는

javascripts:alert(WorkTimeFun)을 주소창에 쳐 보았다.


"var enco='';

var enco2=126;

var enco3=33;

var ck=document.URL.substr(document.URL.indexOf('='));

 

 

for(i=1;i<122;i++)

{

enco=enco+String.fromCharCode(i,0);

}

 

function enco_(x)

{

return enco.charCodeAt(x);

}

 

if(ck=="="+String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3))

{

alert("Password is "+ck.replace("=",""));

}

"

그랬더니 소스코드가 나왔다.

위의 소스에서 ck == 뒷 조건을 만족 해 주면 답이 나오는 것 같다.

따라서 

String.fromCharCode(enco_(240))+String.fromCharCode(enco_(220))+String.fromCharCode(enco_(232))+String.fromCharCode(enco_(192))+String.fromCharCode(enco_(226))+String.fromCharCode(enco_(200))+String.fromCharCode(enco_(204))+String.fromCharCode(enco_(222-2))+String.fromCharCode(enco_(198))+"~~~~~~"+String.fromCharCode(enco2)+String.fromCharCode(enco3)


를 콘솔에 넣어주면

답이 나온다!

'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 54번  (0) 2017.10.16
webhacking.kr 10번  (0) 2017.10.15
Webhacking.kr 16번  (0) 2017.09.23
Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14

시작 화면이 난감하게 별만 달랑있다.

따라서 또 소스코드를 보았다.

우선 소스에서

innerHTML : 특정요소를 가져오거나, 변경할때 사용

onkeypress : 내가 키를 눌렀을 때 동작

Math.floor : 소수값이 있을 때 소수값은 버려주는 함수

Math.random : 랜덤값을 뽑아준다

onmouseover : 해당 이벤트 영역에 마우스커서를 올리면 반응을 해준다

String.fromCharCode(): 받은 값을 유니코드에 해당되는 문자 or 문자열을 반화해 준다

location.href : 페이지를 이동시켜준다


일단 body안에서 html은 위에서 순차적으로 내려가면서 실행 하기 때문에 

body에서 처음 줄에서 kk()함수는 쓸 수 없지만 onload함수때문에 모든 구현이 다 끝난후 실행해 주기에 쓸 수있습니다.

먼저 kk(x,y)함수는 rndc의 값에 9000000보다 같거나 작은 숫자를 정해주고 그 값을 색깔로 해서

x,y좌표를 가지는 문장을 만들어 줍니다. 그리고 마우스를 대면 ' ' ,즉 지워지고 아니면 *을 만들어 줍니다.

또 mv(cd)함수는 먼저 kk함수를 불러오는데 star의 posletf값에서 50을 뺀 값과 posTop-50값을 x,y에 넣어줍니다.

이때 cd값에 따라 좌표가 바뀝니다.

하지만 cd 값은 124일 때 페이지를 이동시켜줍니다. 그리고 String.fromCharCode(cd)로 cd의 값을 유니코드 값으로 바꾸어 줍니다.

따라서 124를 만들어 주기 위해서는 '|'를 넣는다면 위치가 바뀔 것 입니다.

그러면 정답화면으로 넘어갑니다.

16번도 클리어!

'WebHacking > Webhacking.kr' 카테고리의 다른 글

webhacking.kr 10번  (0) 2017.10.15
Webhacking.kr 12번  (0) 2017.09.24
Webhacking.kr 14번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14
Webhacking.kr 15번  (0) 2017.09.14

10진수

ASCII

10진수

ASCII

0

NULL

64

@

1

SOH

65

A

2

STX

66

B

3

ETX

67

C

4

EOT

68

D

5

ENQ

69

E

6

ACK

70

F

7

BEL

71

G

8

BS

72

H

9

HT

73

I

10

LF

74

J

11

VT

75

K

12

FF

76

L

13

CR

77

M

14

SO

78

N

15

SI

79

O

16

DLE

80

P

17

DC1

81

Q

18

SC2

82

R

19

SC3

83

S

20

SC4

84

T

21

NAK

85

U

22

SYN

86

V

23

ETB

87

W

24

CAN

88

X

25

EM

89

Y

26

SUB

90

Z

27

ESC

91

[

28

FS

92

\

29

GS

93

]

30

RS

94

^

31

US

95

_

32

SP

96

.

33

!

97

a

34

"

98

b

35

#

99

c

36

$

100

d

37

%

101

e

38

&

102

f

39

'

103

g

40

(

104

h

41

)

105

i

42

*

106

j

43

+

107

k

44

'

108

l

45

-

109

m

46

.

110

n

47

/

111

o

48

0

112

p

49

1

113

q

50

2

114

r

51

3

115

s

52

4

116

t

53

5

117

u

54

6

118

v

55

7

119

w

56

8

120

x

57

9

121

y

58

:

122

z

59

;

123

{

60

<

124

|

61

=

125

}

62

>

126

~

63

?

127

DEL


'컴퓨터 관련 정보' 카테고리의 다른 글

idapython 7.4 바뀐 API 비교 목록  (1) 2019.12.03
ESP, EBP  (0) 2018.04.16
정규표현식  (0) 2018.01.09
Google검색  (0) 2017.12.28
url code 표  (0) 2017.09.18

일단 문제는 달란 input할수 있는 창하나 이다.

그래서 코드를 보았다.


저기서

ul = document.URL

ul = ul.indexOf(".kr")

ul = ul*30

이것을 해석하면 답을 찾을 수 있을 것 같았다.

우선 document,URL은 주소를 문장으로 받아서 저장하는 것이다.

또 indexOf는 괄호 안에 있는 문자가 몇번째에 있는지를 return 해 주는 함수이다.

따라서 

http://webhacking.kr/challenge/javascript/js1.html에서

.kr은 앞에서 부터 17번째에 있기 때문에 17이고 그 밑에 30을 곱해주기 때문에

답은 17*30인 510이다!

그것을 입력하면 Auth의 값을 알 수있다.

14번 클리어!


'WebHacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 12번  (0) 2017.09.24
Webhacking.kr 16번  (0) 2017.09.23
Webhacking.kr 17번  (0) 2017.09.14
Webhacking.kr 15번  (0) 2017.09.14
Webhacking.kr 2번  (0) 2017.09.10

Character

Code

Character

Code

%26%23169;

t

%74

®

%26%23174;

u

%75

%E2%84%A2

v

%76

backspace

%8

w

%77

tab

%9

x

%78

linefeed

%0A

y

%79

creturn

%0D

z

%7A

space

%20

{

%7B

!

%21

|

%7C

"

%22

}

%7D

#

%23

~

%7E

$

%24

%A2

%

%25

%A3

&

%26

%A5

'

%27

|

%A6

(

%28

§

%A7

)

%29

%AB

*

%2A

%AC

+

%2B

?

%AD

,

%2C

º

%B0

-

%2D

±

%B1

.

%2E

ª

%B2

/

%2F

,

%B4

0

%30

μ

%B5

1

%31

%BB

2

%32

¼

%BC

3

%33

½

%BD

4

%34

¿

%BF

5

%35

A`

%C0

6

%36

%C1

7

%37

A^

%C2

8

%38

A~

%C3

9

%39

%C4

:

%3A

%C5

;

%3B

Æ

%C6

<

%3C

%C7

=

%3D

E`

%C8

>

%3E

%C9

?

%3F

E^

%CA

@

%40

%CB

A

%41

I`

%CC

B

%42

%CD

C

%43

I^

%CE

D

%44

%CF

E

%45

Ð

%D0

F

%46

N~

%D1

G

%47

O`

%D2

H

%48

%D3

I

%49

O^

%D4

J

%4A

O~

%D5

K

%4B

%D6

L

%4C

Ø

%D8

M

%4D

U`

%D9

N

%4E

%DA

O

%4F

U^

%DB

P

%50

%DC

Q

%51

%DD

R

%52

Þ

%DE

S

%53

ß

%DF

T

%54

a`

%E0

U

%55

%E1

V

%56

a^

%E2

W

%57

a~

%E3

X

%58

%E4

Y

%59

%E5

Z

%5A

æ

%E6

[

%5B

%E7

\

%5C

e`

%E8

]

%5D

%E9

^

%5E

e^

%EA

_

%5F

%EB

`

60%

i`

%EC

a

61%

%ED

b

62%

i^

%EE

c

63%

%EF

d

64%

ð

%F0

e

65%

n~

%F1

f

66%

o`

%F2

g

67%

%F3

h

68%

o^

%F4

i

69%

o~

%F5

j

%6A

%F6

k

%6B

÷

%F7

l

%6C

ø

%F8

m

%6D

u`

%F9

n

%6E

%FA

o

%6F

u^

%FB

p

%70

%FC

q

%71

%FD

r

%72

þ

%FE

s

%73

%FF


'컴퓨터 관련 정보' 카테고리의 다른 글

idapython 7.4 바뀐 API 비교 목록  (1) 2019.12.03
ESP, EBP  (0) 2018.04.16
정규표현식  (0) 2018.01.09
Google검색  (0) 2017.12.28
Ascii 코드표  (0) 2017.09.23

+ Recent posts