Never Stop Running
[CodeEngn] BASIC 07 본문
* 리버싱 공부를 위한 문제풀이로
정답을 찾는 것과는 조금 다를 수 있습니다.
[CodeEngn] BASIC 07
문제 풀이 환경 |
Windows 10 / Intel / x32dbg / HanConv |
문제 URL |
BASIC 7번 문제.
문제는 C드라이브 이름이 CodeEngn일 경우 시리얼 생성 시 이 이름이 어떤 것으로 변경되는지 알아내는 것이다.
이것으로 보아 C드라이브 이름을 가져오고 그 값을 변경하여 시리얼을 생성하는 것을 알 수 있다.
[다음을 찾기] - [현재 모듈] - [문자열 참조]를 보면 성공시 뜰법한 문자열을 볼 수 있다. 더블클릭하여 이 문자열을 스택에 PUSH 해주는 곳으로 이동한다.
위에 보이는 문자열 비교 함수에 Break Point를 건다. 문자열 비교 전에 스택에 들어가는 저 두 값이 비교 대상이라는 것을 알 수 있다.
그리고 GetVolumeInformationA라는 이름의 Volume정보를 가져오는 함수에도 Break Point를 걸었다. 여기서 C드라이브 이름을 받아와 시리얼로 만든다는 것을 알 수 있다. 그리고 뭔가 [0040225C] ~ [0040225F]까지 주소 값 안에 1씩 더하는걸 볼 수 있다. 그래서 뭔가 값을 생성하는 곳이라고 생각했다.
일단 실행시키기 위해 임의의 값을 넣었다. Serial = abcdefg.
GetVolumeInformationA 함수를 지나고 [0040225C] 주소로 이동하니 어떤 값들이 들어있다.
16진수 값을 문자열로 바꿔보니 '로컬 디스크'라는 나의 C드라이브 이름이 적혀있었다.
그래서 이 부분을 바이너리 편집기를 이용하여 편집하였다.
우리가 원하는 'CodeEngn'이라는 이름으로 바꾸었다.
'CodeEngn'이 어떤 문자열로 바뀌었는지 확인할 수 있다.
'Training > Codeengn' 카테고리의 다른 글
[CodeEngn] BASIC 10 (0) | 2018.09.24 |
---|---|
[CodeEngn] BASIC 08 (0) | 2018.09.24 |
[CodeEngn] BASIC 06 (0) | 2018.09.24 |
[CodeEngn] BASIC 05 (0) | 2018.09.24 |
[CodeEngn] BASIC 04 (0) | 2018.09.24 |