보호되어 있는 글입니다.
걍 ls 1 > &0 하면 출력됨 ㅋㅋ;
보호되어 있는 글입니다.
TL;DR python3 에서 바이트에서 0~256사이의 유니코드를 디코딩하고싶으면 bytes.decode('iso-8859-1')을 사용하자. python3으로 포너블 문제들을 풀다보면 str과 bytes를 가끔씩 혼용할 때가 있다. pay = '' pay += 'AAAAAAAA' pay += p64(0xdeadbeefcafebabe) p64(0xdeadbeefcafebabe)의 반환값은 바이트 자료형이기 때문에 str과 합치려고 하면 오류가 난다. payload의 문자열들에 b를 붙여서 해결할 수도 있고 p64의 결괏값을 디코딩해서 넣어줘도 된다. 여기서 문제는 decoding할때의 codec이다. ENCODING >>> b"\x7f".decode() '\x7f' >>> b"\x80".decode()..
gdb python 실행 방법 gdb -q -x gdb-python-test.pygdb 명령 실행 import gdb gdb.execute("file testfile") gdb.execute("r")실행결과 파싱 gdb.execute('x/gx $rdx', to_string=True) gdb.execute('x/i $rip', to_string=True)실행결과 출력을 가져옴 이런식으로 쓰면 현재 인스트럭션 긁어오기, 레지스터 값 가져오기 가능 레지스터 값 바로 가져오기 gdb.selected_frame().read_register('rip')레지스터값을 바로 변수에 넣어줄 수 있음
IDA에서 Switch-Case 문이 깨져서 나올때 가끔씩 IDA로 바이너리를 분석하다 보면 분명히 switch-case인데 JUMPOUT() 혹은 jmp rax 표시될 때가 있다. 기드라로 열면 디컴파일이 잘 되긴 하지만 기드라가 익숙치 않기도 하고, 아이다로 분석하던걸 다시 기드라로 옮기기에는 스트레스도 생긴다. 이럴때 jmp rax를 IDA위에서 switch-case문으로 변환해줄 수 있다. specify-switch-idiom 아이다의 디스어셈창에서 Edit -> Other -> Specify-switch-idiom옵션을 실행하면 다음과 같이 나온다. 하나하나 어떤값들을 채워야하는지 알아보자. Address of jump table jmp rax를 통해 플로우가 바뀌므로 얼마만큼 점프해야하는지, ..