하다보니 파일이 날라가서 복구하는데 리버스 엔지니어링이 필요했습니다. 작성한 스크립트 파일은 python 3.9 이기 때문에 디컴파일 프로그램 한 번으로 변환되지 않았습니다. de컴파일러와 버전 안 맞으면 복구 쉽지 않습니다. (안 될 수도) 이래저래 테스트해보기 위해서 여러 운영체제에서 테스트했습니다. 그 과정을 혹시나 싶어 정리...
해당 과정은 실행파일을 바이너리 파일로 추출하고, 추출한 바이너리 파일을 다시 원본 스크립트로 변환하는 과정.
실행파일을 바이너리 파일로 추출하는 건 pyinstxtractor를 활용했습니다. 최신 버전 python과 pyinstaller version을 지원함.
# 실행
python pyinstxtractor.py {recover_file_name}.exe
제대로 되었다면 {recover_file_name}.exe_extracted 이라는 하위 폴더명이 생기고,
해당 폴더 안에 {recover_file_name} 이라는 실행 파일과 이름이 같지만 확장자가 없는 파일 하나와, base_library.zip 파일이 생성.
base_library.zip 을 windows는 HxD 프로그램이나 mac의 경우 Hex friend를 통해서 해당 압축 파일 내에 있는 Magic Number가 무엇인지 파악.. 16진수로 되어 있는 파일에서 맨 첫 줄 16진수 숫자에서 앞의 8자리는 모두 동일함. 나머지 8자리는 0으로 표기해서, 확장자가 없었던 {recover_file_name}을 pyc 확장자로 수정후 해당 16진수를 넣기.
# 첫 번째 파일의 첫 줄
61 0D 0D 0A 01 00 00 00 72 9E 80 EC 1E 90 77 30
# 두 번째 파일의 첫 줄
61 0D 0D 0A 01 00 00 00 47 6B 1E BE 1E 39 D7 2E
# 바이너리 파일 첫 줄로 넣은 숫자
61 0D 0D 0A 01 00 00 00 00 00 00 00 00 00 00 00
(참고했던 블로그님 https://jaehoney.tistory.com/72)
magic number까지 넣어서 수정한 바이너리 파일을 py로 읽어들이면 되는데 이 de컴파일 과정이 쉽지 않았습니다. 지원되는 버전이 없어서 pycdc를 활용했습니다. c++ 디셈블러와 디컴파일러 프로그램이라서 이건 리눅스에서 돌렸습니다... mac에서는 python 버전 몬가 문제가 있었음
# 해당 파일들이 없을 경우 설치
sudo apt install cmake
sudo apt install git
# pycdc
git clone https://github.com/zrax/pycdc.git
cd pycdc
cmake ./
make
혹은 windows인 경우에는 cmake ./ 하고 난 다음 MSBuild pydc.sln 이라는 방법도 있다고 하는데 빌드가 안되서 그냥 리눅스에서.
빌드 끝나면 해당 바이너리 파일에서 소스 코드를 볼 수 있습니다.
# source code 확인
./pycdc {recover_file_name}.pyc
이렇게 해서 볼 수 있고, py로 변환하기 위해서는
# py로 변환
./pycdc {recover_file_name}.pyc > {file_name}.py
로 하면 많이 날라갔지만 복구 성공.
# error...
Warning: block stack is not empty!
Unsupported opcode: JUMP_IF_NOT_EXC_MATCH
Warning: block stack is not empty!
Unsupported Node type: 27
decompile 말고 disassemble이 목적이라면
./pycdas {recover_file_name}.pyc
'Python' 카테고리의 다른 글
flask)직접 신청폼 만들기-1 / flask-sqlite3 연결하기 (0) | 2023.07.30 |
---|---|
pycharm-copilot 베타버전 설치 방법 (0) | 2023.05.12 |
chromedriver, Crontab, 저장된 파일 위치, 권한 issue (0) | 2023.03.21 |
SQLAlchemy - db.create_all() (0) | 2023.02.19 |
Pycharm 라이브러리 설치 안될 때, flask_bootstrap, venv 에러, activate virtualenv from pycharm terminal (0) | 2023.02.05 |