2021/06

    Pwnable.kr :: Toddler's Bottle - mistake write up

    Pwnable.kr :: Toddler's Bottle - mistake write up

    대단한 해킹 실력은 필요없다고 말하는 mistake 문제. 사실인지 확인해보자. 힌트는 operator priority 라고 한다. 소스 코드를 확인하자. 소스 코드를 하나씩 확인해보면, 우선 open() 함수로 password 파일을 연다. 그리고 open() 함수가 return 하는 file descriptor 값이 fd 변수에 들어가고 0과 대소 비교를 하는 줄 알았는데 .... ! 힌트에서 알 수 있듯이 연산자 우선순위를 살펴보자 .. 이 부분에서 시간을 많이 썼다. if(fd=open("/home/mistake/password",O_RDONLY,0400) < 0) 이 조건식 안에서 = 과 < 연산자의 우선순위는 < 연산자가 높다. 즉, open() 함수가 return 하는 fd 값과 0을 먼저 ..

    System :: ARM Assembly 정리

    System :: ARM Assembly 정리

    ARM 아키텍처는 16개의 레지스터를 가지고 있다. R0 ~ R12 : 범용 레지스터. 인자값 저장 등 R13(SP) : Stack Pointer. 스택의 주소를 저장하는 레지스터. x86 의 ESP 레지스터와 비슷 R14(LR) : Link Register. 함수 호출 시 되돌아갈 함수의 주소가 저장되는 레지스터 R15(PC) : x86 에서의 EIP 레지스터와 동일한 역할. 다음에 실행할 코드의 주소 저장 어셈블리어에 대해 간단히 살펴보자. OP Code : MOV, ADD, SUB, LDR, STR 과 같은 어셈블리 명령어 cond : 조건부로 명령을 실행해야 할 경우 OP Code 뒤에 붙여서 사용. Rd : Destination Register. 연산작업의 결과값을 저장하는 레지스터. 반드시 R..

    Pwnable.kr :: Toddler's Bottle - leg write up

    Pwnable.kr :: Toddler's Bottle - leg write up

    pwnable.kr 의 leg 문제를 풀어보자. 문제를 들어가면 arm 에 배워야 한다고 말한다. 하지만 본인은 leg 가 더 좋다고 한다.. pwnable.kr 의 감성 아직은 따라가기 버겁다... 우선 ARM architecture 에 대해 알아보자. 임베디드 기기에서 많이 사용되는 RISC 프로세서로, 저전력을 사용하도록 설계하여 ARM CPU 는 모바일이나 싱글 보드 컴퓨터에서 뚜렷한 강세를 보인다고 한다. 출처 : https://ko.wikipedia.org/wiki/ARM_%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98 ARM 아키텍처 - 위키백과, 우리 모두의 백과사전 64/32비트 아키텍처발표2011년 (10년 전)(2011)버전Armv8-A, Armv8.1-A, Armv..

    백준 :: 1237번 정ㅋ벅ㅋ (Python)

    백준 :: 1237번 정ㅋ벅ㅋ (Python)

    백준 문제 알고리즘을 조금씩 풀면서 글을 써보려 한다. 오늘은 첫번째 문제 풀이 ! 사실 이 문제는 알고리즘 문제가 아니라 넌센스 문제이다. https://www.acmicpc.net/problem/1237 1237번: 정ㅋ벅ㅋ 우주를 정ㅋ벅ㅋ할 사람에게는 예제 입력과 예제 출력이 필요하지 않다. www.acmicpc.net 문제를 살펴보자. 입력없이 "첫째 줄에 문제의 정답을 출력한다" 고만 되어있다. 무슨 말인지 알지 못해 시간이 걸렸는데.. 말 그대로 "문제의 정답" 을 출력하면 끝이다... print("문제의 정답") 끝.

    Pwnable.kr :: Toddler's Bottle - random write up

    Pwnable.kr :: Toddler's Bottle - random write up

    random 문제를 풀어보자. 첫 번째 fd 문제와 동일하게 1pt 짜리 문제이다. 실제로도 크게 어렵지 않은 문제였다. 문제를 살펴보자. 역시나 세 개의 파일이 존재한다. 소스코드를 보자. rand() 함수를 이용해 랜덤값을 만들어 random 변수에 저장하고 scanf() 로 입력받은 값과 xor 연산을 해서 연산 결과가 0xdeadbeef 이면 flag 를 출력한다. 이 문제를 풀 때 알아야 할 것이 하나 있는데, rand() 함수는 프로그램이 실행될 때 값이 정해진다. 즉 프로그램을 여러번 실행시켜도 동일한 값이 나온다는 것이다. 프로그램 실행 시 매번 다른 난수를 얻고 싶다면 srand() 함수를 사용해야 한다. 그럼 우리는 rand() 함수를 실행시킨 뒤 해당 값을 알아내기만 하면 끝이다. 역..

    Pwnable.kr :: Toddler's Bottle - passcode write up

    Pwnable.kr :: Toddler's Bottle - passcode write up

    pwnable.kr 의 다섯 번째 문제 passcode 를 풀어보자. ssh 로 접속해보자. 이전 문제들과 같이 세 개의 파일이 존재한다. 소스코드를 훑어보자. 우선 눈여겨 봐야 할 부분은 login() 함수 부분이다. scanf() 로 정수를 입력받고 있다. 여기서 주의해야 할 부분이 있는데, passcode 변수에 정수값을 저장하는 것이 아니다. 우리는 흔히 scanf() 를 이용해 정수를 입력받을 때 다음과 같이 진행한다. scanf("%d", &passcode1); scanf() 함수에서 두 번째 인자에 해당하는 "&passcode1" 에 정수를 입력하라는 의미이다. 여기서 & (ampersand) 는 변수의 주소값을 가리킨다. 즉 두 번째 인자로 전달된 &passcode1 은 passcode1 ..

    Python :: 15 - 텐서플로우로 딥러닝의 맛을 보자

    Python :: 15 - 텐서플로우로 딥러닝의 맛을 보자

    이번 글에서는 "딥러닝"에 대해 간단히 소개하고자 한다. 우리는 지난 글에서 기계학습에 대해서, 그 중에서도 선형회귀모델을 분석하는 간단한 예제를 진행했었다. 기계학습 중에서도 최근 큰 성공을 거두고 있는 딥러닝이라는 기술에 대해 알아보자. 인간의 뇌는 뉴런이라는 수많은 신경세포가 연결되어있다. 이들은 서로 화학적 신호를 주고 받는다. 인간의 뇌와 유사하도록 인공적인 신경세포를 흉내내는 프로그램을 컴퓨터 과학자들은 "퍼셉트론 perceptron" 이라고 한다. 퍼셉트론이 하나의 신경세포를 흉내내는 것이라면 인간의 뇌는 입력신호를 바로 출력으로 바꾸는 것이 아니라 입력신호를 받아 숨겨진 여러 층을 거친 뒤에 출력신호를 내어 놓을 것이다. 이것을 복잡하게 만들면 많은 층을 거쳐 가는 깊은 신경망의 될 것이다..

    Python :: 14 - 기계학습으로 똑똑한 컴퓨터를 만들자

    Python :: 14 - 기계학습으로 똑똑한 컴퓨터를 만들자

    우리는 이때까지 파이썬에 대해 공부해왔다. 여러 라이브러리들을 사용해보고, 다양한 데이터를 분석하는 것에 초점을 두었다. 이번에는 데이터를 기반으로 학습을 수행하는 기계학습의 원리를 알아보자. 파이썬은 이러한 기계학습을 공부하는 것에 있어서도 다양한 라이브러리를 지원해준다. 우리는 그 중 하나인 sckit-learn 을 이용하여 간단한 분석을 진행해보겠다. 우선 기계학습에 대해 알아보자. 컴퓨터가 사람처럼 스스로 배울 수 있다면 어떻게 될까? 우리는 이때까지 컴퓨터에게 특정 작업을 시키기 위해 프로그램을 작성하고 지시하였다. 하지만 컴퓨터가 데이터를 기반으로 스스로 학습할 수 있다면 컴퓨터는 더욱 더 복잡한 일을 할 수 있을 것이다. 예를 들면 알파고와 이세돌의 바둑 경기가 그렇다. 알파고에게 바둑 경기..