반응형

전체 글 229

진짜 간단한 리버싱의 기초

리버싱은 사실상이렇다 책이있다 그책안에 내용을이해하는것이다 물론 그책은 우리가 읽지않은책이다 그책을 읽기위해 우리는 문자를 읽을수있었야한다 책안에 내용들은 여러용도들로 나누어서 분해되어서 내용이 저장되있고 서로 서로 맞물려서 작동한다 이제 옆에있는 책안에 글자를읽을수있다 하지만그책은 그림책이었다 그림도 함꼐읽을수있다 그림은 책에 내용을 더쉽고 어떻게진행되는지 알려준다 총정리하자면 리버싱은 책읽는것와 비슷하다 하지만 그책안에 문자들은 각각규칙있고 우리가 최소한그규칙을 알면 읽기편하다 그림들로 스토리의구성을 알수있다 문자들로 그안에 내용을 저장해서 보여줄수있다

오버플로우레지스터에대하여

오버플로우 플래그가 on 되는 바이너리/정수 연산도 두개다 : 1. 두 수의 합으로 부호 비트가 on 되었을때, "오버플러우" 플래그가 on된다. 0100 + 0100 = 1000 (overflow flag is turned on) 2. 두 수의 합으로 부호 비트가 off 되었을때, "오버플로우" 플래그가 on 된다. 1000 + 1000 = 0000 (overflow flag is turned on) 다른 경우, 오버플로우 플래그는 off 됨. * 0100 + 0001 = 0101 (overflow flag is turned off) * 0110 + 1001 = 1111 (overflow flag is turned off) * 1000 + 0001 = 1001 (overflow flag is turne..

플래그(상태) 레지스터

플래그 기호이름의미 Z 제로 플래그 연산 결과가 0일 경우에 참이 된다. C 캐리 플래그 부호 없는 숫자의 연산 결과가 비트 범위를 넘어섰을 때 참이 된다. A 보조 캐리 플래그 연산 결과 하위 니블(4bits)에서 비트 범위를 넘어섰을 때 참이 된다. 이진화 십진법(BCD) 연산에 사용된다. V / O / W 오버플로 플래그 부호 있는 숫자의 연산 결과가 비트 범위를 넘어섰을 때 참이 된다. N / S 네거티브 플래그, 사인 플래그 연산 결과가 음수일 때 참이 된다. I / E 인터럽트 플래그 이 플래그가 참일 경우에만 인터럽트 요구를 받아들인다. 일반적으로 관리자 모드에서만 값을 변경 할 수 있다. P 패리티 플래그 연산 결과에서 1로된 비트의 수가 짝수일 경우 참이 된다. D 디렉션 플래그 문자열 ..

레지스터

레지스터는 다시 목적에 따라서 범용 레지스터, 세그먼트 레지스터, 플래그 레지스터, 인스트럭션 포인터로 구성된다. 범용 레지스터는 논리 연산, 수리 연산에 사용되는 피연산자, 주소를 계산하는데 사용되는 피연산자, 그리고 메모리 포인터가 저장되는 레지스터 세그먼트 레지스터는 code segment, data segment, stack segment 를 가리키는 주소가 들어있는 레지스터 플래그 레지스터는 프로그램의 현재 상태나 조건 등을 검사하는데 사용되는 플래그들이 있는 레지스터이다. 인스트럭셕 포인터는 다음에 수행해야 하는 명령이 있는 메모리 상에 주소가 들어가 있는 레지스터 이다. 위 의 그림은 일반적 시스템의 프로그램 레지스터 구성이다. 위의 그림은 범용 레지스터의 구성이다. 그림을 보면 알겠지만 전..

세그먼트 레지스터

어셈블리 코드를 보다보면 DS:[EAX], SS:DWORD PTR[EBP-4] 뭐 대강 이런식으로 DS:, CS:, SS: 이런 부분들을 자주 볼수있다. 이것들의 정체는 세그먼트 레지스터로 16비트인데 페이징이 없던시절, 메모리 영역 관리/분리 등을 위해서 사용되었다. 먼저 real mode 상에서는 주소지정이 세그먼트:오프셋 방식으로 이루어진다. 이 말은, CS:0x1234 이런식으로 메모리 주소가 표현된다는 것인데 여기서 세그먼트 레지스터는 16비트이므로 65536 개의 세그먼트 영역이 존재할 수 있다. 한 세그먼트는 16바이트(4비트공간)의 크기를 갖는다. 즉 CS 가 0xAAAA 라면 선형주소에 더해지는 값은 0xAAAA0 이 된다. 뭔가 계산이 깔끔하지않고 더럽지만 아무튼 이렇다. 세그먼트값을 ..

레나튜토리얼 1번풀이

메세지를보니 jne로 다른걸해야하나보나 일단적으로 f2기능으로 bp를해보자 일단적으로 맞는것같다 일단 eax값을바꾸고하니 새값이뜬다 일단적으로 keyfile.dat을만들어보자 만든이유는 그저 위에 keyfile.dat을 생성하는걸보고 아마 이걸읽는가가설은새운것이다 다시실행하니 안맞는다고한다 이부분이 메세지띄우기전 조건문이다 jne전에 bp를써서알아보자 Eax는 1이다 test는 and 연산이니 jnz not zero이니 음 0이아니다라 힌트가있을까 일단 여기를가보자 가는 단축키는 crlt+g이다 음 이해하기어렵다 걍 jne를 je를바꾸고끝내죠 이렇게 jmp화해서 패치로끝내자 구조는 아직힘들다 jmp 0x0040121D 마지막건 이걸로해야한다

dnspy 간단 사용법

Debug용 단축키 설명 단축키기능 F5 Start Debugging Ctr + F5 Start without debugging F9 BreakPoint Ctr + Shift + F5 Restart Alt + Num * 현재 작동중인 위치로 이동 F10 Step Over F11 Step Into Shift + F11 Step Out Ctr + Shift + F9 Delect All BreakPoint Ctr + Alt + P Attach to Process Ctr + Alt + C View Call Stack Ctr + Alt + H View Threads Ctr + Alt + U View Modules Ctr + Alt + Z View Processes Ctr + 6 View Memory 1 Alt +..

반응형