6월, 2019의 게시물 표시

리버싱 abex crackme 2

이미지
사용 프로그램: x32dbg Mar 10 2019 ​ abex crackme 2번을 리버싱 해봅시다. ​ 구글에서 abex crackme 2를 다운로드합니다. 실행하면, 다음의 프로그램이 실행됩니다. 'Check'를 누르면, 메시지 박스가 나옵니다. 아무 글자나 4 자리 넣고 'Check'를 누르면 다음 메시지 박스가 나옵니다. 'about'은 만들어진 날짜가 나옵니다. 'Quit'을 누르면 종료됩니다. ​ ​ abex crackme 2번 실행 파일을 x32dbg로 리버싱 해봅시다. EP(EntryPoint)를 찾습니다. ThunRTMain을 호출하는 것으로 보아 Visual Basic으로 제작된 것을 알 수 있습니다. JMP를 통해서 호출하므로 간접 호출 기법입니다. ​ VB 코드는 해석하기 어려우므로, 일단 메시지 박스를 활용해서 찾아봅시다. 모든 모듈(문자열)을 찾으면, 메시지 박스에서 봤던 문자열이 보입니다. 더블 클릭으로 그 주소로 가봅시다. 이름 검증 후, 시리얼을 체크하므로, 밑으로 좀 더 내려봅시다. 시리얼 체크 부분이 나올 겁니다. 분기문 밑에 'Congratulations!'가 보입니다. 그리고, 메시지 박스를 호출하는 부분이 보입니다. 여기서 풀이 방법이 두 가지가 있습니다. 우선 첫 번째 방법입니다. '00403332' 주소에 있는 'JE crackme2.403408' 분기문이 거짓이라면, 아래로 진행되어 'Congratulations!'를 지나 'Yep, this key is right!'가 실행될 겁니다. ​ 'JE'위의 'TEST AX, AX'는 AX가 0인가를 확인하는 구문입니다.(CMP AX, 0과 동일) 'JE crackm22.403408'은 AX가 0이면[

어셈블리 언어(assembly language)

어셈블리(assembly) 언어에 대해서 알아봅시다. ​ PUSH - 인자를 스택에 저장. ​ POP - 스택에서 값을 꺼내 인자에 저장. ​ CMP - 인자 두 개를 비교. ​ TEST - 인자 두 개를 AND 연산. - 'TEST EAX, EAX'는 EAX가 0인가를 확인. ​ JE - 비교 값이 같으면 주소로 점프. - ZF가 1이면 주소로 점프. ​ JNE - 비교 값이 같지 않으면 주소로 점프. - ZF가 0이면 주소로 점프. ​ LEA - 인자의 주소를 다른 인자에 저장. ​ MOV - 인자의 값을 다른 인자에 저장. ​ MOVSX - 부호가 있고 크기가 다른 인자 값을 옮길 때 사용. - 32 비트가 있어도 16 비트나 8 비트 만 복사된다. ​ MOVSD - ESI의 주솟값을 EDI 주소에 넣는다. ​ [주소] - 주소에 있는 값. ​ 끝. 카테고리: Reversing

Python music21.note.Note().lyric

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.2 x64, Musescore 3 ​ 파이썬 music21.note.Note().lyric에 대해서 알아보겠습니다. ​ music21.note.Note().lyric은 음표에 가사를 추가해줍니다. ​ ​ 한 줄 가사를 넣어보겠습니다. 두 줄 가사를 넣어보겠습니다. '\n'을 사용합니다. 끝. 카테고리: Python, music21

Python music21.duration.Duration().dots

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.2 x64 ​ 파이썬 music21.duration.Duration().dots에 대해서 알아보겠습니다. ​ music21.duration.Duration().dots는 해당 음표의 점의 개수를 알려줍니다. ​ 점이 1 개 일 때. 점이 2 개 일 때. 점이 0 개 일 때. 끝. 카테고리: Python, music21

Python music21.duration.Duration().type

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.1 x64 ​ 파이썬 music21.duration.Duration().type에 대해서 알아보겠습니다. ​ music21.duration.Duration().type은 음 지속시간인 박을 알려줍니다. 이분음표 하지만, 점이 들어간 지속시간은 정확하지 않습니다. 점이분음표 끝. 카테고리: Python, music21

Stack(스택)

이미지
Stack(스택)에 대해서 알아보겠습니다. ​ Stack은 프로그램이 작동되면서 값이 저장되고 불러와지는 메모리 공간입니다. ​ 작동은 다음과 같이 됩니다. ​ 1. 기존의 EIP 다음 순서 값이 보존됩니다. 2. 기존의 EBP 값이 보존됩니다. 3. EBP 값을 현재 Stack의 ESP 값으로 고정합니다. 4. 변수를 저장할 공간을 할당합니다. 5. 변수를 역순으로 저장합니다.(First In Last Out) 6. 변수를 역순으로 저장합니다. 7. 다 사용한 Stack은 메모리 정리를 합니다. 8. 보존된 EBP를 복구합니다. 9. RET을 실행합니다.(보존된 EIP 복구) 끝. 카테고리: Reversing

Python music21.duration.Duration().quarterLength

이미지
사용 버전: Python 3.6.8 사용 프로그램: Atom 1.38.1 x64 ​ 파이썬 music21.duration.Duration().quarterLength에 대해서 알아보겠습니다. ​ music21.duration.Duration().quarterLength는 음의 길이인 박을 나타냅니다. ​ '3.5'일 때. 'half'일 때. 끝. 카테고리: Python, music21