본문 바로가기

분류 전체보기

PEview Patch 평소에 많은 사람들이 쓰는 PE뷰어인 이 PEView에는 한 가지 단점이 있다. 바로 PE구조를 보면서 헥스 에디터와 같은 것들로 값 변경이 불가능하다는 부분이다. PEView가 멍청하게 파일을 읽기 모드로 열어버려서 쓰기가 안되는 것이다. 평소에 이런 불편함을 가지고 계속 사용하다가 분명히 이렇게 되는 이유는 프로그램을 읽어 들일 때 읽기 모드라서 이런 것이라고 생각하고 직접 올리디버거로 열어서 바이너리를 패치해 주기로 하였다. 먼저 이 PEView는 아무런 패킹이 되어 있지가 않다. 안티디버깅도 없고 해서 분석하기가 굉장히 수월 했었다. 일단 올리디버거로 열어서 CreateFile함수를 호출하는 부분에 브레이크포인트를 걸어 주었다. 여기서 바로 볼 수 있는 것은 바로 CreateFile함수의 Shar.. 더보기
HackIM 2016 Reversing - donfos 이번에는 500점 짜리 문제입니다. 500점 짜리인 만큼 난이도가 꽤 있었습니다. 역시 64비트 바이너리인데 IDA로 열자마자 입에서 욕이 나왔었습니다... 열어보면 IDA의 그래프 개형이 이렇게 생겼기 때문입니다. 처음에는 열고 나서 다시 닫았습니다. 생긴 것이 꼭 핀툴을 써서 해야 할 것처럼 생겨서 이 문제는 접어야 겠다 하고 닫았었는데 시간이 좀 지나고 다시 분석해보자 하고 열어서 좀 보니까 뭔가 될 것도 같아서 분석을 시작했습니다. 일단 헥스레이로 보면 엄청난 양의 반복문이 중첩으로 존재합니다. 프로그램을 난독화 시켜 놓은 것인지는 모르겠는데 v37을 기준으로 그 값에 어떠한 값이 들어 있냐에 따라 프로그램 흐름이 달라지는 방식입니다. 그래서 분석을 해 보면 먼저 이 부분에서 입력을 받는데 반복문.. 더보기
HackIM 2016 Reversing - Pesudorandom 이번에는 300점짜리 두 번째 문제입니다. 역시 64비트고 IDA로 먼저 뜯어보면 rand값으로 sleep을 하고 함수 내에서 막 연산한 값을 가지고 오고 난 뒤에 값을 입력받습니다. 입력받은 값을 다시 sub_400ea0함수에서 체크하고 md5해시를 구하며 막 반복문을 진행하다가 특정 값이 되면 빠져 나오고 해시를 비교한 뒤에 flag를 출력해 줍니다. 체크 함수를 보면 복잡해 보이지만 어차피 올바른 입력값은 하나 이므로 저 함수를 그대로 가져와서 브루트포싱을 해 주면 입력해야 하는 값을 구할 수 있습니다. 디버깅을 통해 sub_400ea0함수에 함께 넣어주는 값들만 찾아서 브루트포싱 해 주면 됩니다.이런 식으로 소스를 짜서 값들을 모두 구해 내면 됩니다. 앞의 몇몇 값을 구하다 보면 규칙성이 있는 것.. 더보기
HackIM 2016 Reversing - ZorroPub 100점짜리 맨 먼저 푼 문제입니다. 64비트 바이너리고, IDA로 뜯어서 보면 처음에 루프를 돌 카운트를 입력하고 루프를 돌면서 다시 값을 입력하는데 그 값들은 모두 seed와 xor하는데 쓰입니다. 그리고 그 seed는 srand로 rand값에 쓰이게 됩니다. 그리고 rand로 나온 값들의 md5해시를 구하여 비교하고, 맞다면 flag를 출력해줍니다. 따라서 파이썬으로 브루트포싱을 돌려주면 md5에 맞는 seed를 구할 수 있습니다. 위 소스를 파이썬으로 돌려주면 플래그를 얻을 수 있습니다. Key : nullcon{nu11c0n_s4yz_x0r1n6_1s_4m4z1ng} 더보기
2016년 1월 31일 일요일 정말 오랜만에 쓰는 일기이다. 일기를 안쓰는동안 졸업식도 하고, 2학년 반배정 나오고 짐옮기고, HackIM CTF하고 일들이 정말 많았다. 먼저 1월 29일에 디미고 3학년 선배들이 졸업식을 하고 빠이빠이 하였다. 내가 2학년이라는 것도 믿기지 않고 내 밑으로 후배가 들어온다는 것도 믿기지가 않는다. 눈 깜짝하면 그새 고삼이 되어 있을 것만 같다. 그리고 이제 보충이 드디어 완전히 끝나서 집에 오고 이제 학교는 3월 1일에 가면 된다. 그 때까지 열심히 IT공부 빡시게 해야겠다. 1월 30일 새벽 1시 반부터 HackIM CTF를 했다. 48시간동안 진행되는 거라 굉장히 힘들었다. 이 중에서 내가 푼 문제는 리버싱 1, 2, 3, 크립토 1 이렇게 네 문제이다. 리버싱은 남은 한 문제를 마저 풀지 못한.. 더보기
PE Viewer 개발 4일차 오늘은 Dos Stub출력 부분과 IMAGE_NT_HEADER를 약간만 분석하도록 만들었다. Dos Stub은 사이즈를 계산해서 hex로만 출력하는 기능을 넣었고, IMAGE_NT_HEADER 중에서 Signature, IMAGE_FILE_HEADER 부분을 만들었다. 각각 읽어 들이고, Machine이나 Time Stamp Data, Characteristics 같은 멤버 변수들을 분석하는 부분을 넣어야 한다. 그리고 출력을 할 때에 지금까지는 직접 문자열을 하드코딩으로 직접 다 넣었는데 이제는%s를 잘 사용하여 알아서 거리를 계산하여 보기 좋게 출력하도록 만들어야겠다. Dos_Stub정렬안된 IMAGE_NT_HEADER Signature정렬안된 IMAGE_NT_HEADER IMAGE_FILE_HEAD.. 더보기
2016년 1월 26일 화요일 오랜만에 쓰는 일기이다. 요즘은 리버싱 핵심원리 보면서 예전에 공부하다가 어려워서 접었던 API후킹을 다시 공부하고 있는 중이다. 확실히 API들을 좀 더 알고, PE에 대해 더 익숙해 지니까 이해가 잘 되는 것 같다. 그리고 오랜만에 다시 alloca를 잡았는데 진짜 될 것 같은데 생각한 방법대로 끝까지 구현을 해 보면 결국에는 eip가 변조가 안된다... 너무 답답하다. 빨리 이 문제를 풀고 이제부터는 pwnable.kr보다는 대회 문제들을 주로 풀어 보려고 했는데 자꾸만 마지막 alloca가 발목을 잡는다.. 너무 답답하다. 얼른 풀고 다른 공부들도 더 진행해야겠다. 그리고 w3chall이라는 사이트의 문제들을 조금 풀어봤는데 꽤 재밌는 문제들이 많은 것 같다. 리버싱도 재밌는 것들이 좀 있고, 포.. 더보기
[Rookiss] syscall - 200pt 보호되어 있는 글입니다. 더보기
Crack short RSA 이번에 RSA를 공부해 볼 일이 생겨서 Short RSA를 깨는 방법에 대해서 찾아봤다.시작하기 전에 용어에 대해서 잠깐만 짚고 가자면 p, q : 두 소수 n : p * q phi : (p - 1) * (q - 1) e : phi와 서로소인 수 d : e * d % phi가 1인 값 m : 원문 c : 암호문이렇게 된다. m에서 c로 암호화 하는 과정은 c = m ** e % n이고 c에서 m으로 복호화하는 과정은 m = c ** e % n이 된다.여기서 우리는 먼저 n과 e가 주어져야 한다. 그리고 n을 소인수분해하여 두 소수 p, q를 구해내야 한다. 이 과정이 되지 않으면 절대 다음 과정으로 넘어갈 수 없다.p, q를 구하는 과정은 대체적으로 먼저 n의 제곱근을 구한 후에 그 제곱근 근처의 소수들.. 더보기
[Rookiss] fix - 35pt 보호되어 있는 글입니다. 더보기