분류 전체보기 149

[리버싱 입문](21)[Lena 9]

Lena 9 이번엔 key를 찾는 문제다. 설치 관리자를 보면 검증하는 부분이 아무것도 없다. 이것도 지난번 Lena 8과 마찬가지로 설치한 파일에서 검사가 이루어진다.설치하고 실행하자마자 구매창이 뜬다. 이름이나 회사같은 정보 입력 없이 register key를 입력한다고 뜬다.예전에 abexcrackme에서 많이 봤던 vba가 보인다. vba에서 많이 쓰였던 것은 다음과 같다. __vbaVarTst: 모든 데이터 타입 비교__vbaStrCmp: 문자열 데이터 비교 일단 vbaVarTstEq밑을 계속 따라가며 register key가 있는지 찾아본다.대표사진 삭제사진 설명을 입력하세요.뭔가 수상한 문자열이 보인다. 수상한 문자열 oeiu-564-oqei-97을 입력하면 register 된다.

리버싱 입문 2025.03.17

[리버싱 입문](20)[Lena 8]

Lena 7 이번에도 어김없이 unregistered version이다.온라인 구매 페이지는 이미 사라진 지 오래라서 register에서 이메일과 라이센스를 검사하는 부분을 뛰어넘을 수밖에 없다. email로 문자열 검색을 하면 수상한 부분이 나온다.  함수들을 보면 MrBills.004A40B6는 큰 영향은 없어보이고,MrBills.0040714C에서 직접 검사가 이루어져 반환값이 0이라면 register한다. 따라서 프로그램 실행 중간에 중단점을 걸고 EAX를 바꾸거나 조건문을 JNZ에서 NOP로 바꾸면 된다. 그러면 register했다고 뜬다. 참고로 프로그램을 이전에 푼 문제와 다르게 종료할 때마다 unregistered로 바뀌므로 NOP로 아예 패치한 것이 나아 보인다.

리버싱 입문 2025.03.14

[리버싱 입문](19)[Lena 6]

Lena가 만들어진지 오래되었다 보니 일부 문제는 실행이 잘 안되네요ㅠㅠLena 5는 나중에 풀겠습니다. Lena 6 이번에는 앱이 창을 하나 띄우고 작동하지 않는다.근데 이건 내 윈도우와 프로그램 간 호환성의 문제였다.따라서 XP로 호환성을 변경해서 열어 실행했다.또한 ollydbg에서 예외처리를 무시하게 해 중간에 멈추지 않고 실행하게 했다.이번에도 실행하자마자 unregistered version이라고 뜬다.또한 5일동안 밖에 못 쓰게 되어있다.여기저기 눌러보다 보니 reg key를 사용해 register할 수 있다는 것을 알 수 있었다. 문자열 찾기로 register key를 검사하는 곳을 찾을 수 있다.위에서 올바른 버전에 엑세스 하는지 검사하고, 올바른 버전이라면 key를 검사하고 regist..

리버싱 입문 2025.03.13

[리버싱 입문](18)[Lena 4]

Lena 4 파일을 켜서 시키는대로 설치하면 몇몇 기능이 제한된 UNREGISTERED 버전이 설치된다. 이것을 REGISTERED 버전으로 우회해야한다일단 설치 관리자를 뜯어봤다.여기서 REGISTERED인지 검사해서 다른 파일을 설치해주나 라고 추측했으나, astrum installer로 설치 파일을 만들었다는 것 빼고는 별다를 건 없다. 처음부터 그냥 UNREGISTERED버전으로 깔리는 듯 하다. 설치된 프로그램을 살펴본다.register이라는 문자열로 찾아본 결과, register를 하지 않으면 새 그룹 만들기가 3개로 제한이 걸리고, 인원 제한 4명이 걸리는 것을 알 수 있다.- 그룹 만들기 제한 해제CMP EAX, 3과 JL로 3명 이하인지 판단한다. 따라서 이 부분은 그냥 JMP로 바꿔주면..

리버싱 입문 2025.03.12

[리버싱 입문](17)[Lena 3]

Lena 3 이번에는 Nag창을 없애면 register할 수 있다고 한다.처음에 GetModuleHandleA로 핸들을 받고 0과 비교해서 맞다면 분기가 나눠진다.https://learn.microsoft.com/ko-kr/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlea에 따르면, 매개변수가 Null일 경우에는 이 함수를 부른 파일의 핸들을 반환한다고 한다. 따라서파일 헤더의 주소인 400000을 반환한다. 따라서 항상 Nag창이 뜰 수밖에 없다.EAX가 0이어야 첫번째 Nag창을 건너뛸 수 있으나, EAX엔 언제나 00400000이 저장된다. 따라서 그냥 점프하는 부분을 바꿔주겠다.첫번째 Nag창은 점프로 해결하였다.두번째 Nag창은 아..

리버싱 입문 2025.03.11

[리버싱 입문](16)[Lena 2]

