Liea
'② 공부/[Reversing]' 카테고리의 글 목록

② 공부/[Reversing]

② 공부/[Reversing]

[Reversing] x64dbg, x32dbg 디버깅 끝난 후 꺼짐현상 해결 방법

프로그램 디버거 끝난 후 꺼짐현상 해결 방법 설정 - 이벤트 - Exit Breakpoint* 체크하기

② 공부/[Reversing]

[리버싱] 간단한 Immunity debugger 사용법

프로그램 : immunity debugger - 아래 창은 CPU main창 1 : 불러온 실행파일의 디스어셈블 명령어 화면, 코드영역의 주소, 영역에 있는 OPCode 2 : 레지스터 목록, 레지스터에 들어가 있는 값 3 : 메모리에 들어가 있는 값 확인(메모리 덤프값) 4 : 스택에 들어가 있는 값 확인(지역변수, 함수프레임, 파라미터 값 등) à 프로그램 진행상태 분석에 쓰임 main - search for - all referenced text string //메모리에 올라가있는 각종 문자열과 상수값을 출력 해당 문자열 선택 후 우클릭으로 follow in disassembler 클릭시 해당 라인으로 이동함 main의 해당 줄 우클릭 - follow in dump - immediate consta..

② 공부/[Reversing]

[리버싱] 어셈블리어 (CMP와 JMP, JNZ, JE) 정리

1. 데이터 비교 CMP ex) CMP A B - A의 값과 B의 값을 비교한다. ++ 두 값이 같다면 ZF가 1로 설정됨, 다르면 ZF가 0으로 설정됨 ex) CMP EAX, ESI - EAX의 값과 ESI의 값을 비교해라. 2. 코드 이동(점프) JMP (Jump) ex) JMP A - 이번 문장에서 처리할 위치를 A로 이동한다. JNZ (Not Zero Jump) ex) JNZ A - 비교 값이 0이 아닌 경우 A로 이동한다. - 비교된 값이 0인 경우에는 점프하지 않고 다음코드를 실행한다. ++ 비교 된 값이 있어야 하므로 앞에 CMP가 먼저 실행된다. JE (Jump Equal) ex) JE A - 비교된 값이 같으면 해당 주소로 이동한다.

② 공부/[Reversing]

Redhat gdb 사용하기(2) _메모리 영역 확인

sample.c 코드파일 disass main 실행 내용

② 공부/[Reversing]

Redhat gdb 사용하기(1)

main: push1 %ebp//프롤로그, 메인함수 프레임 생성 movl %esp, %ebp//프롤로그, 메인함수 프레임 생성 subl $4, %esp//int c = 10; esp에서 4를 뺀 값을 esp에 넣음, esp가 main의 SFT 공간 위로 공간이 생김 movl $10, -4(%ebp)//ebp로부터 4칸 떨어진 위치에 10이라는 값을 넣음 pushl $2 pushl $1 call myfunc addl $8, %esp movl %eax, %eax movl %eax, -4(%ebp) xorl %eax, %eax jmp .L2 .L2: leave//에필로그 작업 함수 ret//에필로그 작업 함수 #gcc -S -o sample.a sample.c //컴파일시 어셈블리어로 컴파일 ㅇ GDB - 컴..

② 공부/[Reversing]

ESP, EBP, 프롤로그, 에필로그 이해하기 예제

sample.c #include int myfunc(int a, int b) { char buf[10] = "abcd"; return a + b; } int main(int argc, char *argv[])//caller { int c = 10; c = myfunc(1, 2);//callee return 0; } - 함수 호출 후에는 call 명령어가 오고, call (myfunc함수에 해당하는 이름)이 저장되어 있음 à push eip - main 함수의 myfunc() 호출 후 다음 문장은 return 0; 이므로, EIP값이 자동으로 return 0;을 하게끔 바뀌므로, 해당 값을 myfunc() 프레임의 RET공간에 저장함 - RET에 저장 후 jmp를 수행하면 함수 프롤로그가 실행되고, pus..

② 공부/[Reversing]

레지스터, 함수프레임(프롤로그, 에필로그) 간단 정리

ㅇ 레지스터 : CPU내에 있는 기억장소 ㄴ ESP(Stack Pointer) : 현재 스택의 위치가 어디인지 갖고 있음 ㄴ EIP(Instruction Pointer) : CPU가 실행될 명령어가 어디 있는지 해당 주소를 갖고 있음 (다음번 실행할 명령어의 위치) ㄴ EBP(Base Pointer) : 각 함수프레임의 기준 위치 (함수 호출이 끝나면 해당 위치로 리셋해줘야 함) ㄴ EAX~EDX : 산술, 논리 연산의 결과값을 임시로 보관하는 레지스터 EAX : 함수 리턴값 저장 ㄴ ESI, EDI : 반복, 문자열 ㄴ 상태 레지스터 : 비교, 점프, 반복 ㅇ 함수프레임, 프롤로그, 에필로그 프롤로그 : 함수가 호출되었을 때 RET, SFP 영역을 만드는 작업 에필로그 : 함수 실행 완료 시 함수가 할..

② 공부/[Reversing]

어셈블리어 정리

ㅇ 어셈블리어 ㄴ 어셈블리어 표현방식 : AT&T, Intel AT&T : 리눅스 - OPCODE 원본, 사본 - cp file1 file2 //file1을 file2로 복사함 Intel : 윈도우 - OPCODE 사본, 원본 ㄴ add, sub x = x + y; add x, y //x와 y를 더해서 x에 넣음 x = x - y; sub x, y //x - y를 해서 x에 넣음 ㄴ mov, lea, (movl, movw, movb) à 둘 다 복사 명령어지만, mov는 주소에 해당하는 값을 lea는 주소값을 가져옴 (movl, movw, movb) à 각 옮길 값의 사이즈를 4, 2, 1 바이트 만큼 복사함 x = y; mov x, y //y에 있는값을 x로 복사(이동) ***à 목적지가 어떤 피연사인..