목록CTF/Reversing (26)
안 쓰던 블로그

굉장히 익숙한 main함수 자연스럽게 함수 들어간다 처음에 스택 공간 할당하고 CMP RAX, 18과 MOV EAX, 1이 한 세트니까 for문을 0x18번 돈다는 것을 알 수 있다 플래그가 총 0x18(24)글자라는 걸 생각하고 아래 for문을 본다 for문 안에서는 아래같은 연산을 한다 1) 문자열 받은 것과 연산 RAX에 현재 카운터 주소값의 값을 넣고 RCX에는 입력받은 문자열 시작점 주소를 넣는다 EAX에 [시작점+카운터값]주소의 값을 넣으니까 a[i]가 된다(문자열이 a라고 할 때) MOV ECX, DWORD PTR SS:[RSP]에서 RSP는 지금 돌고 있는 카운터 값이다 카운터 값을 ECX에 넣는다는 의미이다 INC는 증감 연산자이다 피연산자++ 동작을 한다 지금은 ECX를 ++하고 있다 ..

rev4 libpcap 이더넷 헤더 만들기: nroses-taek.tistory.com/119 libpcap 패킷 캡쳐: arings.tistory.com/entry/libpcap%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%8C%A8%ED%82%B7%EC%BA%A1%EC%B3%90 arp BOB위키: kitribob.wiki/wiki/ARP pcap 간단 소스: blog.daum.net/xaero77/39 libpcap 프로그래밍: www.joinc.co.kr/w/Site/Network_Programing/AdvancedComm/pcap_intro 패킷 스니핑: prosigi.tistory.com/20 libpcap: wiki.kldp.org/KoreanDoc/html/Li..

먼저 메인 함수를 본다. main을 보면 구조는 이전 문제들이랑 다르지 않다 함수에 들어가 본다 RCX(입력값)을 RSP+8 주소에 가져온다 RSP에 18만큼의 공간을 준비한다 RSP주소에는 0을 넣는다 JMP한다 CMP RAX, 1C를 하는데 RAC와 1C를 비교하는 것 결과값이 ~65주소보다 크거나 같으면(JAE) EAX에 1을 넣고 RSP에 18을 더하면서 종료된다 계속 비교하며 반복하는 모습이 보이니 즉 이 부분은 for문이다 for(int i=0; i>4 연산인 것이다 이 연산이 끝나면 RAX가 4가 된다 RDX에 다시 Hello를 가져온다(RSP+20 주소) ECX에 rdx+rcx*1: "Hello"를 한다 ECX에 'H'인 48이 들어간다 SHL은 왼쪽 쉬프트 연산. ECX가 원래 48이었는..
보호되어 있는 글입니다.
wow64 Windows on Windows의 약자로, 64비트 플랫폼에서도 기존의 32비트용으로 개발된 어플리케이션이 실행될 수 있도록 하는 기능이다 64비트 윈도우즈 상에서 32비트 윈도우즈를 실행시킨다는 점에서 가상머신 같은 역할을 한다고 볼 수 있다 wow64 file system redirection 32비트 프로그램을 64비트에서 실행 시켜야 하니까, 32비트 프로그램이 system32 폴더를 참조하면 윈도우즈가 자동으로 SysWOW64폴더로 리다이렉션 해 준다 그래서 같은 64비트 프로그램을 실행하더라도 32비트에서 실행되었나, 64비트에서 실행되었나에 따라 파일의 오프셋 값이 달라지기도 한다

#include int main() { int a, b, c = 0; if(a > 9){ b = a; } else if(a % 2 == 1){ c = c + a; } else a++; return 0; }

이 문제에서도 rev1처럼 입력을 받고 뭔가 함수 호출 후에 corret wrong에 따라 분기한다 분기문에서 bp걸고 f7로 내부로 들어갔다 문자열을 한 글자씩 가져온 후에 어떤 연산을 거치고 input과 비교한다 한 글자씩 비교하는 함수를 총 0x18(23)번 반복하기 때문에 Flag가 총 0x18(23)글자인것을 먼저 확인해야 한다 (마지막은 \00) 첫 번째 글자를 구할 때는 카운트가 0부터 시작되기 때문에 Flag 첫 글자와 연산에 사용되는 비교 문자의 글자가 동일하다. 일단 규칙을 찾아야 한다. 첫 번째 글자는 그랬는데 두번째 글자부터는 카운트가 1로 증가하며 뭔가 연산이 시작되는 것을 볼 수 있음 첫 번째로 본인이 입력한 글자 ^ 카운트 연산을 한다 두 번째로 첫 번째 연산 과정에서 구한 결..