리버싱 입문 22

[리버싱 입문](12)[abex crackme 10]

abex crackme 10(abex crackme 9은 계속 바이러스 탐지에 걸려서 나중에 풀겠습니다.) 이번엔 뭔 프로그램인지도 보기 전에 프로그램이 꺼진다.맨 위에 IsDebbugerPresent라는 함수 때문이었다. https://learn.microsoft.com/ko-kr/windows/win32/api/debugapi/nf-debugapi-isdebuggerpresent에 따르면 사용자가 이 프로그램을 디버깅하는지 감시하고 디버거에서 실행중이라면 0이 아닌 값을, 디버깅 중이 아니라면 0을 반환한다.따라서 IsDebbugerPresent에서 0이 아닌 값을 반환하고 그걸 0을 비교해서 바로 프로그램을 꺼버리는 곳으로 점프했기 때문에 프로그램이 꺼진 것이다.조건문을 NOP로 바꾸고 다시 실행한..

리버싱 입문 2025.02.24

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

abex crackme 8 이번에는 시리얼을 입력 후 check를 눌러 맞다면 correct가 뜬다. check 외에도 about, exit버튼도 있지만 딱히 중요하진 않다.불필요한 about, exit은 제외하고 사용자 값을 입력받은 이후에 점프한 곳을 보겠다.여기서 윈도우 핸들을 받아 GetDlgItemTextA를 통해 내가 입력한 값을 받는 것을 알 수 있다.https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-getdlgitemtexta 받고 난 이후에는 총 3개의 경우가 있다.- 시리얼을 입력했는데 틀린 경우- 시리얼을 입력하고 맞은 경우- 시리얼을 아예 입력 안한 경우correct가 뜨기 위해선 00401199에 있는 J..

리버싱 입문 2025.02.21

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

abex crackme 7 이번에는 name과 serial을 입력하고 맞으면 correct를 띄운다. 그러나 만약 틀리면 아무 메세지도 출력하지 않고 초기화만 시킨다. 일단 check할 때 아무것도 출력하지 않으므로 문자열로 check찾는 것은 단념하고 차근차근 따져보겠다.시작 지점 근처 ThunRMain함수에서 실행이 멈춰버리니 이곳을 집중적으로 살펴보겠다.함수 내부는 다음과 같다. 하나씩 실행해보니 MSVBVM60.7524AD4C에서 창을 띄우고 MSVBVM60.75287BE7에서 입력과 비교를 하는 것 같다. MSVBVM60.75287BE7에서 점프해서 수상해보이는 vbaVarCmpEq, vbaVarCmpNe가 보인다.이름으로 추측하길 vbaVarCmpEq는 두 변수의 값을 인자로 받아 같은지 판단..

리버싱 입문 2025.02.20

[리버싱 입문](9)[abex crackme 6]

abex crackme 6 이번엔 cmd 창이 떠서 숫자로 된 비밀번호를 입력하고 만약 맞다면 correct를 띄운다. 일단 correct, wrong 문자열부터 검색해보면"password: "밑에 CMP와 JNE가 보인다. 아마 그 위에 있는 call 00428310에서 뭔가 할 것이라 예상할 수 있다.그래서 값이 같지 않으면 wrong으로 점프하는 것이다.또한 vba~~같은 함수 주석이 달리지 않고 지냥 주소로만 함수 지정을 해서 알기 어렵다. 각 함수의 동작을 따져보겠다. call 0043C248: 1줄씩 실행해본 결과 cmd창에 글자를 쓰는 함수임을 알게 되었다. call 00428310: 아마 함수 내부에서 글자를 입력할 때까지 동작이 멈추는 부분이 있는 것으로 보아 사용자 입력을 받고 스택에 ..

리버싱 입문 2025.02.19

[리버싱 입문](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

[리버싱 입문](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

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

abex crackme 1문제: 하드디스크를 CD롬으로 속이기abexcrackme 1번을 ollydbg로 열었을 때 다음과 같다.왼쪽에 있는 주소를 보아 이 프로그램은 00401000부터 시작함을 알 수 있다.f7, f8을 이용해 조금씩 실행시키며 어디가 문젠지 파악하였디f8: 한 줄씩 실행f7: 한 줄씩 실행, 그러나 함수 내부로 들어감크게 눈에 보이는 함수는 다음과 같다.MessageBoxA함수: 보면 위에서 인자를 2개 받고 이 함수를 호출하면 메세지 창이 나오는 듯 하다.GetDriveTypeA함수: 드라이브의 종류를 정수로 반환(kernel32에서 제공하는 함수)즉 GetDriveType로 드라이브 종류를 안 다음 중간에 있는 cmp eax, esi je short 0040103D로 분기가 나뉘..

리버싱 입문 2025.02.05
728x90
반응형