yon11b

[Lena Reversing] 6번-PC 설젼 체험판(델파이 프로그램) 본문

보안/리버싱

[Lena Reversing] 6번-PC 설젼 체험판(델파이 프로그램)

yon11b 2026. 6. 13. 01:34
반응형

목표: crackme
체험판을 정식버전으로 바꾸기!
 

 
<unreigstered 를 검색해보니까 00988F6E 주소에 있다.

 

Mapped?

저 부분에 있는 데이터들은 type이 Mapped인 부분인데,
이 경우 메모리 수정 자체는 가능할 수 있지만, EXE 파일에 직접 대응되는 영역이 아니므로 OllyDbg의 "Copy to Executable → Save File" 방식으로는 EXE에 반영되지 않는다.
Mapped 영역은 EXE가 로드된 Image 영역과 달리, 실행 중 File Mapping 등을 통해 별도로 매핑된 메모리 영역이기 때문이다.
4번 문제에서는 Image 영역을 수정했기 때문에 패치 내용을 EXE 파일로 저장하여 크랙 파일을 만들 수 있었다.

Type 의미
ImageEXE, DLL이 로드된 영역
MappedFile Mapping으로 매핑된 영역
Private프로그램이 Heap, VirtualAlloc 등으로 직접 할당한 메모리

 
이 부분만 유의해주면, 문제 푸는 건 다른 문제랑 비슷하다.
 

해결방법1

문자열(XREF)로 라이선스 체크 루틴 찾기

  • unregistered, expired, license 같은 문자열 검색
  • 문자열을 참조하는 코드(XREF)로 이동
  • 실제 등록 여부를 판단하는 코드를 찾음

⇒ 문자열 → 참조 코드 → 라이선스 체크 루틴
 

해결방법2

"결과"가 아니라 "원인"을 패치하기
특정한 하나의 변수값이 0인지 여부를 통해 unregistered, licensed를 여러번 검사하는 로직이 있었다.
이런 경우, 해당 변수값을 초기에 1로 바꿔주면 뒤에 오는 검사 로직들을 다 통과할 수 있게 된다.
 
이 부분이 unregistered를 검사하는 부분이고, JNZ에서 넘어가야 크랙이 되는 것이다.
방법1에서는 JNZ를 JMP로 수정해서 크랙을 했다.
여기서는 CMP 부분을 MOV 1로 바꿔주자.

그럼 DS:[EAX]값이 계속 1이 되어서 뒤쪽에서 DS:[EAX] 이 변수를 통해 registered인지, licesnsed인지 검사할 때마다 다 cracked된 버전으로 통과를 하게 된다.

 
크랙파일 실행 화면

 
성공!
 
 
 
 

728x90