본문 바로가기

Reversing3

함수, 배열 | 스택프레임 1. 함수, 배열 실습 내용 정리 1-1. 함수 call PRINT → PRINT 함수로 이동 1-2. 덧셈 함수 call ADD→ ADD 함수로 이동 1-3. 작은 값 구하는 함수 call MIN→ MIN 함수로 이동 어셈블리 JL: Operand 1 < Operand 2 일 때 점프 MIN 함수) eax와 ebx 비교 후, eax가 더 작으면 LABEL_1로 점프. eax가 더 크다면 ebx 값을 ecx에 옮긴 후, LABEL_2로 점프. 최종적으로 ecx 값 출력 1-4. 함수 안의 함수 call ADD → ADD 함수로 이동 → PRINT 함수로 이동 함수가 호출될 때마다 스택에 쌓이고, 함수가 끝나면 스택이 비워지면서 또 다른 함수로 스택이 채워진다. 1-5. 배열 WORD: 2byte DWOR.. 2021. 10. 18.
어셈블리, 레지스터 정리 1. 어셈블리어 PUSH: 스택에 값을 저장 POP: 스택에서 값을 뺌 CALL: 지정된 주소의 함수 호출 INC: 값을 1 증가 DEC: 값을 1 감소 JMP: 지정된 주소로 점프 CMP: 주어진 두 값을 비교 JE: 조건 분기(같으면 점프) JNE: 조건 분기(같지 않으면 점프) MOV: 앞 오퍼랜드에 뒤 오퍼랜드의 값을 저장 LEA: 앞 오퍼랜드에 뒤 오퍼랜드의 주소 값을 저장 ADD: 두 개의 오퍼랜드를 더해서 앞의 오퍼랜드에 저장 SUB: 앞 오퍼랜드에서 뒤 오퍼랜드를 뺀 다음 앞의 오퍼랜드에 저장 2. 레지스터란? : CPU 내에서 자료를 보관하는 빠른 기억 장소로, 변수와 같은 역할로 메모리에서 연산을 할 때 사용 32bit 기준 EAX: 사칙연산 등 산술 연산 용도로 사용한다. 함수의 반환.. 2021. 10. 11.
abex' crackme #1 ※ 공부 기록용이라 설명이 친절하지 않음 OllyDbg로 열어본다. 00401000~0040100E PUSH 4번 후, USER32를 호출한다. 처음 봤던 메시지 박스의 내용이 적혀있다. [PUSH], [CALL] 00401013~00401018 PUSH 1번 후, KERNEL32를 호출한다. 두 번째로 봤던 메시지 박스 내용이 보인다. [PUSH], [CALL] 0040101D~0040101E ESI에 1을 더하고 EAX에 1을 뺀다. [INC], [DEC] 0040101F 00401021로 이동한다. [JMP] 00401021~00401023 ESI에 1을 두 번 더하고, EAX에 1을 뺀다. [INC], [DEC] 00401024 EAX와 ESI를 비교한다. [CMP] 00401026 조건문이 같으.. 2021. 1. 18.