본문 바로가기

Reversing25

[abex' crackme] #5 문제 풀이 파일을 실행하면 시리얼 값을 입력하라는 알림 창이 뜬다. 아무 값이나 입력하고 Check 버튼을 클릭하면 에러 알림 창이 뜬다. 004010FC에서 EAX와 0을 비교하여 분기하므로 004010F7에서 IstrcmpiA가 비교를 한다고 생각해서 004010F7에 BP를 설정했다. BP 설정 후 실행을 하니 String1과 String 2에 메시지가 추가됐다. String1에 시리얼 번호가 있다. 해당 시리얼 키를 입력했더니 Well Done 팝업 창이 떴다. 2024. 3. 29.
[abex' crackme] #4 문제 풀이 파일을 실행하면 Serial을 입력하라는 입력 창이 뜬다. 입력은 되지만 Registered 버튼이 활성화되지 않는다. 이뮤니티 디버거로 열어서 주석을 봤을 때, 이 부분이 올바른 시리얼 값을 입력했을 때에 출력된 문자들로 추측된다. 여러 함수 중 vbaStrCmp 함수가 있는 것을 확인했다. 정해진 시리얼 값과 비교하는 함수라고 추측해서 해당 부분에 BP를 설정했다. F9로 해당 주소로 이동했더니 시리얼 입력 창이 떴다. 아무거나 입력했더니 레지스터 값들이 변경됐다. 특히 ECX 레지스터를 보면 유니코드 값이 보인다. 이 값을 시리얼 값이라고 추측해서 입력해봤더니 Registered 버튼이 활성화되어 문제를 풀 수 있었다. 2024. 3. 29.
[Lena] Lena Tutorial 24 보호되어 있는 글 입니다. 2023. 5. 28.
[Lena] Lena Tutorial 23 보호되어 있는 글 입니다. 2023. 5. 28.
[Lena] Lena Tutorial 22 보호되어 있는 글 입니다. 2023. 5. 28.
[Lena] Lena Tutorial 21 이 프로그램의 패킹을 풀고 덤프를 하는 것이 목적이다. 윈도우 한글 인식 못 해서 글씨 다 깨짐 아놔 디버거로 열면 해당 코드들을 볼 수 있다. (PUSHAD) 레지스터 값을 스택에 백업 (POPAD) 스택에 저장된 값을 다시 레지스터에 저장 ​PUSHAD ~ POPAD 부분에서 언패킹을 수행하며, 스택에서 레지스터들이 꺼내지는 순간 OEP로 진입한다. 언패킹 중 레지스터 변경 방지를 위해 백업/복구와 유사한 절차를 수행하는 것이다. POPAD까지 실행하고 Dump debugged process를 통해 언패킹된 프로세스를 추출하면 오류가 난다. 프로그램 실행에 필요한 IAT가 누락됐기 때문에 발생한 오류다. 언패킹된 파일은 리소스 영역의 IMPORT Hints/Names가 없기 때문에 원본 실행파일의 I.. 2023. 5. 18.
[Lena] Lena Tutorial 20 뭐가 문제인 거지? 이거부터 혼란스럽다. 구글링 해서 뭘 해야 되는 지 찾았다. 앱을 클릭하면 언패킹 하고 싶으면 튜토리얼을 작성하라고 한다 :) 패킹(실행 압축)은 실행 파일의 코드를 압축하는 행위이고 그렇게 압축된 코드를 해제하는 것이 언패킹이다. 패킹은 일반적으로 흔히 알고 있는 압축과 달리 있는 그대로 일반 프로그램처럼 실행이 가능하다. 패킹은 데이터 압축의 목적 혹은 악성 코드에서 작은 용량으로도 빠르게 많이 퍼지게 하여, 분석이 불가능 하게끔 만드는 목적으로 사용된다. 패킹의 기본 원리는 패킹 프로그램이 실행되는 어느 시점에서는 압축되기 전 상태로 돌아가야 하며, 그때 메모리 상태를 Dump(메모리 내용을 그대로 파일로 저장)하고, EP를 압축하기 전 위치로 설정해주는 것이다.' EP(Entr.. 2023. 5. 16.
[Lena] Lena Tutorial 19 이건 이뮤니티 디버거를 써서 그런 지 아무 문제가 없다. 그래서 ReverseMe.A를 패치해 볼 것이다. 해당 앱을 클릭하면 내가 해냈다며 축하한다고 한다. 그런데 이뮤니티 디버거에서 실행하면 키 파일이 유효하지 않다는 알림 창이 뜬다. 디버거에서 실행해도 앱을 클릭해서 실행했을 때랑 같은 알림 창이 뜨도록 패치할 것이다. 문자열을 찾아서 해당 주소로 이동해봤다. 004010FB에 있는 IsDebuggerPresent 함수는 004010D3에서 004010FB를 호출하면서 호출된다. 이 함수가 디버거 프로그램이 실행되면 Keyfile이 맞더라도 올바르지 않다고 출력하고 있다. 해당 함수는 디버깅 중이라면 0을 리턴하고 아니라면 1을 반환한다. 따라서 디버깅 중이라면 분기하는 부분인 00401103을 N.. 2023. 5. 16.
[Lena] Lena Tutorial 18 프로그램을 실행하면 2byte 패치를 통해 nag 창을 없애라고 한다. 프로그램 실행 시 두 번째 창만 나오도록 패치해야 될 것 같다. 이뮤니티 디버거로 프로그램을 뜨면 바로 프로그램 실행 시에 뜨는 팝업창 메시지가 보인다. Messagebox로 생각되는 4012BD에 직접 BP를 걸고 실행해 봤더니 예상과 다르게 BP에 걸리지 않고 nag 창이 실행이 된다. 이 코드들은 실제로 동작하지 않고 분석을 방해할 목적으로 들어있는 코드로 추측된다. 해당 코드에서 조금 위로 올라갔더니 호출 함수가 두 개 있었다. 먼저 0040130F부터 살펴 봤다. 00401000번지를 EAX에 받아온 후, 이 값을 점차 증가시키면서 1byte씩 5A와 XOR 연산하고있다. USER32.BeginPaint의 값인 0040121.. 2023. 5. 10.
[Lena] Lena Tutorial 16 Movie Gear 프로그램을 설치한다. 프로그램을 실행하고 Help를 보면 Register Now...과 About GIF Movie Gear...이 있다. 이번에도 등록을 시켜야 되는 문제인가 보다. About GIF Movie Gear...을 클릭하면 평가판 소프트웨어라고 알려주는 팝업 창이 뜬다. Register Now...에서 Name과 Code에 임의의 값을 입력하면 유효하지 않은 값이라는 팝업 창이 뜬다. 이뮤니티 디버거에서 F9를 눌러 프로그램을 실행시키고, nag 창이 뜨면 F12로 중지시켰다. 그리고 Alt + K를 눌러 Call stack을 살펴봤다. call from에 해당하는 함수 이름이 movgear이므로 DialogBoxParamA 함수를 실행하는 곳이 nag 창을 실행하는 것.. 2023. 5. 10.
[Lena] Lena Tutorial 15 보호되어 있는 글 입니다. 2023. 5. 4.
[Lena] Lena Tutorial 14 프로그램을 실행하면 이런 화면이 뜬다. Enter Reg.Code를 클릭하면 등록 정보를 입력할 수 있다. 임의의 값을 넣었더니 역시나 안 된다. 등록 관련 문자열을 찾았다. 코드 상단으로 이동할 때 4,3,1,2 순서로 배치되어 있으며 각각 인증 성공(Thank you …code), 인증 실패(The regist…mistake), setTimer, KillTimer가 정의되어 있다. 위 4개에 BP를 설정하고 실행해보면 CMP EAX, 2 부분이 인증 절차가 시작되기 전에 기본적으로 실행되는 부분임을 알 수 있다. 따라서 인증 성공을 정의하는 CMP EAX,4가 가장 먼저 실행되도록 2와 4의 위치를 바꾼다. 2와 4의 위치를 바꿨더니 프로그램 실행 시 인증 성공 루틴으로 간다. 끝 ~.~ 참고 htt.. 2023. 5. 4.
[Lena] Lena Tutorial 13 설치 파일을 다운로드 하고 실행하면 이런 화면이 뜬다. About을 클릭하면 라이센스가 등록되지 않았다고 한다. 임의의 값을 입력하면 역시나 유효하지 않은 코드라고 한다. 이뮤니티 디버거에서 register 관련 문자열을 찾았다. 등록에 성공하면 해당 문자열이 뜨는 것으로 추정된다. 해당 위치에 들어가보니 좀 위에 유효하지 않다는 문자열이 있다. 0041749C를 JMP로 바꿔서 여길 무조건 뛰어넘도록 해봤다. 그 후 사용자 등록을 하면 등록에 성공했다는 알림 창이 뜬다. 그러나 여전히 About에선 등록이 안 됐다고 한다. 따라서 이것도 패치해 줘야 한다. 등록이 안 됐다는 문자열이 있는 위치에 가보면 바로 위에 등록이 됐다는 문자열이 있다. 이게 나오도록 00401499를 JE에서 JNE로 변경했다... 2023. 5. 3.
[Lena] Lena Tutorial 12 프로그램을 실행하면 이런 화면이 뜬다. Help > About을 클릭하니 Unregisted Version이라고 한다. Use Reg Key를 클릭하여 임의의 값을 넣었더니 유효하지 않은 값이라고 한다. 이뮤니티 디버거에서 등록 관련 문자열을 찾아서 해당 위치로 이동했다. 해당 위치 바로 위에 JNZ가 있어서 이 문구를 뛰어넘고자 했다. JNZ를 JE로 바꾸고 다시 실행해봤으나 딱히 성과가 없었다. 그래서 더 위로 이동해봤더니 CALL 다음에 바로 RETN이 있었다. 아!!!진짜수상해 해당 부분에 BP를 설정하고 실행해 보면 오류 창이 뜨고 BP에서 멈추지 않는다. 이 CALL 함수를 NOP 처리해야 될 것 같다. 004A5461을 보면 CALL에서 ntdll로 이동하는 것을 볼 수 있다. 이걸 NOP .. 2023. 4. 27.
[Lena] Lena Tutorial 11 문제를 실행하면 이런 팝업 창이 뜬다. 여기서 Next 버튼을 클릭하면 프로그램이 실행되긴 하는데 후에 이뮤니티 디버거에서 제대로 리버싱을 진행할 수 없으므로 꼭 제대로 다운 받은 뒤에 진행해야 한다. 처음에 이걸 몰라서 엄청 당황했다. 프로그램을 실행하면 이런 화면이 뜬다. show를 클릭했을 때 보이는 이미지가 엄청 귀엽다! Desk > Select를 클릭하면 등록이 되어 있지 않다고 한다. Register 버튼을 클릭했다. Password에 임의의 값을 넣어 보면 역시나 유효하지 않다고 한다. Password를 찾거나 등록을 무시하도록 해야 겠다고 추측했다. 이뮤니티 디버거에서 등록 관련 문자열을 찾아서 해당 위치로 이동했다. 캡처는 없지만 004046E4에 TEST AL, AL 명령어가 있다. 이.. 2023. 4. 27.