DDDDigtal 4ensics

레나 튜토리얼 - 04 풀이 본문

Reversing

레나 튜토리얼 - 04 풀이

Dx4 2024. 2. 15. 22:21

 레벨 4부터 드디어 크랙미가 아닌 프로그램을 문제로 주기 시작했다.

이번 문제는 무료 버전인 프로그램을 유료 버전처럼 모든 기능을 활성화시켜라 라는 문제다.

(사실 이 외 뭐... 파일의 타이틀을 바꿔라같은 hex 수정 부분이 있는데 이 부분은 따로 언급하지 않을 예정.)

 

현재 문제에서 요구하는 부분은 [이미지 1]과 같이 사람을 4명 초과는 생성이 안된다고 한고,

[이미지 2]와 같이 그룹은 4개 이상 생성할 수 없다고 한다.

 

[이미지 1] 사람 5명 이상 생성 불가
[이미지 2] 그룹 4개 이상 추가 불가

 

   기드라로 문제를 성공적으로 불러왔다면, [이미지 3]와 같은 화면이 기다릴거다. 이번 문제는 해당 함수가 어디 위치하고 있는지 빠르게 알기 위하여 Search - For Strings... 를 누른다.

 

[이미지 3] 기드라로 문제를 불러온 모습

 

 누르면 [이미지 4]와 같은 창이 나올건데 Minimum Length를 10정도로 잡아준 후 Search를 눌러준다.

[이미지 4 ] Search For Strings

 

그럼 [이미지 5]와 같이 서치된 결과가 하나 나올 것 이다. 후 더블클릭해서 해당 위치로 이동시키고 해당 서치창은 잠시 닫아준다.

[이미지 5] 서치가 완료된 모습

 

후 해당 주소에서 우클릭 후 References - Show References To address를 눌러 어디서 해당 주소를 참조하는지 확인한다.

 

[이미지 6] 참조된 주소 확인

 

참조된 주소를 확인한다면 00412de0에서 해당 주소를 참조하는 것을 알 수 있고, 해당 주소로 이동한다면 사람 add에 관한 펑션이 존재하는 것을 알 수 있다.

[이미지 7] 00412de0에서 참조하는 모습

 

해당 함수에서 코드 브라우저를 확인한다면, 이러한 조건문을 확인할 수 있다. 어떠한 연산을 한 후 아니라면 FUN_004562ed를 호출하는 것을 알 수 있는데, 이 때, 4보다 작은 걸로 봐선 현재 생성된 연락처의 수라는 것을 추측할 수 있다. 

[이미지 8] 해당 함수의 코드

 

해당 if는 현재 JL(부호가 있는 데이터 비교)로 점프가 결정된다. 우리는 이를 Ctrl + Shift + G를 이용하여 JL -> JMP로 바꾼다면 문제없이 사용할 수 있을 것 이다.

[이미지 9] 코드 브라우저 상의 if의 어셈블리 분기점 위치

 

후 그룹에 대한 부분은 내 능력으로 ... 기드라에서 패치하는데엔 한계가 보이더라.. 그래서 x32dgb를 이용하여 계속 문제를 풀어본다. x32dgb를 킨 후 PixtopianBook에 어태치를 진행한다.

[이미지 10] x32dbg를 통하여 PixtopianBook를 어태치하는 모습

 

 후 어셈블리 코드 창에서 우클릭 -> 다음을 찾기 -> 모든 모듈 -> 문자열 참조에서[이미지 11]과 같이 You've ....에 대한 문자열의 주소를 획득하고 해당 주소로 이동한다

[이미지 11] 해당 문자열 탐색

 

해당 주소로 왔다면 해당 분기점을 쉽게 찾을 수 있다. 이 분기점을 jmp로 바꿔준다면, 쉽게 문제를 해결할 수 있을 것 이다.

[이미지 12] 분기점 수정 성공