본문 바로가기

리버싱/Lena Tutorial

(7)
level 9 이번장에는 비주얼베이직 시리얼키를 찾는 것이 목표이다. 비주얼베이직 뿐만 아니라 자바, 파이썬과 같은 고급언어들은 디컴파일을 해야한다. 비주얼베이직에서 주로 사용하는 함수들이다. __vbaVarTstEq __vbaVarTstNe __vbaVarCmpEq __vbaStrCmp __vbaStrComp __vbaStrCompVar 그럼 해당함수를 사용하는 모든 주소에 BP를 설치해 분석을 진행할 수 있는데 F2로 BP를 걸면 안된다. 왜냐하면 여기가 실행이 됐을 때 BP를 거는게 F2다. 하지만 __vbaVarTstEq는 주소를 참조하는 곳이므로 다른 방법으로 BP를 걸어야 한다. 해당 문자열이 올바른 시리얼인지 판별하려면 아까 걸어둔 BP를 제거해야 한다. (Alt + B)를 눌러서 BP상태 창을 띄운 뒤 ..
level 8 프로그램 왼쪽 상단에 "? - Register"를 클릭하면 등록창이 나오는데 아무 값이나 입력하고 "OK"버튼을 누르면 "Invalid Key!"라는 문자열로 분석을 시작하자 즉, CALL ArtGem.00434C00에서 어떤 일이 발생한다는 것을 알 수 있다 "0043856E"번지안에는 register key를 체크하는 함수가 있다는 것으로 알 수 있다.
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 : 실질적으..