검색결과 리스트
글
너무나도 쉽게 파일을 바이너리로 읽어와 특정 HEX로 변경하는법
모 게임엔진의 BGM파일의 헤더 변조를 통한 자체 보호기능을 뚫다가,
특정 오프셋의 hex값을 변경하면 제대로 돌아가는 점을 발견하여
이를 자동화 시켜 뚫어주는 간단한 파이선 코드를 제작하게되었다.
간단히 설명하면 mp3 header의 mp3 sync word를 변조하여 보호한 기법이였는데,
사실 별거 아니였다... 왜냐하면 정상 헤더라면 처음 파일 시작 오프셋의 HEX값이 \xff (FF)
로 되어 있어야 되는데... 요놈을 딱 하나만 변경해 놓았기 때문
nds binary fix할때 썼던 극악의 경우까지 생각하면서 (f*****이나 C*****사의 대사 압축 바이너리...같은...)
시도하였던 것이기 때문에... 맥이빠졌지만...
잡설은 각설하고... 본론으로 들어가면
원래 하고 싶은 기능은 offset을 설정받아서 hex를 수정하는 것이였지만
맥빠지게 파일 오프셋 제일 처음의 2byte 부분을 변조 하면 되서 (...)
다음과 같은 방법으로 구현하게 되었다.
# -*- coding:utf-8 -*-
__author__ = 'Conger'
filename = "fuck.xxx"
with open(filename, 'r+b') as f:
newbytes = b'\xff'
f.seek(0)
f.write(newbytes)
f.close()
위의 f**k 파일이 변조된 파일이고 , 이 파일은 다음과 같은 특징을 가지고 있다.
감이 오는가? HxD를 통해 hex compare를 한 내역이다. 위의 내용이 변조된 비정상적 mp3 header이고,
아래의 내용이 정상적인 mp3 header (이를 사용하는 게임 엔진을 통한 복호 내역) 모습이다.
위의 파이선 코드를 동작시키면 hex쓰기를 통해 FF를 넣어 정상 mp3파일의 헤더값으로 변경해 주면
아주 잘~ 열린다
'알아두자 > python' 카테고리의 다른 글
파일을 읽어와 HEX로 출력하되 16단위로 자르기 (0) | 2014.09.13 |
---|---|
vs2010 express (visual studio 2010 express) 다운로드 링크 (0) | 2014.05.16 |
모듈 불러올 시 차이점 (0) | 2013.11.21 |
프로그램 실행시간 측정 (second 단위) (0) | 2013.11.03 |
간단한 ppserver.py 배치파일 소스 (0) | 2013.10.08 |