예전에 간단한 디버거를 제작해 본적이 있습니다. 윈도우에서는 Win32 Debug API 라는게 있어서 해당 API를 사용해서 기본적인 디버거는 구현할수 있습니다. 그때 구현했던 기능들이 Break Point, Step Into, Step Over, Step Out, 역어셈, Module 정보보기, PE 정보 보기 정도 였던것 같습니다. 메모리, 모듈, 로그정보등은 해당 API를 사용해서 구현하면 되고, Break Point는 해당 주소에 0xCC 삽입하면 됩니다. 물론 기존의 Opcode는 따로 저장해 두어야 복원이 가능하겠죠? Step Into는 CPU에서 플래그 레지스터의 관련 비트를 셋해주면 되는것으로 기억이 나네요. 역어셈 기능은 일단 역어셈 방법을 익힌뒤에 PE분석을 통해 얻어진 프로그램의 엔트리 포인트에서 부터 code 영역만큼 역어셈을 해주면 됩니다.
그때 참고했던 자료가 < DEBUGGING APPLICATIONS For Microsoft .NET And Microsoft WINDOWS >에서 디버거 제작관련 파트에서 기본적인 디버거 제작을 익혔고, 역어셈 관련자료는 어셈러브나 Window 구조 관련 서적에 나와있으니 그걸로 개념을 잡은뒤 < Intel® 64 and IA-32 Architectures Software Developer’s Manual > 2권 부록에던가 Opcode 테이블이 있으니 그걸보고 역어셈 기능을 구현 하시면 됩니다. PE 분석관련 자료는 찾아보면 많이 있을겁니다. 나머지 부가적인 기능을 좀더 추가 하실려면 관련된 자료를 더 찾아보셔야 겠죠.
저는 디버거를 만들어 보았지만 크랙쪽에 해본적이 없어서 디버거를 구현해보는것이 크랙 스킬을 늘리는데 도움이 되는지는 잘 모르겠군요.
윈도우용 디버거는...
예전에 간단한 디버거를 제작해 본적이 있습니다. 윈도우에서는 Win32 Debug API 라는게 있어서 해당 API를 사용해서 기본적인 디버거는 구현할수 있습니다. 그때 구현했던 기능들이 Break Point, Step Into, Step Over, Step Out, 역어셈, Module 정보보기, PE 정보 보기 정도 였던것 같습니다. 메모리, 모듈, 로그정보등은 해당 API를 사용해서 구현하면 되고, Break Point는 해당 주소에 0xCC 삽입하면 됩니다. 물론 기존의 Opcode는 따로 저장해 두어야 복원이 가능하겠죠? Step Into는 CPU에서 플래그 레지스터의 관련 비트를 셋해주면 되는것으로 기억이 나네요. 역어셈 기능은 일단 역어셈 방법을 익힌뒤에 PE분석을 통해 얻어진 프로그램의 엔트리 포인트에서 부터 code 영역만큼 역어셈을 해주면 됩니다.
그때 참고했던 자료가 < DEBUGGING APPLICATIONS For Microsoft .NET And Microsoft WINDOWS >에서 디버거 제작관련 파트에서 기본적인 디버거 제작을 익혔고, 역어셈 관련자료는 어셈러브나 Window 구조 관련 서적에 나와있으니 그걸로 개념을 잡은뒤 < Intel® 64 and IA-32 Architectures Software Developer’s Manual > 2권 부록에던가 Opcode 테이블이 있으니 그걸보고 역어셈 기능을 구현 하시면 됩니다. PE 분석관련 자료는 찾아보면 많이 있을겁니다. 나머지 부가적인 기능을 좀더 추가 하실려면 관련된 자료를 더 찾아보셔야 겠죠.
저는 디버거를 만들어 보았지만 크랙쪽에 해본적이 없어서 디버거를 구현해보는것이 크랙 스킬을 늘리는데 도움이 되는지는 잘 모르겠군요.
Just do it!
감사합니다
크랙쪽에 도움이 되는지는 저도 모르겠습니다 ^^;
그냥 올리디버거 사용하다가 문득 생각난건데 정말 자세히 설명해주셨네요 감사합니다~
댓글 달기