분류 전체보기
-
[2021/08/30][짤막한 이야기 - 동형 검사]짤막한 이야기 2021. 8. 30. 10:42
[2021/08/30][짤막한 이야기 - 동형 검사] “동형 검사(Isomorphism Test)”란 두 대상의 구조 동일 여부를 검사하는 알고리즘이다. 앞서 동형 검사에는 "순회"가 필요하다고 하였다. 즉 양측 대상의 노드와 노드 속 데이터 값이 동일한지 확인 후 각각 다음 노드로 이동하는 과정이 필요하다. 예를 들어 이진 트리에서의 동형 검사는 다음과 같이 수행되며, 루트(Root) 노드를 시작으로 재귀적으로 들어간다. 1) 두 루트 노드가 둘 다 데이터가 없으면 동형임이 자명하다. 2) 두 루트 노드 중 하나만 데이터가 없으면 이형(Heteromorphism, 형태가 다름)임이 자명하다. 3) 두 루트 노드의 데이터 값이 다르면 이형이다. 4) 두 루트의 좌측 노드를 루트 노드로 가정하여 해당 알고..
-
[2021/08/29][짤막한 이야기 - 동형]짤막한 이야기 2021. 8. 29. 22:47
[2021/08/29][짤막한 이야기 - 동형] “동형(Isomorphic)”이란 서로 구조가 동일한 두 대상을 의미한다. 즉 간단히 말하면 모양이 동일하다는 의미이다. 자료구조에서는 두 자료구조가 동형인지 판별하는 것도 중요한데, 예를 들어 임의의 두 그래프(Graph)가 동형인지 판별하는 것도 매우 중요하다. 프로그래밍을 접해본 바 있다면, "제어흐름 그래프(Control-Flow Graph)"를 알고 있을 것이다. 임의의 두 프로그램의 제어흐름 그래프가 동일한지 판단하는 것 또한 보안측면에서 중요하기 때문에 많이 연구되고 있다. 그러나 임의의 두 그래프의 동형 여부 판단 문제는 다항시간 내에 풀릴 수 있는지 증명된 것이 아니기 때문에, 무작정 동형 검사를 수행하는 것에는 주의하여야 한다. 그림에서의..
-
[2021/08/27][짤막한 공지 - “파이썬으로 POD 완전 자동화하기”]짤막한 공지 2021. 8. 27. 18:51
[2021/08/27][짤막한 공지 - “파이썬으로 POD 완전 자동화하기”] 안녕하세요, 루니프입니다. 루니프의 두 번째(권 수로는 5권째) 전자책인 “파이썬으로 POD 완전 자동화하기”가 작성 완료되었습니다. 판매 플랫폼은 정해지지 않았으며, 정해지는대로 “짤막한 공지” 남기도록 하겠습니다. 프로그래밍과 부업, 자동화 중 어느 한쪽이라도 관심이 있으시다면 흥미있을 내용으로 구성되어 있습니다. 해당 전자책의 무료 배포 버전은 프로필의 “링크트리”에 공유되어 있으니 많은 이용 부탁드립니다. (무료 배포 버전만 해도 무려 40페이지!) 그리고 해당 전자책과 주제에 관한 내용으로 오픈채팅방을 개설할 예정입니다. (※ “핀툴 프로그래밍 기본서”의 표지가 업데이트 되었습니다. 구독자들에게 매번 표로 만든 딱딱한..
-
[2021/08/27][짤막한 이야기 - 좌측자식 우측형제]짤막한 이야기 2021. 8. 27. 09:41
[2021/08/27][짤막한 이야기 - 좌측자식 우측형제] 시작부터 제목이 조금 우스꽝스럽다. “좌측자식 우측형제(Left-Child Right-Sibling)”란 K진 트리를 이진 트리로 변환하는 알고리즘이다. LCRS 이진 트리라고도 한다. K진 트리에서의 분석 방법과 이진 트리에서의 분석 방법이 약간 다르기 때문에 이진 트리로 선처리 후 분석을 진행하는 것이 더 나을 수 있다. 알고리즘 이름에서 알 수 있듯이, 자식 노드는 모두 부모 노드의 좌측에만 존재하기 때문에 얼핏 보면 “편향 트리(Skewed Tree)”와 유사하게 보일 수 있다. 이진 트리로 변환된 K진 트리는 이진 트리의 특성을 가지고 있긴 하지만, 약간의 편향성 때문에 이진 트리와는 조금 다른 특징도 가진다. 예를 들어, 부모 노드(..
-
[2021/08/26][짤막한 이야기 - K진 트리]짤막한 이야기 2021. 8. 26. 20:29
[2021/08/26][짤막한 이야기 - K진 트리] “K진 트리(K-ary Tree)”란 일반적인 트리를 생각하면 된다. 정확한 정의는 “자식 노드가 최대 K개인 트리”를 의미한다. “이진 트리(Binary Tree)”는 K진 트리에서 K=2인 경우의 특수한 형태인 것이다. 이진 트리에서 자식 노드가 0개, 1개인 경우도 있는 것처럼, K진 트리에서도 반드시 자식 노드의 수가 K개는 아니라는 점을 유의(최대 K개이다.)하여야 한다. 2개이던 자식 노드를 K개로 늘리는 것 뿐이기 때문에 트리 자료구조의 구현 자체는 크게 달라지지 않는다. 그러나 K진 트리에서의 순회나 분석 방법은 이진 트리에서의 순회나 분석 방법과 전혀 다르기 때문에 시간 복잡도도 크게 늘어나게 된다. 여담이지만 K진 트리에서 K=1인 ..
-
[2021/08/25][짤막한 이야기 - 핀툴(함수반환값 변조)]짤막한 이야기 2021. 8. 25. 10:27
[2021/08/25][짤막한 이야기 - 핀툴(함수반환값 변조)] 이전 포스트에서의 GetDriveTypeA의 반환값에 대하여 더 이야기해보자. GetDriveTypeA API는 하드디스크에 해당하는 레터(C:\)를 인자값으로 입력받을 경우 “3”을 반환값으로 출력하고, CD-ROM에 해당하는 레터(D:\, 혹은 다른 영문자, 컴퓨터 기종에 따라 CD-ROM이 없을 수도 있음)를 인자값으로 입력받을 경우 “5”를 반환값으로 출력한다. 앞선 포스트에서의 소스코드에 딱 한줄만 더 추가하면 GetDriveTypeA API의 반환값을 “3”에서 “5”로 변조할 수 있다. 매우 간단하지 않은가? 해당 포스트의 소스코드를 이용하여 “핀툴 적용”을 수행한다면 AbexCrackMe#1의 크랙이 수행된다. Windows..
-
[2021/08/24][짤막한 이야기 - 핀툴(함수반환값)]짤막한 이야기 2021. 8. 24. 11:37
[2021/08/24][짤막한 이야기 - 핀툴(함수반환값)] 핀툴은 프로그램을 분석하는데에도 유용하지만 이의 기능성을 변조하고 크랙하는데에도 탁월하다. 대표적으로 특정 시점에서의 "레지스터/메모리/함수인자값/함수반환값" 등을 매우 쉽게 변조할 수 있다. 그림의 어셈블리어는 매우 유명한 AbexCrackMe의 첫번째 타입의 일부이며, 이를 크랙할 수 있는 첫번째 방법은 타 블로그에서도 쉽게 확인할 수 있다. 알고있는가? 아벡스크랙미#1은 최소 7가지 이상의 방법으로 크랙할 수 있다는 것을. 그 중 하나는 GetDriveTypeA API의 함수반환값(Function Return Value)을 변조하는 것이다. 반환값을 출력하여 확인하는 핀툴 코드는 그림에 함께 작성되어 있다. EAX 레지스터에 "3"이 저장..
-
[2021/08/22][짤막한 이야기 - 이진 트리]짤막한 이야기 2021. 8. 23. 12:08
[2021/08/22][짤막한 이야기 - 이진 트리] “이진 트리(Binary Tree)”는 자료구조의 한 형태로 트리의 특수한 형태이다. 사각형, 직사각형, 정사각형이 포함관계인 것처럼, 이진 트리도 트리와 포함관계이다. 정확히는 그래프, 트리, 이진 트리로 생각할 수 있다. 트리는 그래프 중에서도 순환이 없고 내향 간선(Inner-Direction Edge)이 1개인 특수한 형태의 그래프이다. 또한 이진 트리는 트리 중에서도 자식 노드가 최대 2개만 존재하는 특수한 형태의 트리이다. 이진 트리는 자료구조 중에서도 특히 중요하게 여겨지는데, 앞선 포스트의 “이진 탐색(Binary Search)”처럼 해당 자료구조를 사용하면 분석에 소요되는 시간이 매우 짧기 때문이다. 정확히는 순회에 소요되는 시간이 일..