목록전체 글 (370)
cgy12306
ImagePrc 파일을 열어 패킹이 되어있는지 ExeInfo 툴로 확인한다. 패킹은 안되어 있다. 파일을 열어보자. 이 함수를 실행시키면 그림 그리는 파일이 실행되는 것을 확인할 수 있다. 쭈욱 실행하다 보면 이 지점에서 계속 반복문이 돌아가는 것을 볼 수 있다. ECX에 있는 값을 DL에 넣고 EAX+ECX에 있는 값을 BL에 담아서 BL과 DL이 같지 않으면 점프하는 것을 볼 수 있다. 즉 BL과 DL이 같아야 한다. 여기서 의심을 해보면 그림을 그렸을 때 비교가 되어지는 원본 값과 우리가 그린 값을 비교하는 것으로 보인다. ECX의 주소를 직접 찾아가서 값을 확인해보자. 다시 EAX+ECX의 값을 찾아가서 값을 확인해보자. EAX+ECX 부분을 쭈욱 내려봤을 때 중간 중간에 00이라는 값이 들어가 ..
OEP를 찾아라. OEP는 Original Entry Point의 줄임말이다. 패킹을 하게 되면 entry point도 변하게 된다. 그래서 진짜 entry poin인 OEP를 찾아야 한다. 패킹은 원본 프로그램을 보호하기 위해 암호화나 압축, 특정 연산으로 코드를 변조시키는 것이다. 이 지점은 반복문이 계속 돌아가는 지점인데 반복문이 한번씩 바뀔 때마다 값이 바뀌게 된다. 409000에서 004094EE까지 값이 변하는걸 볼 수 있다. 이 지점 또한 바뀌게 된다. 406000에서 00409000까지 변하게 된다. 여기서 PE 구조를 생각해 봐야한다. PE 파일에서 섹션은 PE가 가상 주소 공간에 로드된 다음 실제 내용을 담고 있는 블록들이다. 섹션의 .text영역은 코드를 담고있는 영역이고, .data..
ReadMe.txt 파일을 열어보자. 해당 시리얼에 맞는 이름을 찾으라는 문제이다. string으로 문자열을 검색해보자 이 부분이 main함수 부분이라는 것을 알 수 있다. EDX에 입력한 값 중에 한 바이트가 들어가게 된다. 근데 ECX와 EDX랑 XOR 연산을 한다. XOR 연산의 결과 값을 첫번째 오퍼랜드에 넣어준다. 그러면 EDX에 41과 10을 XOR 연산한 것이 들어가게 된다. 두번째 반복을 돌때에는 입력받은 두번째 바이트가 저장된 EDX와 ECX를 XOR 연산한다. 두번째 때에는 ECX에는 20이 들어가 있다. 세번째 때에는 ECX에는 30이 들어가 있다. 네번째 때에는 ECX에는 다시 10이 들어가 있다. 그렇게 쭉쭉 하다 보면 반복문을 탈출하게 된다. 반복문을 탈출하고나서 Serial을 ..
Easy CrackMe 파일을 열어보자. 값을 입력하는 메시지 창이 뜬다. 메인함수 부분이라고 추정되는 곳에 BreakPoint를 걸어준다. 61과 ESP+5와 비교하는 부분을 볼 수 있다. ESP+5에는 b가 들어가 있는 것을 볼수 있고, ESP+5 값은 0x61(a) 이어야 한다. 해당 부분을 넘어가면 4010C3에서 어떤 함수를 호출하는걸 볼 수 있다. 그곳을 따라가보면 반복문을 볼 수 있다. 이 지점에서 세번째로 입력받은 값이 5와 비교한다. 우리가 알아낸 두번째 글자는 a, 세번째 글자는 5이어야 하니까 값을 위와 같이 넣어주고 다시 실행해보자. 다시 아까 반복문에서 네번째 글자와 y를 비교한다. 같으면 넘어가고 틀리면 점프하게 된다. 현재 ?a5y??????까지 알아 냈다. 계속 실행하다보면 ..

