abex crackme 11

[리버싱 입문](14)[abex crackme 12, 13]

abex crackme 12 이번에는 프로그램을 실행하면 Nag Nag라는 창을 지워보라고 한다. 단순히 NagNag를 출력하는 MassageBoxA를 지워보겠다.이러면 NagNag를 출력하는 부분이 사라져 창이 뜨지 않는다.수정한 상태를 다른 파일로 저장하면 Nag창 없는 프로그램이 완성된다. -----------------------------------------------------------------------abex crackme 13 이번에는 또 올바른 시리얼을 입력하는 문제다.딱 봐도 수상해보이는 문자열이 보인다.이 문자열이 esi에 저장되긴 하는데 대체 뭔 역할을 하는지는 모르겠다.왜냐하면 값 비교는 이 문자열 말고 다른 거랑 한다... 실제로 판단하는 부분은 0040107D번지에 있는..

리버싱 입문 2025.02.26

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

abex crackme 11 이번에는 만약 맞는 시리얼을 입력하면 correct를, 아니라면 문제를 만든 제작자 이름 창과 함께 Mal Cracker!!!라는 문자열이 보인다. 일단 main함수로 들어가서 살펴보겠다.안으로 들어오면 창을 띄우는 함수와 버튼 만드는 함수 등이 있고, 그 밑에 검사하는 함수(MSVBM60.6B5D3B1D)가 있다. 안에서 MSVBM60.6B5D3C84에서 입력을 받는다는 것을 알게 되었다. 함수가 호출되며 멈추는 부분을 계속 들어가며 분석하려 했지만 반복문과 함수 호출때문에 어려웠다. 따라서 그냥 호출되는 함수를 검색해 cmp를 찾기로 한다.검색 결과 vbaStrCmp가 있었다. 인자의 값을 보니 EAX엔 내가 입력한 1234567이, ECX에는 677345가 들어있었다. ..

리버싱 입문 2025.02.25

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

[리버싱 입문](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
728x90
반응형