본문 바로가기

분류 전체보기

(43)
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 : 실질적으..