Search

윈도우용 pwntools 사용기

Tag
window
debug
Create time
2021/06/09
워게임 풀다가 윈도우용 pwntools를 찾아보게되었고 역시 생각하는건 다 있는듯ㅋ
경험을 공유하고자 간단히 정리하겠다
우선 python27, python37 둘다 깔기
gdb.attach() 하면 리눅스에선 일반적으로 터미널 창 하나 띄워서 디버깅 조졌음. but 윈도우에선 어떤 디버거를 사용할 지 정해야함. 항목은 아래와 같음
1.
windbg preview
2.
windbg
3.
x64dbg, x32dbg
4.
mingw gdb
1~3번은 python3 버전대에서 해야 에러없이 진행되고 4번은 python2 버전만 호환됨. 1~3은 다해밨는데 4번은 에러떠서 시도 못함. ㅅㅂ
4번 mingw gdb는
저렇게 실제 리눅스 peda 마냥 쓸수 있다고함. 후에 저것도 성공해서 수정하겠음
일단 python3 기준으로 설치법
python -m pip install winpwn
winpwn 폴더안에 보며 setup.py 있음
python setup.py install
만약에 에러나면 (안나면 스킵)
python -m pip install PythonForWindows
python setup.py install
pkyd.pyd 설치
다운로드 방법 7번에 링크있음
bywin 폴더로 들안에 byinit.py 경로 기억
winpwn 폴더들어가보면 .winpwn파일이 있음
{ "debugger":{ "i386": { "x64dbg": "E:\\etc\\reversing\\snapshot_2020-08-16_04-47\\release\\x32\\x32dbg.exe", "gdb": "C:\\Users\\wogh8732\\Documents\\gdb-6.8-mingw-3\\bin\\gdb.exe", "windbg": "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x86\\windbg.exe", "windbgx": "C:\\Users\\wogh8732\\AppData\\Local\\Microsoft\\WindowsApps\\Microsoft.WinDbg_8wekyb3d8bbwe\\WinDbgX.exe" }, "amd64": { "x64dbg": "E:\\etc\\reversing\\snapshot_2020-08-16_04-47\\release\\x32\\x32dbg.exe", "gdb": "F:\\etc\\x86_64-w64-mingw32-gdb-7.1.90.20100730\\mingw64\\bin\\gdb.exe", "windbg": "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x64\\windbg.exe", //난 얘는 안씀 무시하셈 "windbgx": "C:\\Users\\wogh8732\\AppData\\Local\\Microsoft\\WindowsApps\\Microsoft.WinDbg_8wekyb3d8bbwe\\WinDbgX.exe" } }, "debugger_init": { "i386": { "x64dbg": "E:\\etc\\reversing\\snapshot_2020-08-16_04-47\\release\\x32\\x32dbg.exe", "gdb": "C:\\Users\\wogh8732\\Documents\\gdb-6.8-mingw-3\\bin\\gdb.exe", "windbg": ".load E:\\ShareDir\\building\\bywin\\pykd_ext_2.0.0.24\\x86\\pykd.dll;!py -g E:\\ShareDir\\building\\bywin\\byinit.py;", // 난 얘는 안씀 무시하셈 "windbgx": ".load E:\\etc\\pykd-0.3.3.3-cp27-win32\\pykd\\pykd.pyd;!py -g E:\\etc\\peda-windows-master\\peda-windows-master\\windbg\\bywin\\byinit.py;" }, "amd64": { "x64dbg": "E:\\etc\\reversing\\snapshot_2020-08-16_04-47\\release\\x32\\x32dbg.exe", "gdb": ":\\etc\\x86_64-w64-mingw32-gdb-7.1.90.20100730\\mingw64\\bin\\gdb.exe", "windbg": ".load E:\\ShareDir\\building\\bywin\\pykd_ext_2.0.0.24\\x64\\pykd.dll;!py -g E:\\ShareDir\\building\\bywin\\byinit.py;", "windbgx": ".load E:\\ShareDir\\building\\bywin\\pykd_ext_2.0.0.24\\x64\\pykd.dll;!py -g E:\\ShareDir\\building\\bywin\\byinit.py;" } } }
JSON
복사
바이너리 아키텍처에 따라서 디버거를 붙일 수 있음. debugger 에는 걍 자신 환경에 존재하는 디버거 경로 적어주면됨
debugger_init 에서 x64dbg에는 걍 동일하게 디버거 경로적어주고, windbg랑 windbgx에는 windbg에서 파이썬 스크립트 실행을 위해 모듈을 로드해야한다. pkyd.pyd 다운로드했으면 해당 파일 경로 맞춰서 적어주고 ; 뒤에 !py -g "아까 기억하라는 byinit.py 경로 적기"
작대기한 부분은 저거 안써서 수정안했음. 만약 am64로 조질 사람은 위에꺼 보고 적절히 세팅하면 됌
사용법은 https://github.com/Byzero512/winpwn 여기보면 됨
예제코드
from winpwn import * context.debugger = "windbgx" context.arch = "i386" context.log_level = "debug" p = process("09.exe") windbgx.attach(p, script="bp 0xe613f4") #p.recv(100) p.recvuntil("Username: ") p.sendline('123') p.recvuntil("Password: ") # p.recv(30) p.sendline("8921743") p.interactive()
Python
복사
저렇게 하고 실행하면 windbg preview 가 실행됨
이제 g를 누르면 실행되면서 bp에 딱걸림