분류 전체보기 (48) 썸네일형 리스트형 level 8 프로그램 왼쪽 상단에 "? - Register"를 클릭하면 등록창이 나오는데 아무 값이나 입력하고 "OK"버튼을 누르면 "Invalid Key!"라는 문자열로 분석을 시작하자 즉, CALL ArtGem.00434C00에서 어떤 일이 발생한다는 것을 알 수 있다 "0043856E"번지안에는 register key를 체크하는 함수가 있다는 것으로 알 수 있다. 컴퓨터구조2 컴퓨터 구조의 접근방법 레지스터를 디자인하자 레지스터를 디자인의 핵심 1. 레지스터를 몇 비트로 구성할 것인가? 2. 몇 개 정도로 레지스터를 구성할 것인가? 3. 레지스터 각각을 무슨 용도로 사용할 것인가? 명령어 구조 및 명령어를 디자인하자 저장소 : 레지스터 피연산자1, 2 : 레지스터 or 숫자 명령어에 따라 조합이 달라짐 "레지스터 r1에 있는 값과 숫자 7을 더해서 레지스터 r2에 저장하라"는 의미 연산 대상이 되는 피연산자는 숫자가 될 수도 있고, 레지스터가 될 수도 있다. r2 = r1 + r3 -> 레지스터 r1와 r3에 있는 값을 더해서 r2에 저장하라 r2 = r1 + 4 -> 레지스터 r1에 저장된 값과 숫자 4를 더해서 r2에 저장하라 저장된 데이터가 숫자를 표현하는 것인지, 레지.. 컴퓨터구조1 컴퓨터 시스템의 주요 구성요소 컴퓨터 하드웨어의 구성 CPU 중앙처리장치 연산을 담당 메인 메모리 램(RAM)이라는 저장장치로 구성되는 메인 메모리는 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역 프로그램 실행을 위해 존재하는 메모리 입출력 버스(Input/Output Bus) 컴퓨터를 구성하는 구성요소 사이에서 데이터를 주고 받기 위해 사용되는 경로 - 어드레서 버스 : 메모리의 몇번지에 있는 데이터를 가져갈 것인지에 대한 주소 전송 - 데이터 버스 : 데이터 전송 - 컨트롤 버스 : CPU가 원하는 바를 메모리에 전달할 때 사용(메모리가 원하는 바를 CPU에 전송)된다. CPU의 구성요소 ALU(Arithmetic Logic Unit) - 연산을 담당한다. - ALU가 처리하는 기본적인 연산.. level 5 "F7"을 눌러서 안으로 들어가면 4BD510번지로 이동하는데, 다시 "F8"을 누르면서 분석을 진행한다. 소프트웨어 BP, 하드웨어 BP 비교 정리 소프트웨어 BP : 올리디버거로 보면 빨강색이지만 가상메모리를 열어서 직접 보면 0xCC로 패치된다. "F9"를 누르면 0xCC로 패치된 곳에서 멈춘다. 0xCC를 어셈블리어로 바꾸면 INT 3이다. INT 3이라는 명령어를 실행코드 앞단에다가 설정함으로써 CPU가 이 명령을 실행할 때, 핸들러가 제어권을 디버거에게 넘겨주는 원리(명령어의 처음 1Byte를 INT 3으로 변경하는 형태로 구현) 오직 RAM에서만 실행할 수 있다. * INT : CPU가 예외처리를 하기 위해 인터럽트를 발생한다. * INT 3 : BP 인터럽트 하드웨어 BP : CPU내에서 .. level 4 우선 PixtopianBook을 설치한다. 위와 같은 과정은 잘못된 루틴으로 빠진 것인데, 안티 디버깅 기법이다. 위와 같은 상황을 해결하기 위해선 예외적인 처리를 해줘야한다. 이 문제에선 패치해야 하는 문자열이 3개가 있다. 1. 이 프로그램에 있는 "UNREGISTERED VERSION"을 "REGISTERED VERSION"으로 바꿔서 사용버전처럼 모양을 바꿔볼 것이다. 2. 3. "Unregistered version v1.07"을 볼 수 있는데 원래라면 "Help - Register Now"를 눌러서 등록을 해야 상용 프로그램으로 사용할 수 있다. 문자열 수정은 끝났다. 이번엔 2개의 기능 제한을 풀어볼 것이다. 1. Pixtopia는 유저 프로그램이고 나머지 DLL들은 시스템에서 불러와주는 프.. level 3 1. EAX가 0이 되는 일은 절대로 없기 때문에 수정하지 않으면 JE조건문에서 분기가 일어나지 않는다. 하지만 분기가 일어나지 않으면 nag가 발생하기 때문에 수정이 필요하다. 2. 수정하는 방법은 다양하다. JE를 JMP로 수정하거나, ZF를 1로 수정하거나, "MessageBoxA" 함수 부분을 NOP로 채우거나, 401000번지로 되어있는 EP를 401024로 변경하면 프로그램이 401024번지로부터 시작하기에 nag창이 열리지 않는다. 프로그램을 실행하면 nag창들이 나타나지 않는다. PE구조를 알면 풀 수 있는 방법도 있으므로 추후 내용을 추가하도록 하겠습니다 level 2 level 1과 같은 파일로 분석하지만 "Keyfile.dat"을 생성해서 근본적으로 해결하는 방법으로 진행할 것이다. 먼저 존재하는 "Keyfile.dat"를 삭제하고 임의로 "Keyfile.dat"를 생성하고 "abcd"를 입력했다. 처음 "Keyfile.dat"에 "abcd" 4개의 문자를 입력했기 때문에 값이 4가 나온다. 1. "CMP AL,0" 명령어는 61과 0을 비교한다고 해석할 수 있다(여기서 0은 NULL) 2. "CMP AL, 47" 명령에서 47은 "G"라는 것을 아스키코드표를 보면 알 수 있고, 만약 AL값이 "G"이면 JNZ조건문에서 JMP를 하지 않고 "INC ESI"로 넘어간다. 3. "CMP ESI,8" 명령어가 있다는 것을 확인할 수 있고 이 명령어로 "INC ESI" 명.. level 1 위 사진을 보면 읽기 모드이고 OPEN_EXISTING으로 열었다는 사실을 알 수 있다. 그리고 경로도 따로 지정되어 있지 않고 파일 이름만 정해져 있으면 현재 실행 중인 프로그램이 있는 폴더 내에서 찾는다. 함수를 실행하는데 여러개의 인자가 필요하므로 인자 값을 전달한다. 현재는 JNZ조건문이 수행되도록 하기 위한 2가지 방법이 있다. 1 2 hFile : 정상적으로 파일을 열었을 때 핸들링한 것을 반환하는데 그 핸들을 통해 파일을 제어할 수 있다. hFile에는 핸들에 대한 ID(숫자 정보)가 들어간다. Buffer : 어디에 이 데이터를 쓸 것이지를 세팅해준다. BytesToRead : 몇바이트나 읽을 것인지를 저장한다. 사진에 46은 16진수 70은 10진수를 의미 pBytesRead : 실질적으.. 이전 1 ··· 3 4 5 6 다음