[Dreamhack] 고전 암호 # 서론 고전 암호: 컴퓨터와 같이 고성능 연산 장치가 발명되기 전에, 비교적 간단하게 기계와 손 등으로 암복호화를 수행하던 암호를 말한다. 대부분 컴퓨터를 사용하면 쉽게 복호화되기 때문에 현대에는 사용되지 않는다. 고전 암호의 분류 # 단일 문자 치환 암호 단일 문자 치환 암호(Monoalphabetic Substitution): 평문의 각 문자를 약속된 다른 문자로 치환하는 암호이다. 복호화를 위해 치환의 대응 관계는 일대일 대응이다. 평문의 'A'가 암호문의 'B'로 치환된다면, 평문의 다른 어떤 문자도 'B'로 치환되지 않는다. 1. 카이사르 암호 카이사르 암호: 평문의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 치환한다. 이를 복호화할 때는 암호문의 각 ..
W6: Double Linked List(CRUD) 구현, 어셈블리로 구구단 구현, Stack 개념 공부하기 참고 자료: 자료구조 개념 및 구현 - 유석종 교수님(자료구조 수업 교재), Stack 참고자료 - 제공해주신 .md 파일 # 1. Double Linked List(CRUD) 구현 - SLL(Single Linked List)의 문제점: 다음 노드만 알고 이전 노드는 알 수 없음 - DLL(Double Linked List) 각 노드는 이전 노드와 이후 노드의 정보를 알 수 있음 삽입/삭제가 용이함 헤드 노드 필요: 데이터를 가지지 않고, 삽입/삭제 코드를 간단하게 할 목적으로 만들어진 노드 head node와 tail노드를 각각 사용할 수도 있지만 교재에서는 head node만을 사용하여 ci..
Reversing Engineering - 5. hello-world로 배우는 x64dbg 사용법 # 프롤로그 - hello-world.cpp // hello-world.cpp #include void main(){ puts("hello world!\n"); } # x64dbg 기본 설정 - x64dbg로 hello-world.exe를 열면 아무런 설정을 안했을 경우 아래와 같이 뜸 > 박스 부분을 살펴보면 현재 ntdll부분에 멈춰있는 것을 알 수 있음 > 이는 x64dbg가 기본적으로 시스템 중단점 설정이 켜져있기 때문 - 설정 - 환경설정으로 들어가서 아래 사진과 같은 창에서 시스템 중단점 설정을 변경해야 함 > 위의 창에서 박스로 표시된 옵션을 해제하면 됨 > 이후 디버깅 프로그램을 재시작하면 시..
Reversing Engineering - 1. 리버싱 엔지니어링이란 1. Reversing Engineering # Reversing Engineering - 리버싱 엔지니어링은 이미 만들어진 시스템이나 장치에 대한 해체나 분석을 거쳐 그 대상 물체의 구조와 기능, 디자인 등을 알아내는 일련의 과정 - 소프트웨어 뿐만 아니라 기계공학, 전자공학은 물론 생물학 등에서도 폭넓게 쓰임 - '완성품의 설계도 없이 구조와 동작 과정을 알아내는' 모든 단계 - 자료나 책에 따라 '역공학'이라고 지칭하기도 함 - 줄여서 '리버싱'이라고도 함 # 'Software' Reversing Engineering - 리버싱이 산업의 전 분야에 걸쳐 적용될 수 있지만, 여기서는 소프트웨어를 대상으로 할 것 - 즉, 소스 코드가..
# 알고리즘의 성능 분석 - 설계된 프로그램의 구현이 완료될 때 프로그램 성능 평가 과정이 수행됨 - 프로그램은 여러 개의 알고리즘으로 구성될 수 있으므로 알고리즘의 성능 평가라고 부를 수 있음 - 일반적인 성능 평가 질문의 예: 기준이 모호하고 구체적이지 않으므로 객관적인 평가 방법으로 사용하기에 적합하지 않음 더보기 · 프로그램이 본래의 요구 사항들을 만족하고 있는가? · 오류 없이 올바르게 동작하는가? · 효율적으로 구현되었는가? - 실행 가능한 성능 분석 기준: 공간 복잡도(space complexity), 시간 복잡도(time complexity) - 실행 가능한 성능 분석 기준은 알고리즘 간의 성능 비교가 가능함 → 측정 가능한 구체적인 수치를 제공하기 때문 # 공간 복잡도(Space Comp..