tcache_stashing_unlink_attack

how2heap 2022. 2. 3. 17:04

요약 - calloc의 취약점?을 이용하여 공격 - calloc은 할당했을때 tcache bin에서 chunk를 가져가지 않는다. - calloc은 여러 bin들을 탐색하고, 대응하는 size의 bin이 tcache bin에 비어있지 않다면 이러한 bin을 사용 0x90 크기의 청크를 9개를 할당 0x405000 0x0 0x290 Used None None 0x405290 0x0 0xa0 Used None None 0x405330 0x0 0xa0 Used None None 0x4053d0 0x0 0xa0 Used None None 0x405470 0x0 0xa0 Used None None 0x405510 0x0 0xa0 Used None None 0x4055b0 0x0 0xa0 Used None None..

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
함수 호출 규약

Technique 2022. 1. 16. 16:14

요약 - cdecl - fastcall - stdcall 정의 "함수를 호출할 때 파라미터(인자)를 어떤 식으로 전달하는지에 대해 정해놓은 일종의 약속 용어 : caller -> 함수를 호출한 쪽, callee -> 함수 호출을 당한 쪽 cdecl - 주로 C언어에서 사용되는 방식 - caller에서 스택을 정리한다. 예를들어 main이 A라는 함수를 호출했다면 main이 자신이 스택에 입력한 함수 파라미터를 직접 정리 - 장점 : 가변 길이 파라미터를 전달할 수 있다. stdcall - Win32 API에서 사용되는 방식 - callee가 스택을 정리함 - stdcall으로 컴파일 하고 싶을때는 _stdcall 키워드를 붙여주면됨. - 장점 : 코드의 크기가 작아진다. fastcall - 기본적으로 s..

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