Reversing

Reversing

Crackme #4 writeup

크랙미 4번 파일을 실행해보면 시리얼값을 찾아서 Registered를 눌러주면 될거같다 바로 올리디버거로 실행시켜봤다.올리디버거로 실행시킨 모습이다 일단 시리얼값을 비교해야 하기때문에 문자열 비교함수를 찾아본다 바로 vbastrcmp 함수가 보인다 저기다가 브레이크포인트를 설정하고 실행시켜보니 이렇게 바로 ECX에 시리얼값으로 보이는 숫자가 있다 바로 입력해주니 쉽게 풀린다 추가) 너무쉽게 풀려서 구글링을해보았더니 시간에 따라서 시리얼값이 달라진다고한다 GetPresentDate함수를 통해서 시간을 얻어낸다음에곱하고 더하는 연산을 통해서 시리얼값을 만든다고한다

Reversing

Crackme#3 writeup

일단 프로그램을 실행시키면 키파일이있는지 찾아본다하고 파일을 못찾았다고 나옵니다 올리디버거로 열어서 한번 보겠습니다일단 눈에띄는건 하단의 키파일을 찾았다는 메세지박스 호출함수랑 중간에 CreateFile함수가 눈에띄는데Createfile함수를 잘 살펴보면 답이나올꺼같은 예감구글링을 통해서 Createfile 함수에대해서 찾아본결과 CreateFile함수에 mode값이 OPEN_EXISTING으로 설정되어있는걸 확인할수있었는데 이 옵션은 파일또는 장치가 있는 경우에만 연다고한다우리는 키파일이없으니까 위에있는 CREATE_ALWAYS로 설정해야하는데 그러기위해선 여기 PUSH 3이라고 되어있는 값을 CREATE_ALWAYS값인 2로 바꾸어주면 될듯하다 이렇게 바꾸어 주고 실행해주면유효한 키파일이 아니라네다시..

Reversing

어셈블리 mov와 lea의 차이점

이번에 pwnable.kr의 bof문제를 풀어보면서 lea명령어를 처음접했는데 구글링하다보니까 mov와 lea의 차이점을 알게되서 메모하는겸 써본다 일단 mov나 lea나 값을 넣어준다는점에서 같은 명령어인데mov는 값을 전달해주고 lea는 주소를 전달해준다는점이다예를 들어보면 ebp=0x12345*ebp=100이라고 가정한후 mov eax, dword ptr ds:[ebp]는 eax에 100이라는 값이 들어가고lea eax, dword ptr ds:[ebp]를 하게될경우 eax에 0x12345주소가 들어가게된다

Reversing

PE File 정리 1

PE파일 종류: 실행 계열 exe, scr 드라이버 계열 sys,vxd 라이브러리 계열 dll, ocx, cpl, drv 오브젝트 파일 계열 obj 기본구조:DOS header부터 Section header까지 PE 헤더 그 밑의 Section들을 합쳐 PE 바디파일에서는 offset, 메모리에서는 VA로 위치표현 PE 헤더의 끝부분과 각 세션의 끝에는 NULL padding이 존재 VA와 RVA:VA는 가상메모리의 절대주소RVA는 상대주소 RVA + ImageBase = VA DOS Header:PE 헤더의 앞부분에 DOS EXE Header를 확장시킨 IMAGE_DOS_HEADER 구조체존재 IMAGE_DOS_HEADER 구조체 크기 : 40e_magic : DOS signature (4D5A = "..

Reversing

레나 튜토리얼 1 writeup

레나 튜토리얼 첫번째 파일을 실행 시켯을때의 모습이다 해석하면 라이센스가 만료되었으니 새로운 라이센스를 구입하라는 뜻이다이제 올리디버거로 열어서 분석해보자올리디버거로 실행하면 이런모습인데문자열 검색을통해서 한번 찾아보자문자열 검색을하면 이렇게 검색결과가 나오는데 처음 실행시켯을때 나온 문자열도 보이고 맨아래 성공했을시에 나오늘 문자열로보이는 문장도 보인다40120C주소로 가보자 이렇게 메세지박스호출함수가 있다문제는 이제 이 메세지박스를 실행시켜야한다는 건데어떻게 해야좋을지 생각을해보자코드들을 보고 고민해본결과지금내 수준에서는 40107B의 JNZ에서 점프주소를 401205로 바꿔주면 된다고생각했다점프주소를 바꾼결과음... 해석해보니 점프범위를 벗어났다고 JNZ LONG를 사용하란다 검색을해보니 JNZ S..

Reversing

crackme2 writeup

먼저 파일을 실행하면 이름과 시리얼을 입력하는 창이 나온다 아무단어를 넣고 Check버튼을 누르면 시리얼이 틀렷다는 팝업이 실행된다 올리디버거를 이용해서 파일을 열어보자 일단 이프로그램은 비주얼베이직으로 만들어졋고 파란색으로 동그라미친 부분이 비주얼 베이직엔진에서 메인함수를 호출하는 부분이다 먼저 문자열검색기능으로 아까 시리얼이틀렷다는 메세지를 찾아서 주소로 이동한다 시리얼이 틀렷을경우와 맞을경우를 구분하는 조건분기문이 있을것이니 좀만위로 올려서 찾아본다 403332 주소에서 찾아볼수있다 아래에 Congratulations! 라고 시리얼이 맞알을경우 출력되는 내용으로 추정되는 문자열이있고 TEST 명령어로 비교한뒤 참이면 JE 명령어로점프한다

Reversing

Crackme1 writeup

환경: window10 64x파일을 실행시키면하드디스크를 cd롬으로 인식되게 만들라는 내용이 나온다 401024, 401026주소에서 CMP명령어로 EAX와 ESI의 값을비교하고JE명령어도 참이면 40103D주소로 점프하고틀리면 401028주소를 실행한다 JE를JMP로 바꾸어 주고 F9를 누르면 정상적으로 하드디스크가 시디롬으로 인식되었다고 말하면서 끝난다

Reversing

스택

스택은 메모리의 한 부분이고 LIFO 방식으로 동작한다 LIFO란 (Last Input First Output) : 마지막에 들어간 데이터가 처음에 나오는 방식 스택은 PUSH와 POP 두 가지 동작 지원 PUSH : 데이터를 스택에 집어넣는 명령어 POP : 데이터를 스택에서 꺼내는 명령어 스택은 한 방향으로 만 데이터가 쌓인다 PUSH를 하면 스탯의 주소는 4바이트만큼 감소하면서 데이터가 들어가고 POP을 하면 스택의 데이터가 꺼내진 다음 주소가 4바이트만큼 증가한다 스택은 시작 주소에서부터 주소가 작아지는 방향으로 데이터가 쌓인다 이렇게 동작하는 이유는 스택 구조 위에 있는 데이터가 시스템운영에 중요한 역할을 하기 때문 프로그램의 스택의 위치는 스택 포인터라고 불리는 ESP 레지스터에 지정되어있다 ..

h0ch1
'Reversing' 카테고리의 글 목록