Lena's Reversing # 1

리버싱공부 2022. 1. 16. 16:48

모든 Nags를 제거하고, 올바른 등록코드를 찾으라고 한다. 그럼 총 해야할일은 2가지 1) Nag Screen을 제거 2) 올바른 입력 값 찾기 1) Nag Screen Nag Screen을 제거하기 위해서는 메시지 박스가 안뜨도록 해야할것이다. 메세지박스를 띄우는 함수는 &rtc_MsgBox인거 같다. 2) 올바른 입력 값 찾기 코드를 입력하면 올바른 시리얼 값과 비교하여 정답을 정해주는 로직 같다. 그럼 strcmp함수쪽을 살펴보면 될 것이다. 저 부분이 비교하는 부분인거 같다. 옆에 보면 "I'mlena151"이라는 값이 있는데 저 값이 수상하다. bp를 건 부분까지 실행하고 AAAABBBB를 입력해 보았다. 입력한 값과 비교하는 부분이 맞았다. 그러면 올바른 입력 키 값은 I'mlena151일 ..

Article Thumbnail
Abex crackme # 5

리버싱공부 2022. 1. 16. 16:08

시리얼을 입력하고 Check버튼을 입력하면 입력값을 비교해서 맞는지 아닌지를 확인하는거 같다. 조건문위에 strcmp가 있다. 아마 이 부분에서 입력한 시리얼 값과 정답 시리얼 값을 확인하는거 같다. strcmp에 bp를 걸고 실행시키면 eax="L2C~~"의 값이 나오는데, 그 아래 cmp eax, 0이므로 저 LC2~값이 시리얼 값임을 알 수 있다.

Article Thumbnail
Abex crackme # 4

리버싱공부 2022. 1. 16. 15:23

Visual Basic으로 짜여진 파일이다. ANSI의 값을 String으로 바꾸는 부분인거 같았다. 그리고 이부분이 가장 이상했다. 갑자기 현재 날짜, 시간, 연도를 얻어온다. 그리고 MUL, ADD, 등을 하고 copy를 하는데 이때 2173650이라는 값이 계속 등장하였고, 해당 값이 이상하다고 느껴져서 프로그램에 값을 입력해보았다.

Article Thumbnail
Abex crackme # 3

리버싱공부 2022. 1. 16. 14:58

1. CreateFileA를 호출한다. 아마 저 파일이 키 파일인거 같다. 2. GetFileSize를 호출하여 파일의 사이즈를 가져오고 3. eax와 12를 비교해서 같으면 키파일이 맞다는 상자가 뜨고 아니면 분기로 점프한다. 분석 HANDLE CreateFileA( [in] LPCSTR lpFileName,# 파일 이름 [in] DWORD dwDesiredAccess,# 파일 또는 디바이스에 대한 요청된 액세스 [in] DWORD dwShareMode,# 읽기, 쓰기, 둘 다, 삭제, 모두 또는 없음을 수행할 수 있는 파일 또는 장치의 요청된 공유 모드 [in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes, [in] DWORD dwCreationDis..

Article Thumbnail
Abex crackme # 2

리버싱공부 2022. 1. 15. 18:59

실행시켜보면 Name과 Serial을 입력받는 부분이 나오고, 맞지 않는 값을 입력하면 "Wrong serial!"이라는 값을 뱉는다. 우선 Name과 Serial의 값을 비교해서 하는걸 보니 값을 비교하는 함수를 찾아야하지만 우선 저 문자열("Nope, this serial is wrong!")을 이용해서 값을 비교하는 함수를 찾아보자. 아마 분기문을 통해 찾았는지 못찾았는지 넘어가는거 같다. 위로 쭉 올ㄹ리면 &__vbaVarTstEq라는 함수가 있고, 이 함수의 리턴값을 통해 분기가 정해지는거 같다. 즉 edx, eax를 비교하고 그 값을 리턴하여 분기가 정해짐. 그래서 edx와 eax의 값을 보면 입력한 값과 비교하는값을 볼 수 있다. 즉 Name에 AAAA를 입력하고 Serial에 BBBB를 입..

Article Thumbnail
Abex crackme # 1

리버싱공부 2022. 1. 15. 18:16

실행하면 다음과 같은 문구가 뜬다. "내가 HD를 CD-Rom으로 생각하게 만들어라" 바로 까보았다. 0x401018 주소를 보면 GetDriveTypeA라는 함수를 호출한다. 이 GetDriveTypeA함수의 원형은 다음과 같다 UINT GetDriveTypeA( [in, optional] LPCSTR lpRootPathName ); 즉 반환 값이 5가 되도록 만들어야 HD가 아닌 CD-Rom으로 인식을 하는거 같다. Step over으로 call 함수를 건너뛰어 넘어보았을때 진행되는 로직은 다음과 같다 1. esi 1 증가 2. eax 1 감소 3. esi 1 증가 4. esi 1 증가 5. eax 1 감소 6. eax와 esi를 비교하고, 같으면 0x40103d로 이동하고 같지 않으면 에러 출력 그..

Article Thumbnail