본문 바로가기

해킹/리버스 엔지니어링

공부 시작 처음부터 다시 공부 시작했습니다. ㅋ 더보기
리버싱 처음부터 다시 공부해야겠습니다. 제목대로 처음부터 다시 공부해야겠습니다. 지금 당장은 아니구요. 조금 시간이 넉넉하다 싶을 때 다시 처음부터 쌓아가겠습니다. 더보기
코드엔진 basic RCE L16 풀이 이름이 CodeEngn일때 Serial을 구하라네요. 많이 본 문제 형식이죠? 별다른 패킹은 되어있지않으니 바로 진행하겠습니다. 프로그램은 이런식으로 만들어졌군요, 문자열들을 보니 Good Job이라는 문자열이 눈에 띄네요 저기로 가겠습니다. 그리고 분기를 결정하는 cmp문에 BP를 걸고 실행해주면 됩니다. 이제 저정도만 봐도 답이 유추가 가능하겠죠? 더보기
코드엔진 Basic RCE L15 ( 레지스터 확인2 ) 안녕하세요 오늘은 15번을 풀 차례입니다. 올리디버거를 키면 게임이 꺼지는바람에 포스팅하기가 상당히 귀찮네요 -_- 문제입니다. 왠지 전 문제와 비슷한 냄새가 나죠? PEID로 패킹이 되어있나 확인해봅시다. 별다른 패킹이 되어있지 않네요. 그럼 바로 올리디버거로 가겠습니다. 우선 단서가 될만한 것들을 찾아봅시다. 일단 텍스트부터 보도록합시다. 어..? 바로 단서가 될 부분이 보이네요. 올ㅋ 저기로 클릭해줍시다. 그리고 저 cmp문에 BP를 걸어줍니다. 왜 걸었냐고 물어보신다면 저 cmp문이 아래 성공과 실패를 결정하는 비교문이기때문입니다. 저 cmp문에 BP를 걸고 비교하는 변수들의 값을 확인해본다면 답을 알 수 있겠죠. cmp가 비교하는 변수들의 값은 올리디버거 창 하단에 친절하게 알려줍니다. 그럼 두.. 더보기
코드엔진 basic RCE L14 ( 레지스터 확인 ) 9월의 첫글입니다. 8월달엔 포스팅을 별로 안했는데 이제 초심으로 돌아가 열심히 해야겠습니다. 그럼 문제입니다. 코드엔진일때 시리얼을 구하라고 하네요. 이름이 코드엔진일때이니 이 문제는 name에 따라 시리얼이 정해지는 알고리즘이 존재하나봅니다. 그럼 PEID로 패킹이 되어있나 확인해보겠습니다. UPX 패킹이 되어있네요. UPX 패킹은 다 할줄 아실거라 믿고 넘어가겠습니다. 우선 프로그램을 살펴보겠습니다. 이렇게 name과 serial을 대충 넣어보면 저런 메세지창을 나오게 하네요. 메세지창을 띄우는 함수는 MessageBoxA인데 사용하는 함수들 중 MessageBoxA를 찾아봅시다. 찾았으면 더블클릭해 그 위치로 가봅시다. 오 잘 찾아온것같네요. 하지만 name에 따라 serial이 정해지는 프로그램.. 더보기
코드엔진 basic RCE L13 풀이 ( .NET Reflector 사용 ) 안녕하세요 방학 동안 열심히 논 김씨임돠입니다...ㅎ... 오늘은 L13번을 풀이해보겠습니다. 문제입니다. 우선 PEID로 정보를 얻겠습니다. C# 으로 작성된것을 알수있습니다. 그런데 C#으로 작성된 프로그램은 몇몇 디컴파일러 프로그램을 사용해 완벽하게 코드를 복원할 수 있습니다. 우선 우리가 쓸 디컴파일러는 유명한 .NET Reflector 입니다. http://shop.reflector.net/download(체험판 30일) 프로그램을 사용하여 문제 파일을 열어봅시다. 저도 이문제를 통해 처음 써보는 툴이기 때문에 자세하게는 설명을 못하겠고 소스를 추출하는 기능을 사용하겠습니다. 추출이 완료되면 저렇게 폴더처럼 나올텐데 저기서 블럭한 파일에 들어가봅시다. 그럼 소스를 볼 수 있습니다. 그런데.. 전.. 더보기
코드엔진 basic RCE L12 (헥스 에디터 변경) 드디어 방학했습니다! 그러니 12번을 풀어보도록 하죠. 문제 처음봤을땐 이게 무슨소리지.. 했었는데 몇번 읽어보니 대충 감이 오더군요. 일단 Key 값을 찾아봅시다. 음.. 지금까지 꾸준히 따라오셨다면 코드를 안읽어봐도 감이 올겁니다. 저 망할 ASCII 코드가 왠지 키값인것같다... 근데.. 낚시입니다....ㅠㅠ 저는 낚여서 저걸로 시간보냈습니다. 그냥 코드 읽을걸.. 저 네모친 부분이 보이십니까? EAX랑 7A2896BF 를 비교하네요. 7A2896BF는 16진수고 10진수로 변환하면 2049480383 가 됩니다. 그럼 문제에서 성공메세지 대신 키값이 출력되도록 하라고 하니 헥스에디터로 바꿔줍시다. 제가 사용한 헥스에디터는 http://mh-nexus.de/en/downloads.php?produc.. 더보기
코드엔진 basic RCE L11 (StolenByte 복습) 이 문제를 풀어볼 때 약간 당황했었는데 이 문제 L09번이랑 같은 문제더군요 -_- 문제입니다. 왠지 친숙해 보이죠? 파일을 열어보면 낯이 익은걸 확인할 수 있습니다. StolenByte 찾는 법은 http://kimsee.tistory.com/41 에 포스팅을 해놨으니 여기로 가시고 이번에는 복습만 하겠습니다. 코드까지 똑같으니 StolenByte는 무엇인지 짐작 가능하죠? 그러면 진짜 프로그램 코드로 찾아가 OEP를 확인해봅시다. 위 NOP들로 채워진거 보이시죠? 저 NOP들이 본래 코드들이 있어야 하는 자리인데 패커가 의도적으로 빼돌린 것이죠 그러니 진짜 OEP는 00401000가 됩니다. 그럼 답이 나왔네요 지적하실 부분 있으면 지적해주세요. 더보기
코드엔진 basic RCE L10 풀이 (ASPack 언패킹) 드디어 반을 끝냈네요! 속도는 굼벵이보다 느린 것같지만 이해해 주시면 감사하겠습니다. 문제입니다. ASPack 으로 패킹되었다고 알려주네요. 그렇다면 언패킹하는 방법을 알아야되는데 방법은 의외로 간단합니다. 올리로 열어준 뒤 Ctrl + F 를 눌러 RETN 0c 를 검색해줍시다. RETN 0c가 검색되면 그 2줄 아래있는 RETN에 BP를 걸고 실행시켜 이동하면 새로운 코드가 보입니다. 하지만 여기서 끝난 것이 아니라 한 가지 작업이 더 필요합니다. 작업이래봤자 거창한건 아니고 Ctrl + A 를 눌러 Analyse code를 실행시켜주면 진정한 본래 코드가 나타나게됩니다. 조금 달라졌다는걸 느끼시나요? 이상태를 ollydump를 사용해 덤프하고 loadPE를 사용하면 ASPack 언패킹은 완료가 됩니.. 더보기
코드엔진 basic RCE L09 풀이 (StolenByte 구하기) 정말 오랫만에 전공 포스팅이네요.. 오늘은 L09번을 풀어보겠습니다. Stolen Byte를 구하라고 하네요. Stolen Byte는 패커가 패킹을 할 때 파일의 바이트를 훔쳐 언패킹을 방해하는데 그 훔쳐진 바이트를 말합니다. 그럼 문제를 풀어보겠습니다. UPX 로 패킹된 것을 확인할 수 있습니다. 이정도는 뭐 껌이지.. 생각하면서 언패킹을 해봅시다. 음? 에러가 나네요. 저도 처음 문제풀 때 언패킹을 잘못했나? 하고 여러번 해봤는데 계속 같은 결과가 나왔습니다. 그럼 왜 이럴까요? 이유는 프로그램의 일부분이 훔쳐졌기 때문입니다. 그럼 확인해봅시다. 이 프로그램의 OEP 위에 12바이트가 NOP로 존재하고 있는걸 확인할 수 있습니다. 그럼 훔쳐진 바이트들을 찾아봐야하는데 찾기위해서는 UPX 패킹된 파일에.. 더보기