메모장을 유용하게 사용 할 때가 있었다.
윈도우 기본 메모장에는 f5키를 누르면 날짜와 현재 시간을 찍어 출력해주는데, 순서가 불편했다.
오후 4:13 2020-01-24 이런 식으로, 날짜가 뒤에 나오는 것이 불편하여 호기심에 이걸 바꿔보고 싶어 리버싱을 시작했다.
x32dbg로 열어, 함수 목록을 찾아보았다.
f5를 눌렀을 때 시간 정보를 가져오니까 Get가 써진 함수중에 time이 붙은 함수가 있길래 bp걸고f5를 눌렀더니 멈췄다.
이 곳이 f5를 눌렀을 때의 이벤트 핸들러 함수가 있는 장소라고 생각했다.
함수를 쭉 둘러보고 몇 번 실행해 보며 관찰했다.
함수가 끝나는 부분 전에 핸들러의 edit박스를 수정하는 함수를 호출하고, 마무리짓고 끝낸다.
그리고 그 위를 보면 반복해서 뭘 호출하는데, 저 호출하는 함수가 문자열을 잇는 함수더라.
반복해서 나오는 ebp-338의 공간은
memset함수를 호출하고 난 뒤 빈 공간이 되는 것을 볼 수 있다.
할당된 메모리의 주소임을 알 수 있고, 위에서 반복해서 호출하는 것을 보아 저 주소에 시간 정보들을 복사할 것이다.
함수를 보면 차례로 GetLocalTime함수와, GetDateFormatW, GetTimeFormatW를 호출하는데, 뒤의 두 개는 무시해보고서라도 localtime을 먼저 호출하여 구하는 것 자체가 먼저 시간을 구했다는 것을 유추할 수 있다.
그리고 이 부분을 자세히 보면, ebp-338을 반복적으로 사용하는데 다른 주소의 인자를 같은 순서에 따라 두 번 넣는 것을 볼 수 있다.
ebp-a4와, ebp-3d8이다.
ebp-a4와 ebp-3d8이 참조하는 주소에는 시간 정보와 날짜 정보가 담긴 구조체나 텍스트 데이터가 저장될 것이다.
저 코드가 담긴 위치의 ebp-a4와 ebp-3d8을 반대로 수정하면 어떻게 될까.
아마도 날짜 텍스트가 먼저 ebp-338의 주소에 적히지 않을까?
바로 수정해 보았다. 명령어의 순서를 단지 바꾸기만 한 것이다. 명령어의 크기도 다르지 않아 수정하는데 문제가 없었다.
bp가 걸려있기 때문에 바로 실행해서 봐 보았다.
순서가 바뀌어 출력되는 것을 볼 수 있다.
메모장을 내가 원하는 대로 패치시키려면, 이 명령어가 있는 곳의 원래 File Offset를 찾아서 hxd등으로 바꾸면 된다.
8C3D : 8d 85 5c ff ff ff -> 8C3D : 8d 85 28 fc ff ff
8C63 : 8d 85 28 fc ff ff -> 8C63 : 8d 85 5c ff ff ff
윈도우 기본 메모장에는 f5키를 누르면 날짜와 현재 시간을 찍어 출력해주는데, 순서가 불편했다.
오후 4:13 2020-01-24 이런 식으로, 날짜가 뒤에 나오는 것이 불편하여 호기심에 이걸 바꿔보고 싶어 리버싱을 시작했다.
x32dbg로 열어, 함수 목록을 찾아보았다.
f5를 눌렀을 때 시간 정보를 가져오니까 Get가 써진 함수중에 time이 붙은 함수가 있길래 bp걸고f5를 눌렀더니 멈췄다.
이 곳이 f5를 눌렀을 때의 이벤트 핸들러 함수가 있는 장소라고 생각했다.
함수를 쭉 둘러보고 몇 번 실행해 보며 관찰했다.
함수가 끝나는 부분 전에 핸들러의 edit박스를 수정하는 함수를 호출하고, 마무리짓고 끝낸다.
그리고 그 위를 보면 반복해서 뭘 호출하는데, 저 호출하는 함수가 문자열을 잇는 함수더라.
반복해서 나오는 ebp-338의 공간은
memset함수를 호출하고 난 뒤 빈 공간이 되는 것을 볼 수 있다.
할당된 메모리의 주소임을 알 수 있고, 위에서 반복해서 호출하는 것을 보아 저 주소에 시간 정보들을 복사할 것이다.
함수를 보면 차례로 GetLocalTime함수와, GetDateFormatW, GetTimeFormatW를 호출하는데, 뒤의 두 개는 무시해보고서라도 localtime을 먼저 호출하여 구하는 것 자체가 먼저 시간을 구했다는 것을 유추할 수 있다.
그리고 이 부분을 자세히 보면, ebp-338을 반복적으로 사용하는데 다른 주소의 인자를 같은 순서에 따라 두 번 넣는 것을 볼 수 있다.
ebp-a4와, ebp-3d8이다.
ebp-a4와 ebp-3d8이 참조하는 주소에는 시간 정보와 날짜 정보가 담긴 구조체나 텍스트 데이터가 저장될 것이다.
저 코드가 담긴 위치의 ebp-a4와 ebp-3d8을 반대로 수정하면 어떻게 될까.
아마도 날짜 텍스트가 먼저 ebp-338의 주소에 적히지 않을까?
바로 수정해 보았다. 명령어의 순서를 단지 바꾸기만 한 것이다. 명령어의 크기도 다르지 않아 수정하는데 문제가 없었다.
bp가 걸려있기 때문에 바로 실행해서 봐 보았다.
순서가 바뀌어 출력되는 것을 볼 수 있다.
메모장을 내가 원하는 대로 패치시키려면, 이 명령어가 있는 곳의 원래 File Offset를 찾아서 hxd등으로 바꾸면 된다.
8C3D : 8d 85 5c ff ff ff -> 8C3D : 8d 85 28 fc ff ff
8C63 : 8d 85 28 fc ff ff -> 8C63 : 8d 85 5c ff ff ff
'리버스 엔지니어링' 카테고리의 다른 글
리버싱kr easy_elf 풀이 (0) | 2021.03.15 |
---|---|
[리버싱] 윈도우에서 아무것도 설치하지 않고 Hex Data 수정 (0) | 2020.07.01 |
[리버싱] 과연 이게 될까? Ch.1 (0) | 2020.07.01 |
인라인 패치 실습 - Code Cave patch (0) | 2020.07.01 |
crackmes.one crackme 001 by disip 풀이 + 크래킹 프로그램 제작 (0) | 2020.07.01 |