Reversing(11)
-
[리버싱-기초]IA-32 레지스터
CPU 레지스터란? CPU 내부에 존재하는 다목적 저장공간입니다. 우리가 일반적으로 알고 있는 RAM과는 다릅니다. CPU가 RAM에 접근하려면 물리적으로 접근해야해서 시간이 오래걸립니다. 하지만 레지스터는 CPU 내부에 존재하기 때문에 빠르게 접근할 수 있습니다. IA-32 레지스터 IA-32레지스터는 인텔 아키텍쳐 32비트 기반 레지스터입니다. 범용 레지스터 말 그래도 범용적으로 사용되는 레지스터입니다. IA-32 기준 각 각의 범용 레지스터들의 크기는 32비트(4바이트)입니다. 대체적으로 상수/주소 등을 저장할 때 사용되며 특정 어셈블리 명령어에서는 특정 레지스터를 조작하기도 합니다. 아래 4개의 레지스터는 주로 산술연산(and, sub, xor, or 등) 명령어에서 상수/변수 값의 저장 용도로 ..
2022.11.30 -
[CodeEngn]basic09
CodeEngn 9번 풀이입니다. Challenges : Basic 09 Author : abex Korean : StolenByte를 구하시오 Ex) 75156A0068352040 English : Find the StolenByte Ex) 75156A0068352040 StolenByte를 구하는 문제입니다. StolenByte : 훔쳐진 코드로 코드 일부분을 OEP로 점프하기 전에 PUSH합니다. StolenByte는 주로 패커에서 자주 보입니다. 그리고 프로그램을 덤프 할 때 StolenByte를 복구하지 않으면 프로그램이 정상적으로 작동 안 할 수 있습니다. 프로그램을 실행 시켜보겠습니다. 이런 식으로 나오는 군요 그럼 PEiD로 패킹이 되어있는지 확인해봅시다. UPX로 패킹이 되어있군요. 그럼..
2018.04.08 -
[CodeEngn]basic 08
코드엔진 basic 08번 풀이입니다. OEP를 구하는 문제이군요. 그렇다면 이 프로그램은 패킹이 되어있다고 볼 수 있습니다. PEiD로 확인해보겠습니다. UPX로 패킹되어있군요. 올리디버거로 열어보겠습니다. 앞에서부터 쭉 해오던 패커를 언패킹하는 거니 바로 풀겠습니다. 이렇게 찾으시면 저 점프문에서 점프하는 주소가 정답입니다. 인증해보겠습니다. 성공입니다. 감사합니다.
2018.01.11 -
[CodeEngn]basic 07
코드엔진 07번 풀이입니다. 문제가 c드라이브 이름이 codeengn일 경우 생성된 시리얼을 찾으면 되나 봅니다. 그럼 c드라이브 이름을 codeengn으로 바꾸고 시작하겠습니다. 이제 올리디버거로 열어보겠습니다. 일단 한 번 실행시켜 보겠습니다. 이런 식으로 입력을 하니 시리얼이 다르다고 뜨네요. 그럼 밑으로 내리다 보면 많은 문자열이 보이는 곳이 있습니다. 밑에는 실패나 성공을 했을 때 뜨는 문구도 있습니다. 그리고 중간에 아까 입력했던 asdf라는 문자열도 있군요. 그렇다면 저 부근에서 문자열 비교가 일어난다는 걸 추측 할 수 있습니다. 추측이 맞는지 확인 해봅시다. 성공, 실패 여부를 확인하는 곳 앞에는 JE분기문이 있습니다. 이 분기문은 ZF를 보고 판단하여 분기하게 됩니다. 그렇다면 저 부분에..
2018.01.10 -
[CodeEngn]basic 06
코드엔진 baisc 06번 풀이 입니다. 문제가 언팩을 한 후에 시리얼을 찾아서 인증하는게 문제인가 봅니다. 언팩을 하려면 어떤 패커로 압축되어 있는지 확인해봅시다. PEiD로 열어봤습니다. UPX로 패킹이 되어있군요. UPX패커라면 지난번에 풀었던 5번과 같은 패커로 이루어져있습니다. 그렇다면 바로 올리디버거로 열어서 언팩을 진행해보겠습니다. 올리디버거로 열은 뒤 POPAD를 찾고 그 밑에서 JMP을 찾았습니다. 그러면 JMP로 따라가는 저 주소 값이 정답의 절반이겠군요 지금까지 정답은 ; 00401360Serial입니다. Serial 키를 찾으러 가봅시다. 지난번과 같은 방법으로 언팩해주신 후에 올리덤프로 저장해주시면 되겠습니다. 2018/01/05 - [CodeEngn] - [CodeEngn]bas..
2018.01.07 -
[CodeEngn]basic 05
코드엔진 basic 05번 풀이입니다. 이번 문제는 프로그램에 등록키를 알아내는 문제인가 봅니다. 풀이에 앞서 이 프로그램은 패킹이 되어있습니다. 패킹에 관한 내용은 나중에 따로 다루겠습니다. 그래서 PEiD라는 프로그램으로 패커의 종류를 알아보겠습니다. UPX 0.89.6 - 1.02라는 패커로 패킹 되어있군요. 이 패커의 특징은 시작 부분에서 PUSHAD를 하고 OEP(Original Entry Point)로 들어가기 전에 POPAD를 한다. POPAD이후에 나오는 JMP의 주소 부분이 OEP 주소이다. PUSHAD : PUSHAD는 EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI의 레지스터 값을 스택으로 PUSH 합니다. POPAD : POPAD는 반대로 스택 값에 있는 EAX..
2018.01.05