분류 전체보기
-
[2021/09/09][짤막한 이야기 - 예외]짤막한 이야기 2021. 9. 9. 06:32
[2021/09/09][짤막한 이야기 - 예외] "예외(Exception)"란 프로그램 실행 시 발생할 수 있는 예상하지 못한 상황을 의미한다. 프로그래밍 언어에서는 예외가 발생할 때에 실행될 구문을 미리 정의해두고, 예외가 발생하면 해당 구문을 실행할 수 있다. 예외 처리를 분석 도구를 탐지하기 위한 기능으로 활용할 수 있다. 이는 분석 도구에서의 프로그램 예외 처리 방법과 일반 환경에서의 처리 방법이 다르기 때문에 활용 가능한 탐지 기법이다. 분석 도구 내에서 예외가 발생할 경우 예외 처리용 구문을 실행하지 않고 예외 처리 방법을 분석 도구 자체에 맡기고 예외 상황을 건너뛰어버린다. 간단히 말하면, 동일한 프로그램이라도 분석 도구가 적용된 경우에는 구문을 실행하지 않고, 반대의 경우에는 구문이 실행되..
-
[2021/09/07][짤막한 이야기 - 분석방지 기술]짤막한 이야기 2021. 9. 7. 10:06
[2021/09/07][짤막한 이야기 - 분석방지 기술] "분석방지 기술(Anti-Analysis)"이란 소프트웨어 분석을 방해하는 기술이다. 이전에 언급한 "난독화(Obfuscation)"도 분석을 방해하지만, 조금은 개념이 다르다. 난독화는 코드를 읽기 어렵게하는 이른바 수동적인 보호 기술인데 반해, 분석방지 기술은 분석 도구를 "탐지(Detect)"하고 "대응(Response)"하는 능동적인 보호 기술이다. 탐지는 해당 분석 도구의 특성을 이용하여 수행하고, 탐지된 경우의 대응은 보통 자기자신(프로그램)을 강제로 종료하는 식으로 수행된다. 핀툴 또한 분석 도구이기 때문에 분석방지 기술에 의하여 방해받을 수 있으며, 이를 "핀툴방지 기술(Anti-PinTool)"이라고 한다. 물론 핀툴방지 기술 그 ..
-
[2021/09/06][짤막한 이야기 - 최대구간합(개선)]짤막한 이야기 2021. 9. 6. 15:03
[2021/09/06][짤막한 이야기 - 최대구간합(개선)] 앞선 포스트에서 최대구간합에 대한 이야기를 하였다. 구간의 길이로 취할 수 있는 모든 경우에서 구간합 배열을 구하고, 그 중에서의 "Max"값을 출력하는 방식이였다. 구간합 배열을 모든 길이에 대하여 비교하기 때문에 O(N^2)의 시간 복잡도를 가졌다. 그러나 지금 제시하는 알고리즘은 동일한 결과를 출력하면서 시간 복잡도가 O(N)으로 개선된다. 이를 "카데인(Kadane)" 알고리즘이라고 한다. 비교 횟수를 효과적으로 줄일 수 있는 아이디어는 "각각의 최대구간합은 이전 최대구간합이 반영되어 있음"을 기반으로 한다. 즉 이전 최대구간합을 알 수 있다면 현재 인덱스에서의 최대구간합은 현재 인덱스의 값을 더함으로써 구할 수 있는 것이다. 정확한 원..
-
[2021/09/03][짤막한 이야기 - 최대구간합]짤막한 이야기 2021. 9. 3. 09:24
[2021/09/03][짤막한 이야기 - 최대구간합] “최대 연속 부분합(Maximum Contiguous Subsequence Sum, MCSS)” 혹은 통칭 최대구간합은 자료구조 내의 구간합을 구하는 문제이다. 앞선 구간합(Prefix Sum)과는 조금 다르다. 최대구간합은 구간합처럼 “특정 범위의 합을 구하는 문제”가 아니라 “합이 최대가 되는 임의 범위의 합을 구하는 문제”라는 점이다. 따라서, 구간합과는 달리 최대구간합에서는 A배열 내 원소 변경이 없으며, 음수가 포함될 수 있다. 만약 양수만 포함된 배열이라면 전체 구간을 다 포함하는 것이 최대구간합이 될 것이다. 그림의 A배열에서는 A[2] ~ A[9]까지의 합이 14로 최대가 된다. 앞서 포스팅한 구간합 배열을 이용하여 최대구간합을 구할 수..
-
[2021/09/02][짤막한 공지 - “파이썬으로 POD 완전 자동화하기” 판매]짤막한 공지 2021. 9. 2. 16:36
[2021/09/02][짤막한 공지 - “파이썬으로 POD 완전 자동화하기” 판매] 안녕하세요, 루니프입니다. 전자책 판매 심사가 완료되었습니다. 금일부로 “파이썬으로 POD 완전 자동화하기”가 크몽/클래스101/해피칼리지/탈잉에서 판매됩니다. “구글 이메일” 계정을 가지고 계신 분만 구매하실 수 있으니 참고바랍니다. 각 판매처에 관한 상세한 내용은 프로필 링크 내 “Fully Automating POD with Python (eBook)”를 참고바랍니다. (※ “핀툴 프로그래밍 기본서”도 클래스101에 추가되었습니다. 이는 프로필 링크 내 “Basic Book for PinTool Programming (eBook)”을 참고바랍니다.) ※ 해당 전자책의 금액은 20,000원으로 결정되었습니다. #공지 ..
-
[2021/09/02][짤막한 이야기 - 인덱스 트리]짤막한 이야기 2021. 9. 2. 10:08
[2021/09/02][짤막한 이야기 - 인덱스 트리] “인덱스 트리(IndexTree)”는 이진 트리로 구성되는 연산 용이성을 목적으로 하는 자료구조이다. 앞선 포스트에서 구간합을 이야기하면서 구간합을 구하고 싶은 배열 A 내의 숫자가 변경될 수 있는 경우, 합배열을 모두 업데이트해야 할 수 있어 시간 복잡도가 크게 늘어날 수 있다고 하였다. 그러나 인덱스 트리로 부분합을 저장한다면 숫자가 변경되어도 부분합이 변경되어야 하는 횟수가 크게 줄어든다. 즉, 이진 트리(= 인덱스 트리) 내 부분합 업데이트는 O(logN)에 처리되기 때문에 합배열 업데이트가 O(N)으로 처리될 때보다 크게 시간복잡도가 줄어든다. 이 상태에서 A[3] ~ A[8]의 합을 물어보게 된다면 A[3] + A’’[1] + A[8]을 ..
-
[2021/09/01][짤막한 이야기 - 언패킹(필요성)]짤막한 이야기 2021. 9. 1. 11:23
[2021/09/01][짤막한 이야기 - 언패킹(필요성)] 앞서 “패킹된 코드”는 “언패킹 코드”에 의하여 “실행 직전”에 자동으로 언패킹된 후 실행된다고 하였다. 그럼에도 불구하고 미리 언패킹을 해서 파일 형태로 재구성하는 과정이 왜 필요할까? 분석을 용이하게 하는 과정의 목적은 단 하나이다. 악성코드에 해당 보호 기술이 적용될 경우를 우려하는 것이다. 즉, “악성코드”에 “코드 패킹”이 적용될 경우 이의 분석이 어려워지는 것이다. 이 경우 2가지 문제점이 발생한다. 첫번째는 시그니처 훼손에 의한 미탐이다. 악성코드는 특정 바이트열을 포함하거나 특정 해쉬값을 생성한다. 이를 시그니처라고 하는데, 패킹이 된 악성코드는 시그니처가 달라지므로 안티바이러스에서 탐지를 하지 못한다. 두번째는 기능성 은닉에 의한..
-
[2021/08/31][짤막한 이야기 - 코드 패킹(예시)]짤막한 이야기 2021. 8. 31. 19:22
[2021/08/31][짤막한 이야기 - 코드 패킹(예시)] “코드 패킹(Code Packing)”이란 소프트웨어 보호 기술 중 하나이며, 코드를 알아볼 수 없도록 변형하는 것이라고 하였다. 그림의 왼쪽이 아벡스크랙미의 “원본 코드”이고 오른쪽이 “패킹된 코드”이다. 패킹은 여러 방식으로 수행될 수 있지만, 예시에서는 가장 단순하게 모든 바이트에 1을 더한다. 0x401000 ~ 0x401050까지의 어셈블리어가 모두 이상하게 해석되는 것을 볼 수 있다. 그러나 CPU에서는 패킹된 코드를 읽어들이면 잘못된 명령어로 강제종료될 가능성이 높다. 따라서 패킹된 코드는 반드시 실행 직전에는 원본 코드로 복원되어야 한다. 실행 직전 자동으로 원본 코드로 복원하는 과정이 “언패킹”이며, 0x401069 ~ 0x40..