저도 공부가 좀더 되고 나면 두번째 방법으로 해결해 봐야겠습니다.
빌더님!! 답변 감사합니다.
빌더 님이 쓰신 글 :
: 나이스 님이 쓰신 글 :
: : 빌더님께서 올려주신 글 잘 보았습니다.
: :
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=66145
: :
: : 디자인타임 패키지 디버깅하기 위해서 두번째 RAD XE2를 디버기 타겟으로 올렸는데요
: :
: : ESlipException
: : ESanctSocketException
: : ESanctSocketException
: :
: : 타겟 RAD XE2가 실행되면서 위와 같은 에러가 나타납니다. 이런 에러가 나타나는 이유가 무엇이고
: : 또 무시하고 사용해도 괜찮은 건지 궁금합니다. 빌더님. 바쁘실테지만 답변 부탁드립니다.
:
:
:
:
: 답변:
:
:
: IDE 개발환경과 통합해서 돌아가는 익스텐션 모듈을 구현하려면 Tools API의 사용이 필수적임에도 불구하고
: 언급되어있는 내용과 관련한 질문이 하나도 올라오지 않는 것을 보면... Tools API를 활용하고 있거나 또는...
: Tools API를 사용할줄 아는 사람들이 거의 없는 것 같네요.
:
: ESlipException 이.. 발생하는 이유는...
:
: 메인으로 실행되는 첫번째 RAD XE2 IDE 인스턴스에서 정품사용과 관련한 인증 처리과정이 무사히
: 통과 되었음에도 불구하고, 두번째 Debuggee 타겟으로 올라오는 RAD XE2 IDE가 이를 인식하지
: 못하고 인증과정을 중복 처리 하는 과정에서 오류로 보고 IDE가 던져주는 예외 입니다.
: ESanctSocketException도 첫번째 IDE가 Embarcadero사의 인증서버에 소켓을 열어두었는데
: 두번째 IDE가 포트를 다시 할당 받으려고 하는 것을 오류로 보고 IDE가 던져주는 예외 입니다.
:
:
: 유져들에 의해서 디버깅 환경이 이런 식으로 구성돼서 사용될 수 있다는 것도 고려했다면, 이 경우 예외를
: 던질 필요가 없는 건데, Embarcadero 사에서 IDE 개발환경을 설계할 때.. 세심하게 이런 부분도 신경 써서
: 제품을 디자인 했어야 했는데 그렇질 못한 거죠.
:
:
: 위와 같은 예외상황은 무시하고 사용해도 디버깅에는 전혀 지장이 없고요.
:
: 원천적으로 문제를 해결해서 사용하고자 한다면... 두가지 처리가 가능한데, 간략하게 방법만 말씀 드리죠.
:
:
: 첫번째 방법.
:
: RAD XE2 IDE의 실행파일인 BDS.EXE 를 패치하는 겁니다.
: 인증과 관련되는 부분이 쉽게 해킹되는 것을 막기 위해서 Embacadero 애들이... 관련 부분의 코드를
: 암호화 해놓았기 때문에... 패치하기 위해선 BDS.EXE 에서 어떤식으로 코드가 Unpack 되고 있는지
: BDS.EXE 파일을 디스어셈블링해서 어셈블리 수준에서 Unpack 알고리즘 부터 선행분석하는 게 필요합니다.
:
:
: 두번째 방법.
:
: 첫번째 방법이 번거롭다면... Tools API를 이용해서 BDS.EXE 가 사용하는 DefaultException 핸들러를
: 런타임 중에 후킹해서 해당 Exception을 무시하도록 해주는 익스텐션 모듈을 만들어 주면 됩니다.
: 익스텐션 모듈은 IDE의 어드레스 공간에서 같은 컨텍스트로 돌아가고, 익스텐션 모듈의 로드 시점에선
: IDE의 인증과 관련한 부분의 코드블럭이 이미 Unpack 된 이후이기 때문에 첫번째 방법과 같은 Unpack
: 알고리즘을 선행분석할 필요도 없고, IDE의 DefaultException 핸들러를 후킹해주면 되죠.