분류 전체보기 139

[리버싱 입문](8)[abex crackme 5]

abex crackme 5 이번에는 맞는 시리얼을 입력하고 버튼을 누르면 맞았다는 문구가 뜨면서 correct가 뜨는 문제다. 먼저 맞았다/틀렸다고 하는 문구가 바로 보이기에 이 부근을 중점으로 살펴보겠다.eax와 0을 비교해 만약 같다면 correct로 점프한다는 것을 알 수 있다.아마 위에 있는 lstcmpi함수에서 비교하고 같다면 0을 반환하는 것 같다. lstcmpi 알아보기lstcmpi함수의 안을 들여다 보니 ESI에 Enter your serial이란 문자열을, EDI에 L2C-57816784-ABEX라는 문자열을 집어넣고, 기타 등등의 매개변수를 집어넣는다. 이후 CompareStringA를 호출한다. https://learn.microsoft.com/ko-kr/windows/win32/ap..

리버싱 입문 2025.02.18

[컴퓨터 구조](21)[ELF와 링커심볼]

ELF: 실행가능하고 링크 가능한 포맷 (목적파일의 표준 바이너리 포맷)예) a.out(UNIX), PE(Windows) (리버싱 입문 정리 2 참고), Mach-O(Mac OS)종류재배치 가능 목적 파일(.o): 다른 목적파일과 결합될 수 있는 코드, 데이터 포함하는 파일, 하나의 목적파일은 하나의 소스코드에서 생성실행 가능 목적 파일(.out): 실행될 수 있는 형태의 파일 (링킹이 완료된 상태)공유 목적 파일(.so): 다른 프로그램과 공유될 수 있는 라이브러리 (windows의 DLL)구성ELF 헤더: 워드 크기, 바이트 순서, 파일 타입, 머신 타입 등 정의세그먼트 헤더 테이블: 페이지 크기, 가상주소메모리 세그먼트, 세그먼트 크기 정의.text: 컴파일된 프로그램의 기계어 코드.rodata: ..

CS/컴퓨터 구조 2025.02.17

[컴퓨터 구조](20)[링킹]

링킹: 여러 오브젝트 파일과 라이브러리를 결합하는 과정(컴퓨터 구조 7) 에 나온 링커가 수행링킹의 종류정적 링킹: 모든 코드, 라이브러리들을 하나의 실행 파일로 결합빠름, 그러나 실행 파일 크기가 커짐, 라이브러리 추가 어렵동적 링킹: 참조 정보만 포함하고 실행 시 필요한 라이브러리를 로드실행 파일 크기 작음, 쉽게 업데이트 가능, 그러나 로드해야되기 때문에 느림링킹의 필요성모듈화: 한 파일에 몰아넣는 것이 아니라 관리하기 쉽게 별도의 작은 모듈로 분할 가능, 라이브러리 사용 가능효율성시간적 효율성: 별도 컴파일 (하나의 소스 파일을 변경하더라도 다른 소스파일까지 다시 컴파일 할 필요 없음)공간적 효율성: 실제로 상요하는 기능에 대한 코드만 넣어 메모리 절약링킹 과정: 심볼 해석 -> 재배치예)// h..

CS/컴퓨터 구조 2025.02.14

[컴퓨터 구조](19)[캐시 구조 & 원리]

캐시의 구조: set(line(block, valid bit, tag))캐시는 여러개의 set으로 구성되어 있다set은 여러개의 line으로 구성되어 있다line 안에는 valid bit, tag, cache block이 들어있다valid bit: 이 라인의 캐시 블록이 유효한지 나타냄tag: 데이터의 종류 태그cache block: 데이터(byte)캐시의 크기 = set개수*한 set당 line수*cache block캐시 읽기: 주소 기준으로 찾는다주소: tag bit, set bit, offset bitset위치 찾기 (set bit)각 line에서 일치하는 태그 있는지 찾기 (tag bit)오프셋부터 시작하는 데이터 위치 찾기 (offset bit)자료형 만큼 읽기예) 모든 캐시는 비어있고 4개의 ..

CS/컴퓨터 구조 2025.02.13

[컴퓨터 구조](18)[공간 지역성과 캐시]

