전체 글 195

Swift 제너릭 (Generic)

Swift 제너릭 (Generic) 자료형에 의존하지 않는 알고리즘만 작성된 함수 (C++에서는 Templete 함수라고 함!) Swift 배열을 써봤다면 같은 자료형이 아니더라도 배열에 담기는 것을 알 수 있다. Swift의 Array Library가 제너릭으로 작성되었기 때문이다. 그밖에도 Stack, Queue 등 자료형에 의존하지 않는 알고리즘을 필요로 하는 데에 제너릭이 사용된다. (자료형에 의존한다면 똑같은 기능을 함에도 자료형별로 다 따로 선언해야함..-_-;;;) ex) 사실 Swift에는 '튜플'을 이용하면 되므로 별도의 swap함수를 만들지 않아도 된다. ( var1 = (p1,p2), var2 = (p2, p1) ) 제너릭 사용 예를 들기 위해 swap함수를 작성함. func swap..

Swift 기초 2019.03.27

Swift 함수 기초

Swift 함수 기초 함수는 어떤 작업을 수행하는 코드의 그룹이다. 기능별로 나누어 그것을 각각의 함수로 작성한다면 가독성 증대 및 유지관리가 쉽다. 기본적인 함수 형태 Swift에서 함수의 정의는 다음과 같다. func 함수이름(인자레이블: 자료형, 인자레이블: 자료형, ... ) -> (반환자료형) { 함수 내용 return 반환값 } 기본적인 함수를 선언해 봤다. 인자는 num이라는 레이블에 Int 값을 받아서,10증가 후 결과 Int 값을 반환하는 함수이다. 함수 중복 정의 : 매개변수가 다르다면 이름이 같은 함수를 중복정의 할 수 있다. 똑같은 이름의 greet 함수가 2개이다. String 타입 매개변수 하나만 받는 경우 String 타입 매개변수 2개를 받는 경우 이처럼 매개변수가 다르다면 ..

Swift 기초 2019.03.27

ExpandEnvironmentStrings API 로 윈도우 경로 받기

ExpandEnvironmentStrings API 로 윈도우 경로 받기 Parameter Output String %USERPROFILE% C:\Users\유저 %LOCALAPPDATA% C:\Users\유저\AppData\Local %APPDATA% C:\Users\유저\AppData\Roaming %TEMP% C:\Users\유저\AppData\Local\Temp %TMP% C:\Users\유저\AppData\Local\Temp %PUBLIC% C:\Users\Public %ALLUSERSPROFILE% C:\Users\ProgramData %ProgramData% C:\Users\ProgramData %ProgramFiles% C:\Users\Program Files %CommomProgramFi..

Trojan:Win32/Kovter

Trojan:Win32/Kovter Kovter는 감염 후 file-less 방식으로 동작하도록 설계된 멀웨어. 트로젠이라 스스로 감염 시킬 수 없으므로 click fraud를 유도함. 트로젠은 스스로 퍼질 수 없는 멀웨어를 말함. 사용자의 실수에 의존함(악성 웹사이트에 방문한다던지.. )감염 후 정보 탈취, 다른 악성코드 다운, pc 접근권을 준다던지 등의 각종 악성행위를 수행함. microsoft security blog를 참조해 정리하자. 1. 랜덤한 확장자 등록 (백신 탐지를 어렵게 하기 위해)랜덤한 확장자를 레지스트리에 등록하고, 해당 확장자 파일을 open 시 확장자\shell\open\command 에 등록된 명령이 실행된다. 내용은 클린 파일인 mshta을 이용하여 자바스크립트를 실행시키는..

[Swift 기초] switch case 문

[Swift 기초] switch case 문 switch- case문도 C언어와 크게 차이 없다. 다만 C 언어에서는 case마다 종료 시 break 명령어를 적어줬어야 했다.적어주지 않을 경우에는 다음 case에 해당하는 명령어까지 실행하는 fallthrough가 자동으로 적용된다. Swift에서는 fallthrough를 기본으로 지원하지 않으므로 Case마다 break를 적을 필요가 없다.대신 falltrhough 되기를 원한다면 case에 fallthrough 명령어를 써줘야 한다. range로도 case를 줄 수 있다. 예아!쉼표를 이용해서 하나의 케이스에 여러 값 두기 Swift에서는 쉼표를 이용하여 하나의 케이스에 여러 값을 둘 수 있다. (...를 이용한 연속적인 값이 아니라도 되는군!) 여..

