2013-03-01 3 views
6

dll을 C++ 코드로 변환하는 것이 불가능하므로 가능한 세부 정보를 수집하고 싶습니다. 내 dll이 아니므로 소스 코드가 없습니다. 어떤 프로그램을 사용해야합니까?DLL을 C++ 코드로 변환하는 방법은 무엇입니까?

+1

인기있는 바이너리 리버스 엔지니어링 툴은 IDA Pro입니다. 가장 기본적인 요구 사항을 충족하는 무료 버전이 있습니다. – datenwolf

+2

DLL의 기능을 이해하고 있습니까? 얼마나 큽니까? 원래 그 언어가 쓰여진 언어를 아십니까? 당신은 실제로 무엇을 성취하려고합니까? –

+1

태그로 "핵심 구문"을 추가했습니다. 그들을 찾아 봐. –

답변

12

잘 숙련 된 사용자라면 DLL을 분해하고 모든 기능을 이해할 수 있습니다. 이것은 상당한 시간이 걸리지 만, 그렇게하면 손으로 소스로 되돌릴 수 있습니다.

그렇지 않으면 Dependency Walker와 같은 도구를 사용하여 의존하는 DLL 및 함수와 함수를 가져 오는 것부터 시작할 수 있습니다. 거기에서 관심있는 기능을 찾고 IDA와 같은 디스어셈블러를 사용하여 그들이하는 일을 볼 수 있습니다.

+3

너무 많은 시간을 손에 든 어리석은 사람들을 제외하고는 아무도 * 모든 것을 뒤집을 수 없습니다. 당신은 항상 IDA와 같은 것을 가지고 관심있는 통화 경로를 따라갈 것입니다. 게다가 IDA 자체에서 수출을 볼 수 있습니다. 중개인이 필요 없습니다. +1 여전히 – 0xC0000022L

+2

누구나 IDA를 갖고 있거나 배우고 싶어하지 않습니다. 그래서 저는 Dependency Walker를 유용한 정보를 얻는 아주 간단한 방법으로 제안합니다. (물론 IDA에 능숙하다면 당연히 모든 것을 할 수 있습니다 :)) – nneonneo

1

PE 파일 뷰어가 필요합니다. 이렇게하면 DLL에서 내보내기를 알 수 있으며 .text 섹션의 데이터를 가져와 기계 코드를 볼 수 있습니다.

2

dumpbin 도구를 사용하여 내 보낸 기능 목록을 볼 수 있습니다. C++ 함수가 익스포트되면, mangling이라는 이름으로 매개 변수를 추론 할 수 있습니다.

Visual Studio에서 리소스보기 용 파일로 "열기"만하면 DLL에서 모든 리소스를 추출 할 수 있습니다. DLL이 COM 기반 DLL 인 경우 유형 라이브러리가 내부에 리소스로 포함될 가능성이 적습니다. 그리고 유형 라이브러리가 있다면 # import하여 공용 인터페이스의 헤더 파일을 재구성 할 수 있습니다.

그 정도면 충분합니다.

+1

나는 그 정도면 충분하다는 것에 동의하지 않습니다. 모든 시간/기술/노력에 따라 다릅니다. nneonneo의 대답을보십시오. – JBentley

관련 문제