리버싱(44)
-
리버스엔지니어링 문제 3
http://codeengn.com/challenges/basic/03 프로그램을 실행해보면 Regcode를 넣는 부분이 있습니다. 정확한 문자열을 넣으면 되는... 그런 프로그램인것 같네요. 문제 내용은 비교함수 이름을 찾는 것입니다. Text string으로 검색을 해보면 아래와 같은 부분을 발견할 수 있습니다. 키로 추측되는 값도 보이고 메시지들도 있네요. 비교 함수는 vbaStrCmp라는 것을 확인할 수 있습니다.
2015.03.23 -
리버스엔지니어링 문제 2
http://codeengn.com/challenges/basic/02 실행되지 않는 프로그램에서 패스워드를 찾는 문제입니다. 일단 실행해보려고하면 에러가 발생하면서 실행되지 않습니다. 파일포맷에 문제가 있다는 것을 짐작할 수 있습니다. hex 에디터로 열어봅니다.쭉 읽다보면 패스워드로 추측되는 값을 발견할 수 있습니다. JK3FJZh
2015.03.22 -
리버스엔지니어링 문제 1
http://codeengn.com/challenges/basic/01 파일을 받아 더블클릭하여 실행하면 Make me...가 나오고 다음으로 Nah... This is not a CD-ROM... 이 나옵니다. CD-ROM으로 인식시키기 위해 GetDriveTypeA의 리턴값을 바꿔야한다고합니다. 해당 파일의 어셈블리 부분입니다.밑에 2개의 분기문이 있고 OK, 부분을 출력해야 정답이 됩니다. 분기문을 보면 00401026부분 위에 CMP EAX, ESI가 있습니다. JE명령이기 때문에 ==일때 조건문을 실행합니다. 그럼 EAX와 ESI의 값이 같아야 한다는건데 브레이크 포인트를 걸고 진행해보면 해당 위치에 도달했을 시 EAX는 1이고 ESI는 3의 값을 가집니다. GetDriveTypeA를 호출하는 ..
2015.03.22 -
보안 취약점
1. 스택 오버플로우스택 오버플로우를 통한 공격은 대체로 악성 코드가 들어가 있는 함수의 포인터를 프로그램이 실행할 스택의 위치에 덮어씌움으로써 발생할 수 있습니다.예를 보면 다음과 같습니다.int counter;char string[8];float number; 와 같은 지역 변수를 정의했을 때 스택의 상태는 counterstring[0]...string[7];numberreturn address처럼 되어있습니다. string 변수에 8이상의 값을 써 넣을 경우 스택은 counterstring[0]...string[7]string[8]?string[9]?string[10]?...처럼 변경됩니다. 여기서 봐야할 것은 함수가 끝난 후 반환주소를 통해 반환을 해야하는데 그곳에 string[9]?의 값이 들어..
2015.03.16 -
무분기 로직
컴파일러가 하이 레벨 언어를 로우 레벨 언어로 바꿀 때 파이프라인을 사용함에 따르는 분기에 의한 손실을 최소화 하기 위해 무분기 로직을 만들어냅니다. 파이프 라인의 끝에 다음 명령을 채울 때 분기가 있을 경우 어떤 분기된 명령들 중 하나를 쓸 수 밖에 없는데 이 때 예측이 틀리면 파이프라인을 비우고 새로 명령을 채워야 합니다. 그렇기 때문에 컴파일러는 분기가 있는 하이 레벨 언어를 분기가 없는 로우 레벨 언어로 바꾸는 작업을 합니다. - 산술 구현mov eax, [ebp-10]and eax, 0x00001000neg eaxsbb eax, eaxneg eaxret 위 작업은 분기문을 사용하지 않는데 어셈블리에 익숙하지 않다면 무슨 작업을 하는지 파악하기 어렵습니다. eax와 0x00001000의 값을 an..
2015.03.09 -
api 리버싱 3 - RtlGetElementGenericTable
RtlGetElementGenericTable의 내용입니다. MOV EBP, DWORD PTR SS : [EBP+8]MOV EDX, DWORD PTR DS : [ECX+14]MOV EAX, DWORD PTR DS : [ECX+C]- EBP로 파라미터를 ECX에 넣고 14와 C오프셋의 값으로 각각 초기화하고 있습니다. PUSH EBXPUSH ESI- EBX와 ESI의 값을 저장합니다. MOV ESI, DWORD PTR [ECX+10]PUSH EDIMOV EDI, DWORD PTR [EBP+C]- 10오프셋의 값을 ESI에 넣고 EDI값을 저장합니다. 그리고 EDI에 C 오프셋의 값을 넣습니다. EBP+8이 첫 번째 파라미터이니 +C는 두 번째 파라미터입니다. LEA EBX, DWORD PTR [EDI+1]..
2015.03.07