목록전체 글 (184)
Iriton's log

Name이 CodeEngn일때 Serial을 구하시오. 풀이 올리디버거를 열어 무작정 한줄 실행을 하다보니 CALL 함수가 실행되고 아무것도 없던 화면에 문구가 떴다. Enter your Name 이라는 문구를 띄우는 코드 근처로 가서 분석해 보기로 했다. EAX와 EBP-3C와 비교하고 점프문이 실행된다. 비교문에 BP를 걸어두고 재실행하여 레지스터 값을 비교해 보았다. EAX엔 사용자 입력값이 저장됐다. EBP-3C 주소를 찾으면 된다. 70FEEC 주소로 가면 된다. 여기서 4바이트만 긁어서 변환해 주면 된다. 이때 리틀엔디언으로 표현되어 있기에 순서를 바꿔서 E4 C6 0D 97을 변환해야 하는 것에 유의해야 한다.

Name이 CodeEngn일때 Serial을 구하시오. 필요 개념 정리 Ollydbg 메뉴더블 클릭: 해당 주소로 이동 Az 아이콘: 현재 보고 있는 모듈에 있는 문자열들을 참조하는 어셈블리어를 검색해줌. CMP: 두 값을 비교한다. 두 값이 같다면 ZF가 1로, 다르면 0으로 설정됨. JNZ: JNZ A - 비교 값이 0이 아닌 경우 A로 이동, 0인 경우 점프하지 않고 다음 코드 실행. 비교된 값이 있어야 하므로 앞에 CMP가 먼저 실행되어야 함. EAX: 산술, 논리 연산을 수행. 함수의 반환값이 이 레지스터에 저장. 호출 함수의 성공 또는 실패 여부를 쉽게 파악할 수 있으며 반환값을 쉽게 얻어올 수 있음. 리틀 엔디언: 데이터 저장을 위해 메모리에 바이트를 저장하는데, 이 바이트를 저장하는 배열 ..

OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP + OPCODE EX) 00400000EB03 필요 개념 정리 ASPack 패킹: PUSHAD → 복호화 코드 실행 → POPAD → Return 0C → OEP 값 PUSH → Return으로 OEP 주소로 이동 ASPack 언패킹하는 법-하드웨어 BP를 이용하여 언패킹하는 법 -RET C를 찾아 OEP를 찾는 법 PUSHAD: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 순으로 레지스터의 값을 스택에 저장 레지스터들의 값을 보관해야 할 때 사용 POPAD: PUSHAD 명령어로 스택에 보관해 놓은 레지스터 정보를 다시 이용할 때 사용 RET(RETN): CALL을 통해 호출된 함수에서..

StolenByte를 구하시오 Ex) 75156A0068352040 필요 개념 정리 StolenByte: 패킹된 바이너리를 언패킹할 때의 과정을 방해하기 위한 방법으로, 프로그램의 일부 바이트를 별도의 영역에서 실행되게 하여 OEP를 다른 위치로 가장하고 덤프를 쉽게 하지 못하도록 구현한 기법.따라서 OEP를 찾아서 덤프를 떠서 언팩했다고 생각하고 실행하려고 하면 실행되지 않는 것이다. OEP의 옵코드 몇 바이트가 JMP 직전에 있었기 때문에 OEP로 코드 조각이 오지 못했고, 예를 들어 함수의 인자값에 대한 push 옵코드였다면 함수의 인자가 충분하지 않으므로 실행에서 에러가 나게 되는 것이다. 이런 경우 소위 StolenByte라고 하는 옵코드를 찾아서 실행코드 부분에 복원을 해준 다음 언팩 해주어야..
보호되어 있는 글입니다.
보호되어 있는 글입니다.

stack.c (타겟) /* This program has a buffer overflow vulnerability. */ #include #include #include int foo(char *str) { char buffer[100]; /* The following statement has a buffer overflow problem */ strcpy(buffer, str); return 1; } int main(int argc, char **argv) { char str[400]; FILE *badfile; badfile = fopen("badfile", "r"); fread(str, sizeof(char), 300, badfile); foo(str); printf("Returned Proper..

소스코드를 확인하면 입력받은 값을 별다른 필터링 없이 cmd 명령어 ping으로 넣는다. 개발자가 원한 건 저기에 IP 주소를 넣는 것이겠지만 이를 우회해야 한다. 명령어를 한 줄에 두 번 사용하려면 세미콜론(:)으로 구분해주면 된다. ls . 으로 현재 디렉토리에 있는 파일을 확인해 보자. flag.py가 있다. 이 파일의 데이터를 읽어들이는 cat 명령어를 사용하면 볼 수 있을 것이다. 8.8.8.8; cat flag.py