본문 바로가기

Study/Reversing14

키젠문제 풀이 키젠 문제란 원본 문제파일은 수정하지 않은 상태에서 분석만을 통해서 키 값들을 계산하거나 조합하는 문제이다.시리얼 키 문자열이 그대로 메모리상에 있어서 풀리는 문제도 있지만 이번에는 Key를 생성해내도록 하는것이 목표이다키젠 문제를 풀기위해 어셈블리어를 꼼꼼하게 알아볼 필요가 있다. 먼저 함수를 선언할때, if문, for문이 어셈블리코드에서 어떤 형태를 보이는지 알아보자fuc(1, 2) 라고 함수를 선언하게 된다면 두번째 파라미터를 넣고 그다음 첫번째 파라미터값을 넣은 뒤 call을 하게된다.push 2push 1call 004017E0두번째 값부터 넣는 이유는 메모리구조가 스택 형식이기 때문이다.스택은 LIFO(Last In First Out)구조로 나중에 들어온 값이 먼저 나가기 때문이다. 일반적인 .. 2015. 5. 18.
Unpack, Back To User mode upx로 패킹되어 있는 것을 올리디버거 덤프 플러그인을 사용하여 풀어 볼 수 있다.먼저 tuts4you.com 으로 가서 OllyDump.dll을 찾아 다운받고올리디버거 폴더의 Plugin 에 넣는다. 이제 upx로 압축되어 있는 문제파일인 CrackMe2.exe를 올리디버거로 열어보면코드가 압축되어 있다는 것을 올리디버거가 알려주고 더 분석할 것인지를 묻는다. 예(Y) 를 눌러 진행한 뒤 스크롤을 조금 내리면DB 00 으로 채워져있는 부분 위를 보면압축이 모두 풀려 메모리에 올라가 있는 초기상태인 OEP부분으로 가는 JMP문이 보인다. 그부분에 BreakPoint를 정해주고 실행을 하면, 이 주소값에서 한번 정지상태가 된다.이때 StepOver(F8)로 진행해주면 OEP의 위치로 이동한다. PUSH E.. 2015. 5. 18.
어셈블리 명령어 어셈블리 명령어 INC : 피연산자에 1을 더한다 결과에 따라 ZF, OF가 세트될 수 있다. DEC : 피연산자에 1을 뺀다 결과에 따라 ZF, OF, CF가 세트될 수 있다. ADD : Destination 에 Source 값을 더해서 Destination에 저장하는 명령이다 ex) ADD destination , source 결과에 따라 ZF, OF, CF가 세트될 수 있다. SUB : Destination 에 Source의 값을 빼서 Destination에 저장하는 명령이다. ex) SUB destination, source 결과에 따라 ZF, OF, CF가 세트될 수 있다. MUL : 부호 없는 al, ax eax의 값을 피연사자와 곱한다. 피연산자가 8비트이면 al과 곱해서 ax에 저장되고 1.. 2015. 5. 15.
CPU레지스터와 데이터타입 CPU는 메모리로부터 명령어를 가져와 어떤 명령어인지 해석하고 실행하는 동작을 한다. 메모리로부터 명령어를 가져왔을때 CPU내부에 레지스터라는 작은 고속의 메모리가 존재한다. 레지스터의 종료로는 범용 레지스터, 세그먼트 레지스터, 상태 플러그 레지스터, 명령 포인터 레지스터등이 있다. 범용레지스터 EAX 곱셈과 나눗셈 명령에서 자동으로 사용되고 함수의 리턴값이 저장되는 용도로 사용 EBX ESI나 EDI와 결합하여 인덱스에 사용된다 ECX 반복 명령어 사용시 반복 카운터로 사용된다. 반복할 횟수를 지정해 놓고 반복작업을 수행하게 된다. EDX EAX와 같이 씌며 부호확장 명령등에 쓰인다. ESI 데이터 복사나 조작시 Source Data 의 주소가 저장된다. ESI 레지스터가 가리키는 주소의 데이터를 E.. 2015. 5. 15.