일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 2020.05.17
- Constraint
- 모달인듯 모달 아닌 뷰
- 순차 컨테이너
- UIPanGestureRecognizer
- 컴퓨터구조
- 백준 10828
- Swing
- scroll
- SWiFT
- Animation
- 2020.04.19
- BOJ
- 2020.06.14
- Reverse Engineering
- Stack
- Reversing
- vector
- 컴퓨터 구조
- ios
- 스택
- NavigationBar
- 백준 1920
- 표준 템플릿 라이브러리
- UIView
- struct
- list
- stl
- 알고리즘
- class
- Today
- Total
목록전체 글 (29)
야금야금
[Crackme #2] crackme #1에서는 프로그램의 작동 원리를 파악하여 우리가 원하는 방향으로 동작하도록 파일의 명령어 자체를 수정하여 패치(크랙)하였다. crackme #2에서는 한 단계 나아가서 전형적인 크랙의 형태인 시리얼 키(serial key)를 알아내는 과정을 파악한다. 프로그램 설명 : Name과 Serial 값을 입력한다. 입력받은 Name값마다 일치하는 Serial값이 존재하고 해당 값이 아닌 다른 값이 입력되면 잘못된 값이라는 창이 뜬다. 목표 : 입력받은 Name문자열에 맞는 Serial값을 알아내고 Name문자열을 기반으로 Serial을 생성하는 알고리즘을 파악한다. 우선, 해당 프로그램의 EP코드를 확인해 보자 본 프로그램은 Visual Basic(이하 VB)으로 제작되었..
[Crackme #1] 프로그램 설명 : 드라이브 타입을 확인하여 해당 타입의 메시지 박스를 출력한다. 목표 : 단순 패치를 이용하여 해당 상황의 메시지 박스가 아닌, 원하는 메시지 박스를 출력한다. 프로그램 시작 시 "Make me think your HD is a CD-Rom" (=HD가 해당 프로그램을 CD-Rom이라고 인식하게 만들어라) 메시지 박스가 출력된다. 확인을 누를 경우 "Nah… This is not a CD-ROM Drive!"라는 메시지 박스가 출력되면서 프로그램이 종료된다. 본 패치(크랙)의 목표는 코드를 분석 후 수정하여 "Ok, I really think that your HD is a CD-ROM! :p"라는 메시지 박스가 출력되는 것이다. 아래는 본 프로그램의 EP코드이다...
목표 : 출력값인 Hello World!를 Hello Reversing!으로 바꾸기 사용 프로그램 : OllyDbg(올리디버거) 일반적으로 프로그램의 실행파일은 2진수(Binary)로 되어있다. 해당 2진수를 16진수(Hex)로 변환시키고 Disassemble과정을Disassemble 거쳐 어셈블리 코드 형태로 변환시켜주는 프로그램. 방법 : 컴퓨터는 메모리 주소를 호출하고 값을 반환하는 행위를 반복한다. 따라서 "Hello World!"라는 문장을 출력하는 함수(printf )를 호출하는 명령어를 찾아야 한다. 함수(printf )는 "Hello World!"라는 문자열이 담긴 메모리를 사용할 것이다. 따라서 해당 주소의 문자열 자체를 "Hello Reversing!"으로 바꾸거나 문자열을 참조하는 명..
레벤슈타인 또는 N-gram과 같은 방법을 사용해 텍스트 유사도를 분석하는 방법을 살펴보자 레벤슈타인 거리 : 두 개의 문자열이 어느 정도 다른지를 나타내는 것으로 "편집 거리(Edit Distance)"라고도 부른다. 철자 오류 수정, 비슷한 어구 검색 등에 사용되고 있으며 두 개의 문자열을 동일하게 만들기 위해서 몇 번의 문자열 조작이 필요한지에 주목하여 단어의 거리를 구한다. ex) "가나다라"와 "가마바라"의 유사도 분석 횟수 편집 조작 결과 0 - 가나다라 1 "나"를 "마"로 변환 가마다라 2 "다"를 "바"로 변환 가마바라 이처럼 "가나다라"를 "가마바라"로 변경하려면 2번의 조작이 필요하다. 따라서 편집 비용(조작 횟수)은 2라고 할 수 있으며, 이러한 2를 레벤슈타인 거리라고 부른다. 파..
머신러닝 프레임워크는 글을 그대로 입력할 수 없다. 따라서 텍스트 데이터를 숫자로 변환해야 한다. 또한 텍스트 데이터는 이미지 데이터와 다르게 길이가 다르다. 이를 고정된 길이의 벡터로 변환하려면 어떻게 해야 할까? 다중 퍼셉트론(Multi Layer Perceptron, MLP) : 입력층과 출력층 사이에 각각 전체 결합하는 은닉층을 넣은 뉴럴 네트워크 텍스트 데이터를 고정 길이의 벡터로 변환하는 방법 : 단어 하나하나에 ID를 부여하고 이 ID의 출현 빈도와 정렬 순서를 기반으로 벡터 제작 ex) "몇 번을 쓰러지더라도 몇 번을 무너지더라도 다시 일어나라" 문장 BoW로 나타내기 ① 형태소 분석 몇 | 번 | 을 | 쓰러지다 | 몇 | 번 | 을 | 무너지다 | 다시 | 일어나다 ② 각 단어에 ID ..
베이지안 필터 : 베이즈 정리를 이용한 텍스트 분류 방법으로 학습을 많이 시키면 시킬수록 필터의 분류 능력이 오른다는 특징이 있다. 머신러닝의 종류 중 교사학습에 해당한다. 베이즈 정리 : 조건부 확률과 관련된 이론으로 토머스 베이즈에 의해 정립된 이론이다. P(B|A) = P(A|B)P(B)/P(A) P(A) : A가 일어날 확률 P(B) : B가 일어날 확률 P(A|B) : B가 일어난 후에 A가 일어날 확률(조건부 확률, 사후 확률) P(B|A) : A가 일어난 후에 B가 일어날 확률(조건부 확률, 사전 확률) 조건부 확률 : 어떤 A라는 사건이 일어났다는 조건에서 다른 사건 B가 일어날 확률 P(B|A) = P(B∩A)/P(A) 결합 확률과 곱셈 법칙 동시에 또는 연속적으로 2가지 사건이 발생할 ..
형태소 분석 : 자연 언어의 문장을 최소 단위(형태소)로 분할하고, 품사를 판별하는 작업이다. 형태소 분석은 기계 번역, 텍스트 마이닝 등의 여러 분야에서 활용된다. 영어의 경우 띄어쓰기를 통해 형태소를 분석하기 때문에 어렵지 않다. 하지만 아시아 계열의 언어의 경우 품사 사전과 문법 사전을 기반으로 대조하면서 형태소 분석을 진행해야 한다. 문법 규칙에 의한 방법과 확률적 언어 모델을 사용하는 등 방법이 있고 최근 확률적 언어 모델을 사용한 형태소 분석이 많아져 정밀도가 높아졌다. 한국어 형태소 분석 KoNLPy의 트위터 형태소 분석기 from konlpy.tag import Okt okt = Okt() malist1 = okt.pos("아버지 가방에 들어가신다." , norm = True, stem =..
파이썬으로 의사결정나무와 서포트 벡터 머신 알고리즘을 직접 구현해 보면서 머신러닝 알고리즘을 이용하는 방법에 대해 알아보자 1. 사이킷런을 이용한 의사결정나무 구현 의사결정나무 (Decision tree) : 데이터 분포를 나누는 지도학습의 분류에 해당하는 모델이다. 용어 그대로 의사결정에 필요한 규칙을 나무 형태로 분류해 나가는 분석기법을 말한다. 연속적인 질문을 통해 예측 결과를 제공하는 예측모델로서 사람이 조건에 따라 행동하고 판단하는 것을 머신러닝에 응용한 것이다. 분석 과정이 직관적이고 이해하기 쉽다는 점 때문에 산업 전반에서 실무적으로 많이 사용된다. 지도학습인 의사결정나무에 대해 간단히 알아보았다. 이제 대표적인 머신러닝 오픈소스 라이브러리인 사이킷런(Scikit-Learn)을 이용해 의사결..
인공지능 : 인간의 지능을 기계로 구현하는 모든 형태 사물을 인식하는 컴퓨터 비전과 사람의 말을 인식하는 자연어 처리, 사물의 위치에 따라 스스로 판단해서 피해 가는 로봇공학 등, 사람이 일상생활을 영위하는 가운데 무의식 중에 자연스럽게 하는 모든 행동 하나하나가 뇌, 곧 지능으로부터 나오듯 이것을 인공으로 만드는 모든 형태를 의미한다. 머신러닝 : 인공지능을 만들기 위한 구체적인 접근 방식 컴퓨터에게 사람이 직접 명시적으로 로직을 설명하지 않아도 데이터를 통해 컴퓨터가 학습을 하고 그것을 사용해 컴퓨터가 자동으로 문제를 해결하게 하는 것 딥러닝 : 머신러닝을 실현하는 기술로서 뇌의 뉴런과 유사한 형태로 입출력 계층을 만들고 데이터를 학습하는 기술 " 인공지능 ⊃ 머신러닝 ⊃ 딥러닝 " 머신러닝의 유형 ..
MIPS 시스템 :밉스 테크놀로지에서 개발한 RISC ISA이다. 1980년대 스탠포드 대학에서 John Hennessy와 그의 동료들에 의해 개발되었으며 Silicon Graphics, Nintendo, Cisco의 제품에서 사용되고 있다. [설계 원칙 1] · 규칙적인 것이 간단성을 위해 좋음 - 일관성있는 명령어 형태 - 같은 수의 피연산자 (두 개의 source와 한 개의 destination) - 하드웨어로 구현하기 쉬움 명령어 - Addition High-level code : a = b + c ; MIPS assembly code : add a, b, c - Subtracton High-level code : a = b - c ; MIPS assembly code : sub a, b, c [..