본문 바로가기

분류 전체보기

(312)
다크웹 • VPN - 가상 사설망 (Virtual Private Network) - 여러 네트워크를 마치 하나의 네트워크처럼 연결 - Tunneling이라는 프로토콜을 사용하여 네트워크 암호화 • Proxy - 대리인이라는 뜻으로 웹 사이트 접근 시 중간 경유하여 IP를 변조 • SOCKS5 - SOCKS socket Secure - MIPS 컴퓨터 시스템의 시스템 관리자인 데이비드 코블라스에 의해 개발 - 프록시 서버를 통해 클라이언트와 서버 간에 네트워크 패킷을 교환하는 인터넷 프로토콜 - 실제로 SOCKS 서버는 TCP 연결을 임의의 IP주소에 프락시하고 UDP 패킷을 전달하기 위한 수단을 제공 - SOCKS5는 네트워크 트래픽 유형을 구별할 수 없기 떄문에 가장 유현한 서버 프로토콜로 간주되는 확장이다...
11일차 스택의 응용 : 올바른 괄호 검사 ∙ 올바른 괄호 검사 - 괄호만으로 이루어진 문자열이 주어질 때, 괄호의 종류별로 쌍이 제대로 되어 있는지를 검사하기 - 괄호의 종류 : [ ] (대괄호, brackets), { } (중괄호, braces), ( ) (소괄호, parentheses) - 올바른 괄호의 조건 > 괄호의 종류별로 여는 괄호와 닫는 괄호의 개수가 같아야 한다. > 같은 종류의 괄호에서 여는 괄호가 닫는 괄호보다 먼저 나타나야 한다. > 마지막 여는 괄호와 쌍이 되는 닫는 괄호가 먼저 나타나야 한다. ∙ 올바른 괄호 검사 알고리즘 - 문자열의 각 문자를 차례대로 검사 > 여는 괄호 (, {, [ 를 만나면 스택에 push > 닫는 괄호 ), }, ] 를 만나면 > 스택이 비어 있으면 false ..
10일차 문자열과 백터 순서 뒤집기 ∙ 문자열 뒤집기 - 문자열의 각 문자 순서를 역순으로 변경 (Palindrome) - 문자열을 역순으로 뒤집는 방법은 여러 가지 있지만, 스택을 사용하여 변경할 수 있음 ex) "Hello" -> "olleH" , "ALGORITHM" -> "MHTIROGLA" ∙ 스택을 이용한 문자열 뒤집기 - 문자열의 각 문자를 스택에 push한 후, 다시 스택에서 문자를 하나씩 pop 하여 출력 문자열을 생성 ∙ 예시 코드 #include #include using namespace std; string reverse(const string& str) { stack stk; for (char c : str) stk.push(c); string res; while (!stk.empty()..
9일차 스택 ∙ 스택이란? - stack : 물건을 쌓아 올린 더미 또는 쌓는 행위 - 자료 구조에서 스택은 데이터를 쌓아 올리듯이 저장하는 선형 자료 구조로서, 후입선출 원리에 따라 삽입과 삭제가 수행됨 - 후입선출 (LIFO, Last-in First-out) : 나중에 들어온 데이터가 먼저 출력됨 - 데이터의 입출력이 한쪽 방향에서만 수행되는 리스트 ex) 텍스트 편집기의 실행 취소 가능, 웹 브라우저에서 뒤로 가기, 함수 호출 시 복귀 주소 기억 ∙ 스택의 주요 연산 - push(e) : 스택의 맨 위에 원소 e를 추가 - pop() : 스택의 맨 위에 있는 원소를 삭제 - top() : 스택의 맨 위에 있는 원소를 참조. peek() - empty() : 스택이 비어 있으면 true를 반환 - size..
rev-basic-2 chall0.exe, chall1.exe 와 같은 방식으로 프로그램이 동작한다. call chall2.7FF767801000 메모리 호출에 들어가 확인해 보자. 해당 EIP를 하나씩 움직이면서 보니까 스택에 저장된 문구랑 비교를 하는 거 같다. 스택을 확인 후, chall2 00007FF767803000 주소가 저장이 되어있다. 해당 스택에 어떤게 저장이 되어있는지 메모리에서 확인을 하니 Comp4re_the_arr4y 문구가 저장이 되어있다.
rev-basic-1 chall1.exe 프로그램을 실행시키면 chall0.exe와 같은 프로그램처럼 Input이 출력이 된다. "Correct"가 출력이 되기 위해서는 text eax, eax에서 비교를 한 결과로 인해 참과 거짓으로 나눠진다. Call chall1.7FF740E41000에서 호출을 하여 text에서 비교를 하는 거 같다. 호출되는 주소로 들어가 보니까 내가 입력한 aaaa 데이터를 하나 하나씩 비교를 해서 검사를 하는 거 같다. 해당 문자를 합치니까 Compar3_the_ch4ract3r 문자열이 된다.
rev-basic-0 chall0.exe을 실행시키면 Input 이 출력이 되면서 임의의 숫자, 문자를 입력을 하니, 프로그램이 종료된다. 프로그램에서 원하느 문자를 입력해야지 프로그램이 종료가 안된다고 추측할 수 있다. 디버깅툴을 사용하여 프로그램을 열었을 때, Correct 랑 wrong 문구가 보인다. Coorect 문구가 적혀있는 위 주소를 보면 je chall0 7FF74D0D1166 메모리가 적혀있는 걸 볼 수 있다. 즉, text eax, eax에서 비교를 해서 참과 거짓을 구별하는 거 같다. 그렇기에 우리가 찾아야할 correct 출력 값은 chall chall0.7FF74F0D1166에서 호출이 된다는 걸 추측할 수 있다. "Compar3_the_str1ng" 문자열과 내가 입력했던 "aaaa" 문자열을 비교..
8일차 향상된 이중 연결 리스트 클래스 ∙ DoublyLinkedList 클래스에 추가할 기능 - 반복자(iterator) 지원 - 데이터 검색 기능 - 범용 데이터 저장을 위한 클래스 템플릿 작성 ∙ DoublyLinkedList 클래스에 begin()과 end() 멤버 함수 추가 iterator begin() const { return iterator(header -> next); } iterator end() const { return iterator(trailer); } ∙ DoublyLinkedList 클래스에 find() 멤버 함수 추가 iterator find(cost int val) { Node* curr = header -> next; while (curr -> data != val && cur..