Swift 기초 2019.03.16

[Swift 기초] while, repeat while 문

[Swift 기초] while, repeat while 문 C 언어와 워낙 유사해서 따로 다룰 게 딱히 없다. while 반복조건 {조건 성립 시 수행할 명령어들} repeat{수행할 명령어들} while 반복조건 여기서 while과 repeat while의 결과는 동일하다. while과 repeat while의 차이는 무엇일까?while : 반복문 시작 시, 조건이 성립하지 않는다면 애초에 실행도 안함repeat while : 반복문 시작 시 일단 실행시키고 봄. 따라서 조건에 안맞더라도 최소한 1번은 실행됨.

Swift 기초 2019.03.16

힙 손상 탐지(2-2) - 힙 오버런, 언더런 (Full PageHeap)

힙 손상 탐지(2-2) - 힙 오버런, 언더런 (Full PageHeap)힙 손상 탐지(2-1) - 힙 오버런, 언더런 (Normal PageHeap) 를 먼저 읽고 보자. gflags를 이용한 풀 페이지힙 적용 방법gflags.exe /p /enable /full/p : 페이지 힙/enable : 특정 옵션을 킴/full : 풀 옵션으로~! [ 풀 페이지 힙 - 할당 ][시나리오]1) 0x30 크기만큼의 힙을 할당 / 해제.2) Full PageHeap 적용 후 windbg에서 분석 1) 0x30 크기의 힙을 요청에 성공하고2) EAX에 유저 영역 시작 주소를 반환 받았다. 명령어 : !address 할당받은 0x30크기의 힙을 !address로 봤더니 Heap이 아닌 PageHeap으로 뜨는 것을 볼..

힙 손상 탐지(2-1) - 힙 오버런, 언더런 (Normal PageHeap)

힙 손상 탐지(2-1) - 힙 오버런, 언더런 (Normal PageHeap) 힙 버퍼 오버플로우. 참 많이 접해 본 단어이다.할당된 공간을 넘어서 인접한 다른 힙 청크를 덮어쓰는 것 뿐인데 어떤 문제를 야기할 수 있을까?예를 들어보자.덮어써진 힙에서 참조한 값으로 출발지 힙의 크기를 계산하여 소스힙을 할당한다던지 -> 또 다른 버퍼오버플로우 유발 가능.덮어써진 영역이 가상함수 테이블이라면..? -> 가상함수 호출 시 EIP가 제어됨. 띠용?!메타데이터가 변조되어 링크가 엉뚱한 곳을 가리키고, 이후 힙 할당/해제 시에 문제를 유발할 수 있음.결론적으로 취약점을 정교하게 잘 악용한다면 프로그램의 실행흐름(EIP)도 가져올 수 있다는 얘기다. 힙 버퍼 오버플로우는 스택과 다르게 원인이 되는 부분과 한참 떨어..

힙 손상 탐지(1) - 초기화 안 된 상태로 사용

힙 손상 탐지(1) - 초기화 안 된 상태로 사용 공간을 할당했으면 초기화를 하고 사용해야함.포인터 변수를 다뤄봤다면 알겠지만, 뭐가 들었을 지 알고 초기화도 안하고 사용하나?! 1) 할당만 받고 초기화 하지 않은 채 사용한다면 문제가 발생할 수 있으므로 잡아야한다.2) Free 한 이후에도 사용하는 것은 문제를 야기할 수 있고 정상적인 사용방법이 아니다.스택은 문제를 야기하는 원인 근처에서 크래시가 발생하므로 추적이 쉬움.힙 문제는 원인과 결과가 한참 차이나는 경우가 많음 (변조는 이미 되었으나 오류 발생은 실제 사용 시점에서 발생하므로)Crash 시점부터 백트레이스는 너무 많은 비용 소모, 힙 손상이 발생 시점에 트랩하자.대안: 디버깅 하에서 실행 시 채움 패턴 사용.(디버거 하에서 프로세스를 시작한..