Lena 2 이번 문제는 Lena 1과 동일하지만 다른 방식으로 풀어보라고 한다.이번에는 아예 파일을 패치해서 풀어보겠다. 먼저 CreateFileA로 파일이 있는지 검사하는 부분부터 손보겠다.JNE를 JMP로 바꿔주면 키파일이 있던 없던 항상 다음 단계로 진행한다. 이후 ReadFile 밑에 있는 조건들도 각각- 파일을 못 읽었을때도 무조건 다음으로 점프하기- 파일의 크기가 16미만이어도 아무런 행동 하지 않기- G가 8개 미만이어도 wrong으로 점프 안하게 만들기를 해주고 저장하면 언제나 correct가 뜬다.

리버싱 입문 2025.03.10

[리버싱 입문](15)[Lena 1]

Lena 1 이번 문제는 실행하면 파일을 구매하지 않았다는 창만 뜬다. 이 구매 여부를 우회해야 한다  조건문 위를 보면 CreateFileA가 보인다. (리버싱 입문 5 참고)매개변수를 보면 Keyfile.dat가 있다면 열고 없으면 오류로 EAX에 2가 저장되어 구매 창이 뜬다.따라서 Keyfile.dat파일을 해당 문제와 같은 디렉터리에 생성한 후 다음으로 넘어가겠다.  키파일이 있는지 검사한 후에는 ReadFile로 파일을 읽는다. 그냥 빈 키파일이면 vaild keyfile이 아니라고 한다.not valid가 뜨는 이유- https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-readfile 를 보면 실패하면 0을 반환한다...

리버싱 입문 2025.03.07

[컴퓨터 구조](27)[동적 메모리]

동적 메모리 할당: 실행 중에 메모리를 할당heap공간의 메모리 영역이 할당됨명시적 할당: 프로그래머가 직접 메모리 할당 관리예) C의 malloc & free묵시적 할당: 시스템이 메모리 할당 관리예) JAVA의 가비지 컬렉션C의 동적 메모리 함수malloc(size): size만큼의 동적 메모리 할당성공하면 메모리 블록 포인터 리턴실패하면 Null 리턴 후 errno 설정free(포인터): 포인터에 있는 공간을 할당 해제malloc 등의 동적 메모리를 쓰고 나서 반드시 해야됨. (안하면 계속 공간 차지 -> 메모리 누수)기타calloc: 블록을 할당하고 0으로 초기화함realloc: 이전에 할당된 블록의 크기 변경sbrk: 힙을 늘리거나 줄이기 위해 사용메모리 할당의 제약할당된 블록의 수, 크기 제어..

CS/컴퓨터 구조 2025.03.06

[컴퓨터 구조](26)[가상메모리 동작]

가상메모리는 프로그램이 사용하는 메모리를 페이지 단위로 나누고 불러오거나 지운다. PTE: 가상 페이지를 물리적 페이지에 대응시키는 테이블페이지 테이블: PTE의 배열    페이지 테이블에 요청한 가상주소에 대응하는 물리주소가 있으면 페이지 적중    페이지 테이블에 요청한 가상주소에 대응하는 물리주소가 없다면 페이지 오류    페이지를 하드디스크에서 불러옴 (메인 메모리에 불러올 공간이 없다면 다른 페이지 지우고 불러옴) -> 해당 PTE업데이트 -> 프로그램 재실행    페이지 오류로 인해 미스 패널티 발생 MMU: 메모리 관리 장치- 가상주소 -> 물리주소로 바꿔줌(페이지 테이블 참조)- 권한 검사- 페이지 폴트 처리 가상메모리의 동작: 마치 캐시처럼 동작 (컴퓨터 구조 19 참고)    CPU가 ..

CS/컴퓨터 구조 2025.03.05

[컴퓨터 구조](25)[가상 메모리]

가상 메모리: 가상 주소 공간을 사용마치 한 프로그램 혼자서 메모리를 사용하는 것 같게 함.메인 메모리를 효율적으로 사용: 필요한 내용만 하드디스크에서 불러옴.메모리 관리 간소화: 프로그램은 각자 일정 크기의 연속적인 메모리 공간을 사용한다 알고 있음.실제 물리적 관리는 운영체제가 하고 프로그램은 신경 안씀.주소 공간 격리: 메모리에 간접 접근, 프로그램마다 메모리 분리 -> 보안성 좋음한 프로세스는 다른 메모리에 끼어들 수 없음. 필요할 때만 서로 공유사용자 프로그램이 권한있는 커널 정보나 코드에 엑세스 불가메모리 관리를 위한 가상 메모리: 메모리를 단순한 선형 배열로 볼 수 있다.메모리 할당 단순화: 단순 선형 배열의 메모리 구조, 독립적이고 정해진 크기의 공간이라 단순함.프로세스 간 코드 및 데이터..

CS/컴퓨터 구조 2025.03.04
728x90
반응형