Wargame.kr 포스트는 이해한 내용과 복습을 위한 목적으로 작성되었습니다.

이번 포스트에서는 dll with notepad 문제에 대한 이해와 풀이를 진행해보도록 하겠습니다.


IDA로 본격적으로 DLL을 열어보는 기념비적인 문제입니다.


 

 문제 이해

문제에서 DLL 파일을 리버싱할 수 있느냐를 물어보며 시작됩니다.

사실 X64DBG나 OllyDBG를 사용하던 시절에 리버싱을 했었다면 상당히 고생했을 거 같습니다.


그러나 지금은 IDA와 같은 좋은 툴이 있습니다...

그리고 문제 본문을 보면 localtime이 어쩌구 하는 것을 확인할 수 있었습니다.


아무래도 localtime으로 뭔가가 달라지는 것이 아닐까 합니다.



IDA로 문제 파일 중 DLL 파일을 열어보면 아래와 같이 start 함수에 notepad.exe라는 문자열과 비교하는 부분이 있습니다.


이 부분에서 notepad.exe라는 문자열과 같지 않으면 해당 루틴으로 넘어가지 않는다고 나와 있습니다. 아무래도 같이 제공된 notepad.exe 파일이 해당 DLL 파일을 불러오는 것이라는 합리적인 의심을 해볼 수 있습니다.

다음으로 StartAddress 함수를 들어가보니 Sleep 위에 함수가 하나 호출되는 것을 볼 수 있었습니다.


아래의 루틴은 크게 의미가 없어보여서 해당 함수로 들어가보았습니다.


여기서, 친절하게 문제에서 localtime을 유의하라고 하였는데, localtime를 확인하는 로직이 나오는 걸 보니 빙고인 것 같습니다.

여기서 쭉 분석을 해봤는데, 밑줄을 그은 부분을 보면 해당 주소를 하나씩 증가 시키면서 v1에 저장되는 값을 계속해서 추가적으로 저장하는 것을 볼 수 있었습니다.


그리고 위의 값은 다룬 곳에서 따로 변하는 것이 없었고, 위의 루틴에서 나와 바로 strcmp를 하는 것이 확인되었습니다.

그렇다면 해당 값이 무언가 의미가 있을 것으로 보입니다.


아무래도 해당 값을 확인해봐야 할 것 같은데... 리버싱으로 코드를 똑같이 만들어 계산해볼 엄두가 나질 않았습니다.


때문에 저는 동적 분석을 수행하였습니다.


X64dbg로 notepad가 켜지도록 하여 해당 영역의 값이 어떻게 변하는지 확인해봐야겠다고 생각했습니다.



 

 문제 풀이

notepad.exe를 x64dbg 로 32Byte를 지원하는 바이너리로 실행하고, 분석을 추가적으로 진행했지만, 별다른 소득은 없었습니다.

그래서 처음 분석한 내용을 먼저 확인해보자해서 notepad.exe가 실행될 때까지 그냥 실행하고,

이후 추가적인 문자열이 나타났는지 확인해보았습니다.

그랬더니 아래와 같이 나왔습니다.


그랬더니 위와 같은 문자열이 나타나는 것을 확인하였습니다.



+ Recent posts