지역성: 프로그램은 최근에 사용한 주소와 같거나 비슷한 데이터나 명령어를 사용하려는 경향시간 지역성: 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높다공간 지역성: 어떤 메모리 위치에서 참조된다면 그 주변 메모리를 참조할 가능성이 높다예)2x2 int 배열 arr가 있을 때,int sum1(*arr){ //행 우선 int i, j; int sum = 0; for (i=0; i 이때 sum1은 순차적으로 메모리를 참조 (arr+4*i+j에서 j가 더 자주 바뀜)sum2는 왔다갔다 메모리 참조 (arr+4i+j에서 i가 더 자주 바뀜)따라서 지역성이 좋은 것은 sum1이고, 실제로 성능도 sum1이 더 좋다.(컴퓨터 구조 7 참고)캐시 메모리: 주기억장치보다 빠르게 엑세스 할 수 있는 저장 장..

CS/컴퓨터 구조 2025.02.12

[리버싱 입문](7)[abex crackme 4]

abex crackme 4 이번에는 시리얼을 입력하고 만약 시리얼이 맞다면 register버튼이 활성화되고 클릭하면 correct가 뜬다. 시리얼이 틀리다면 아예 버튼이 활성화되지 않고 멈춰버려서 버튼을 누르고 check 부분을 찾는 방법을 쓸 수 없다.따라서 멈추는 부분을 보겠다.EAX, ECX를 인수로 받는 vbaStrCmp에서 계속 프로그램이 멈추는 것을 알았다. vbaStrCmp 알아보기https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/strcomp-function여길 보면 알 수 있듯, 이 함수는 문자열 2개를 입력받아 비교하고, 문자열이 같다면 0을 반환한다.따라서 문자열이 같다면 JZ로 인해 ..

리버싱 입문 2025.02.11

[리버싱 입문](6)[함수 호출 규약]

함수 호출 규약: 함수를 호출할 떄 인자가 전달되는 방식cdecl: C의 기본 호출 규약인자가 오른쪽에서 왼쪽으로 스택에 전달함수가 종료될 때 호출자가 피호출자의 스택 프레임 정리가변인자 사용 가능stdcall: 주로 Windows API에서 사용인자가 오른쪽에서 왼쪽으로 스택에 전달함수가 종료될 때 피호출자가 스스로 스택 프레임 정리가변인자 사용 불가fastcall인자가 오른쪽에서 왼쪽으로 레지스터를 사용해 전달, 2개의 인자까지는 EDX, ECX레지스터로 그 이후로는 스택으로 저장.피호출자가 스택 정리가변인자 사용 불가능레지스터를 써서 속도가 빠름예) void Func(int a, int b)라는 함수가 있을때cdeclpush bpush a stdcallpush apush bcall FuncFunc:..

리버싱 입문 2025.02.10

[리버싱 입문](5)[abex crackme 3]

abex crackme 3 이번에는 키파일이 있는지 알아보고 만약 정확한 키파일이 있다면 correct를 띄우는 파일이다.만약 키파일이 없거나 키파일이 다르다면 wrong을 띄운다.messageboxA로 창을 띄우고 질문하는 것까지는 1번 문제와 똑같다.그러나 createfileA와 MOV DWORD PTR DS:\[4020CA],EAX를 지나고 eax값이 FFFFFFFF로 변경되어 file을 찾을 수 없다고 뜬다. createfileA를 알아본다.https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-createfilea매개변수 Filename, DesiredAccess 등이 있다.FileName이름의 파일을 DesiredAcces..

리버싱 입문 2025.02.07

[리버싱 입문](4)[abex crackme 2]

세상에나 push ebp로도 함수 시작을 눈치챌 수 있다니abex crackme 2이번 문제는 입력 창에 이름과 비번을 입력하고 check 버튼을 눌렀을 때 correct가 뜨게 하는 것이다.이름을 12345, 시리얼은 678910을 넣어봤을 때 wrong이 뜬다. 알맞은 시리얼을 찾고 아예 파일을 패치해 언제나 correct를 내뱉게 만들겠다. 먼저 ctrl F로 push ebp를 검색해 함수의 시작을 찾는다 (나중에 반환할 때 원래 ebp 값을 복원하기 위해 함수가 시작할 때 push ebp를 한다.)총 3개가 찾아진다. 각각 breakpoint를 걸어 실행시켜보면00402C50: quit00402CC0: about00402ED0: check이다. check 함수 부분을 살펴본다.correct 문자열..

리버싱 입문 2025.02.06

[암호학 둘러보기](8)[RSA]

RSA: 비대칭키 암호화 방식디피-헬만과는 다르게 서명까지 지원해 안전함. (상대방의 공개키를 이용해 암호화하기 때문)과정메세지 보내는 A, 메세지 받는 B이고 공개된 파라미터 e가 있다.B의 공개키(N): N = p*q (p, q는 매우 큰 소수)B의 개인키([d]): [d]*e = 1 (mod[p-1]*[q-1]) (모듈러 역원 구하기. 만족하는 정수 d는 1개밖에 없으니 안심)A가 보낼 메세지 암호화(C): C = M^e (mod N)B는 자신의 개인키로 복호화(M): M = C^[d] (mod N)예)밥이 앨리스에게 8이란 메세지를 보낼 때, e = 7이라는 파라미터로 합의했다.앨리스는 비밀스럽게 p = 3, q = 5라 정했다. (원래 p, q는 큰 소수이지만 예시라 간단한 수 사용함.)공개키:..

728x90
반응형