ID : vampire PW : music world 이제는 모든 인자를 비워준다. 그래도 일단은 디버깅을 해보자. 메인 함수가 끝나기전에 leave에 breakpoint를 걸어주고 x/10000s $esp로 스택에 담긴 모든 스트링을 확인한다. 마지막 부분에 경로가 들어가 있는 것을 볼 수 있다. 그러면 이전에 파일명에 쉘코드를 담아서 실행했던 방법을 그대로 해보자. 디렉토리를 만들어준다. 이 경로를 이용해 파일을 디버깅한다. 함수가 끝나기 전에 breakpoint를 걸어주고 A가 44개 + \xbf\xbf\xbf\xbf를 넣어주는 명령어를 실행시킨다. 아까 스택 마지막 부분에 경로가 들어갔던 자리에 그대로 들어가있다. A와 bfbfbfbf가 들어가 있는 것을 볼 수 있다. 적당히 bfffff18을 선..

ID : troll PW : aspirin 파일을 확인해 보자. 두번째 인자에 46번째가 \xff가 들어가면 안된다고 한다. 우리는 대부분 bfff~~~~를 써왔다. 그러면 nop을 엄청 크게 해주면 bffe~~~~까지 가게 될것이다. 10만개정도 nop를 줬다. 적당히 bffe7470을 선택하자. 쉘 획득에 성공했다. 비밀번호는 music world이다.

ID : orge PW : timewalker 파일을 확인해 보자. darkelf에서는 인자를 여러개 넘길 수 있었지만 이제는 인자를 두개밖에 넘기지 못한다. 그러면 파일명(argv[0], 첫번째 인자)에 어떠한 작업을 해야할 듯 하다. ./파일명 `python -c 'print "A"*44+"\xbf\xbf\xbf\xbf" leave에 breakpoint를 걸고 실행해 보자. 버퍼와 인자를 비워주지만 파일명은 그대로 남아 있는 것을 볼 수 있다. 그러면 파일명을 쉘 코드로 바꿔주면 내부에서 쉘 코드가 실행될 것 같다. \xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1..

reversing.kr에서 ransomware파일을 다운 받았다. run.exe 파일을 실행시켜 보자. 올바른 key를 입력하면 해독이 되고, 다른 key를 입력하게 되면 파일의 내용이 더 손상된다는 내용이다. 파일을 ollydbg로 분석해봤더니 메인 함수를 찾기가 어려워서 인터넷에 검색을 했다. 모든 파일을 분석할 때에는 그 파일이 패킹이 돼있는지 확인을 하는 것이 기본이라고 한다. 패킹이란 파일코드에다가 압축을 거는 기법이다. 압축된 파일 그 자체도 실행 파일이다. Peid 툴이나 Exeinfope 툴을 이용해서 파일이 패킹이 되어있는지 확인할 수 있다. upx로 패킹이 되어있는 것을 확인할 수 있고, 언패킹 하는 방법은 upx.exe를 설치하고 -d 옵션으로 언패킹 할 수 있다. 언패킹이 완료되었다..

1. integer divisibility(가분성) 0이 아닌 정수 a와 정수가 있다. a가 b를 나눴을 때 b=ak가 되는 k가 존재한다면 Divisibility라고 한다. a|b로 표기한다. Divisibility는 숫자를 작은 원소(primes)로 분해할 때 중요하다. a, b, c 정수가 있다. a가 0이 아닐 때 a|0과 a|a는 성립한다. 또한 1|b의 모든 값은 b이다. a|b이고 b|c이면 a|c이다. a|b이고 a|c이면, 모든 정수 s와 t에 대한 a(sb+tc)이 있다 2. Prime(소수) 만약 p>1이고 1과 자기 자신으로만 나눠진다면 p는 prime이다. 단순히 n>1이면 n은 prime이 아닌 composite이다. 모든 양의 정수는 소수의 결과이다. 소수에 대한 요인은 독특하..

6. What is the computer account name? system 레지스트리에서 ControlSet001\ComputerName\ComputerName을 보면 N-1A9ODN6ZXK4LQ라는 것을 알 수 있다. 7. What is the primary domain name? system 레지스트리에서 Microsoft\Windows NT\CurrentVersion\Winlogon에 가면 DefaultDomainName이 N-1A9ODN6ZXK4LQ인 것을 볼 수 있다. 컴퓨터 이름과 도메인 이름이 같다????뭐지?? primary domain은 주요 계정(메인계정)이라고 한다. 그러면 제일 많이 로그인한 계정을 찾으면 될 것 같다. Logon Count를 보면 Mr.Evil이 횟수가 15번..