분류 전체보기 145

[사지방] Vue Cli3로 만든 프로젝트에서 "Invalid Host Header" 오류 시 대처법

#goorm #vue cli 군인으로써 사지방에 출근한 지 두달 쯤 되었다. 계속 알고리즘만 공부하다가 본격적인 개발을 해보고 싶어서 vue로 재미있는 플랫폼을 하나 만들어보려고 한다. 호기롭게 VUE 프로젝트를 만들고 npm run serve 를 실행했으나... 구름 IDE 에서 포워딩한 외부 URL은 Invalid Host Header 라는 오류만 내뱉을 뿐이였다. 방법을 한참 찾아보니 배포 모드가 아니라 개발모드로 build 한 상태에서는 vue.config.js 파일에서 disableHostCheck 속성을 true 로 해주어야 한다는 것이다. (분명 전에는 안그랬던 것 같은데... 아무튼) 위와 같이 vue.config.js 파일을 설정해주자. 파일이 없으면 직접 프로젝트 맨 상위 디렉토리에 직..

<사는이야기> 2020.05.22

[C++] sort에서 cmp함수를 설정할 때 주의할 점

1181번: 단어정렬 위 문제를 풀 때, algorithm 헤더의 sort 함수로 문자열 순서를 정렬할 때, 마지막 인자로 비교함수를 커스텀해서 넣어주는 부분이 있는데 비교함수를 잘못만들어서 런타임에러로 한참을 헤맸다. 다른 부분에서도 문제가 없었는데 왜 런타임에러가 났는지 이 질문 글을 통해 알 수 있었다. bool cmp(string a,string b){ if(a.size()!=b.size()){ return a.size()

<C++ study> 2020.04.19

[RSA 이해를 위한 몸부림 - 3] RSA 암호화 간단히 이해

RSA 암호화 RSA는 공개키 암호화 방식중 하나이다. 우선, 암호화 하는데에 KEY가 필요하겠다. 키는 총 두 가지의 KEY가 관여하는데 하나는 공개키, 하나는 개인키(비밀키)이다. 먼저 이 KEY들이 어떻게 만들어지는지 보자. 1. KEY 우선 공개키. 임의의 서로소인 수 p, q를 정하자. 그리고 n = p * q Φ(n) = (p-1) * (q-1)이라 하자. (Φ는 "파이" 라고 읽으면 된다) 그리고 1 < e < Φ(n) 이면서 Φ(n)과 서로소인 e를 정한다. 여기까지 잘했다면 공개키는 두 수 n과 e의 조합인 로 정할 수 있다. 다음은 개인키. 여기서 이전에 설명했던 모듈러 연산 및 역원이 쓰이는데 공개키 e와 곱해져서서 Φ(n)으로 나눴을 때 나머지가 1이 되는 d가 개인키에 이용된다. ..

[RSA 이해를 위한 몸부림 - 2] 모듈러 연산

모듈러 연산 모듈러 연산은 간단히 말하면 나머지를 구하는 연산이라고 볼 수 있다. 위 식에서 a는 피제수, b는 제수, c는 나머지 이다. 예를 들면, 26 mod 5 = 1 이 될 수 있을 것이다. 이해 되었다면 이제 모듈러 연산의 여러 특징을 정리하려 한다. 1. 합동 모듈러 연산에서 26 mod 5 나 36 mod 5 는 모두 똑같이 1로 같다. 이를 합동 이라는 개념으로 부를 수 있으며 표현은 이와 같이 한다. 1 ≡ 6 ≡ 26 ≡ 36 mod 5 = 1 2. 성질 모듈러 연산에는 아래와 같이 좌변의 덧셈과 곱셈에 대해 분해할 수 있는 성질이 있다. [1] (a + b) ≡ ((a mod n) + (b mod n)) mod n [2] (a * b) ≡ ((a mod n) * (b mod n)) ..

[RSA 이해를 위한 몸부림 - 1] 유클리드 알고리즘과 확장된 유클리드 알고리즘

1. 유클리드 알고리즘 유클리드 알고리즘은 최대 공약수의 두 가지 성질에 기반한 두 수의 최대공약수 추출 알고리즘이다. gcd(a,0) = a 두 수 중에서 한 쪽이 0이라면 두 수의 최대공약수는 다른 한 쪽 수이다. gcd(a,b) = gcd(b,r) ( ※ r은 a를 b로 나눈 나머지이다. ) 위와 같은 성질을 통해 나온 유클리드 알고리즘은 다음과 같다. gcd(a,b) = gcd(b,r) = ... = gcd(r,0) = r 이에 대한 것은 예제로 알아보자. ex) gcd(48,15) = gcd(15,3) = gcd(3,0) = 3 이런 식으로 48과 15의 최대공약수를 구할 수 있다. 파이썬으로 유클리드 알고리즘을 짜보자. def gcd(a,b): if(b==0): return a return g..

[System32.kr] RSA101

RSA101 #Crypto #RSA Algorithm #Inverse System32.kr 워게임의 메인컨텐츠로 보이는 Crypto 문제의 서막이다. RSA 문제 시리즈가 여러가지가 있는데 그에 대한 첫 단추를 꿸 수 있는 문제로 보인다. 이와 동시에 RSA공부도 시작할 수 있을 것 같다. RSA에 대한 것은 따로 정리하고 문제풀이에 관해서만 핵심적으로 정리하겠다. 우선 문제파일은 paste bin에 올라온 이 텍스트 파일이다. RSA에 필요한 서로소인 수 p,q 와 공개키 e, 그리고 암호화 된 데이터 c가 들어있다. 여기서 개인키 d를 추출해서 복호화 하면 될 것 같다. 참고로 원래 데이터인 M은 이러한 구조로 복호화 가능하다. 문제풀이를 위해 파이썬 Crypto 모듈을 이용했다. 모듈러 연산 시, ..

[ Reversing.kr ] Ransomware

Ransomware #crack me #custom crypto 오랜만에 reversing.kr 을 풀어보았다. 랜섬웨어라고 하는데... key를 알맞게 입력하면 압축파일로 같이 준 file을 올바르게 복호화 해주나보다. (키 값의 옳고 그름에 관계없이 일단 어떤 연산을 거쳐 복호화 해주긴한다.) 일단 처음 바이너리는 UPX로 패킹되어있다는 것을 알 수 있다. upx 언패커로 패킹을 해제하고... IDA에 올려보면 hex ray를 방해하기 위한 용도인지 쓸데없는 쓰레기 코드들이 있다. 그래서인지 main함수가 너무 크다며, 디컴파일이 안된다. 고민을 하다가 idc 함수를 이용해서 다 nop 처리 후, main함수 프롤로그를 옮기기로 하였다. 아래는 패치코드이다. addr=0x4135F4 end_addr=..

[Pwnable.xyz] UAF

UAF #pwnable.xyz #not UAF #overwrite #heap 배점에 비해 쉬웠던 문제. 핵심만 언급하려한다. 결론적으로 본 문제는 UAF를 이용하지 않아도 된다. UAF로 풀이하는 루트도 있을런지는 모르겠지만 필자는 그냥 overwrite를 이용해서 문제를 풀었다. 바이너리의 기능은 총 5가지이다. 게임을 시작하거나, 저장하거나, 지우거나, 게임이름을 출력하거나, 게임 이름을 수정하거나... 여기서 게임은 단순히 두 숫자를 받아서 xor한 값을 특정 heap영역에 저장하는 행동을 한다. 이 문제의 목표는 win 함수를 실행 시키는 것 같다. 우선 IDA로 보면 바이너리 실행직후, initialize_game 함수를 통해 특정 heap영역과 data영역을 구성한다. 구조는 대략 이러하다. ..

[Pwnable.xyz] GrownUp

GrownUp #pwnable.xyz #baby_fsb 오랜만에 pwnable.xyz 를 하였다. 몸풀기로 낮은 점수의 GrownUp 문제를 풀어보았다. 플래그는 바이너리에 내장되어있다고 한다. 바이너리 문자열을 검색해보면 진짜로 플래그 (물론 페이크 플래그)가 내장되어있다. 0x601080 이 주소를 기억하라. PIE가 적용되어있지 않아서 이 data영역의 주소는 서버에서도 동일하게 매핑되어있을 것이다. 바이너리 실행결과는 이렇다. 봐야할 주요부분은 main함수이다. 처음에는 setup 함수가 실행된다. setup 함수는 ... data영역의 0x601160 부분에 %s\n 문자열을 넣는다. 후에 0x601160은 main함수의 printf의 서식문자로 이용된다. 그리고 y or N에 대한 응답을 re..

반응형