리버스 엔지니어링 : 정말 좋은 점은 무엇입니까? [닫은]


15

무고한 / 초보자 질문이 있습니다.

  • 리버스 엔지니어링의 장점은 무엇입니까?
  • 프로그래머로서 리버스 엔지니어링 기술을 배워야합니까?
  • 숙련 된 프로그래머에게는 어떤 이점이 있습니까?

5
이 질문은 분해 유형의 역 엔지니어링 에 관한 것입니까, 아니면 다른 것입니까? ( "어셈블리"및 "낮은 수준"태그에 있기 때문에.)
Izkata

답변:


14

리버스 엔지니어링이란 무엇입니까?

리버스 엔지니어링은 크래킹 및 해킹 (일련 번호 보호 또는 비밀번호 프롬프트 제거)뿐만 아니라 다른 소프트웨어가 수행 할 수있는 바이러스 또는 기적을 이해하는 데 주로 사용됩니다. 때로는 소스를 얻지 못한 프로그램에서 버그를 찾아 패치하는 것이 유용한 기술입니다.

프로그래머로서 리버스 엔지니어링 기술을 배워야합니까?

예, 어셈블러를 배우고 알맞은 디버거를 사용하십시오. 그것은 금속에 더 가까운 저수준의 것을 이해함으로써 더 나은 개발자가 될 것입니다.

리버스 엔지니어링에 익숙한 프로그래머의 이점은 무엇입니까?

당신은 좋은 해커 / 크래커가 될 것입니다. 다른 안티 바이러스 제작자를 위해 일할 수도 있습니다. 개인적인 예로 : 오라클 연결을 설정하는 동안 발생하는 오류를 추적하기 위해 소프트웨어를 리버스 엔지니어링했습니다. 아무도 그 문제를 해결할 수 없었기 때문에 명성을 얻었습니다.

또한 @ johannes의 의견 을 인용하고 싶습니다 .

나는 "나쁜"크래킹으로 제한하지 않습니다. 디스 어셈블 링은 컴파일러가 화를 냈는지 (보통 코드이지만), 더 많은 sysadmin 관점에서 응용 프로그램이 실패하는 위치를 보는 것이 흥미로울 수 있는지 알아내는 데 유용 할 수 있습니다


8
나는 "나쁜"크래킹으로 제한하지 않습니다. 유용 할 수 분해하는이 응용 프로그램이 실패 어디에 있는지 흥미로운 일이 될 수 있습니다보기의 많은 시스템 관리자의 관점에서, 컴파일러는 미친 (보통은 코드가 있지만,의)를 갔다 여부를 파악하기 위해, ...
요하네스

@johannes : 네, 그렇습니다. 내 대답에 쓸 수 있습니까?
팔콘

확실히, 당신이 원하는대로, 난 그것에 대해 저작권을 주장하지 않습니다 ;-)
johannes

7
미안하지만 이것은 절대적으로 끔찍한 대답입니다. 리버스 엔지니어링은 절대로하지 "주로를 위해 ... 균열 및 해킹"정의, 및 시스템과 거래를하지 않는 사람은 이데올로기 적 관점에서 그것을 도입하여 끼치고 수행되고 프로그램.
Chuu

1
나는 그것이 아직 언급되지 않았다고 생각하지만, 자신이 아닌 소프트웨어 에서이 작업을 수행하거나 다른 사람에게 말하지 않으면 조심하십시오. 거의 모든 상용 EULA는 리버스 엔지니어링을 금지합니다. 당신은 누군가의 IP 변호사에게 사본과 함께 중지하고 원하는 편지를 받고 싶지 않습니다.
Bratch

25

나는 Falcon의 대답을 좋아 하지만 오래된 지루한 비즈니스 응용 프로그램에서 리버스 엔지니어링을 사용하면 골치 아픈 문제에서 벗어날 수 있다고 덧붙이고 싶습니다.

직장에서는 새로운 유지 관리가 필요없는 타사 시스템과 데이터 통합을 수행 할 때 많은 작업을 수행하므로 중단해야 할 위치와 중단되지 않은 위치를 알 수 있습니다.

또한 소스 코드가 포함되어 있지 않은 경우 구매하는 타사 구성 요소에 대해 리버스 엔지니어를 사용하여 코드 품질을 확인합니다 (물론 특정 제약 조건이 있음).

나의 진짜 요점은 : 리버스 엔지니어링은 단일 기술이나 언어에 국한되지 않고 "블랙 박스"의 내부를 배우는 프로세스 입니다. 의존하는 코드가 있지만 신뢰할 수 없거나 신뢰할 수없는 경우에는 반드시 코드를 들여다보고 해당 코드의 기능을 확인해야합니다.


심지어 타사 시스템의 SQL 저장 프로 시저를 검토하여 때로는 요구 사항을 올바르게 채우는 지 확인하기 위해 임대합니다.
Machado

3
+1. 대기업의 대규모 판매 소프트웨어 제품조차도 때때로 약간의 블랙 박스가 될 수 있습니다.
RalphChapin

13

리버스 엔지니어링의 드롭 데드 보링 측면도 있습니다. 이것은 현재 회사에 여전히 사용되고있는 약간의 코드 나 프로그램이 있지만 아무도 그것에 대해 아무 것도 주장하지 않습니다. 따라서 프로젝트를 시작하고 문서화하고 테스트를 작성하며 프로젝트를 시작하기 전에 수행해야하는 모든 엔지니어링 작업을 수행합니다. 이미 작성된 소프트웨어 ( "역 엔지니어링")에 대해이 작업을 수행합니다.

코드가 있으면 훨씬 쉬워 지지만 여전히 기술적으로 리버스 엔지니어링입니다. 레거시 프로젝트에 대해 이야기 할 때 비즈니스 미팅에서 크게 나타나는 용어 ​​중 하나입니다.


+1, 특히 나에게 해당됩니다. 레거시 시스템에 단일 기술 문서가없는 일부 은행에서 근무했습니다.
Machado

7

리버스 엔지니어링의 비즈니스 가치를 확장하기 위해 우리가 만나는 신규 고객의 절반 이상이 기존 시스템 / 앱 (항상 프로덕션에 신경 쓰지 않아도 됨)을 가지고 있지만 이전 소프트웨어 개발 공급 업체와의 관계가 미쳤습니다.

사례의 약 30 %에서 고객은 시스템의 소스를 전혀 얻지 못했으며 많은 경우 실제 비즈니스 프로세스, 규칙 및 지식의 많은 부분이 코드에 잠겨 있습니다.

그리고 이전 벤더들이 명백한 악성 프로그램을 입수 한 경우, 바이너리를 난독 처리하고, 고객을 무기한으로 유인하기 위해 코드를 타임 록하는 등의 경우가있었습니다.

따라서 리버스 엔지니어링은 종종 절망적이며 불에 타 버린 고객과의 새로운 계약의 출발점이며 기존 코드에서 잊어 버린 지식을 추출하는 '비즈니스 크리티컬'성공 요인이 될 수 있습니다.


2

역 엔지니어링을위한 기술과 디버깅을위한 기술은 완전히 동일하다고 주장합니다. 환상적인 디버거라면 환상적인 역 엔지니어이고 그 반대도 마찬가지입니다.


1

때로는 내가 이해하는 한 일부 부품 / 소프트웨어를 상호 운용하는 데 사용됩니다. 이상한 인터페이스, 구현 버그 등

그러나 내가 이해 한 바에 따르면, 그것은 매우 미끄러운 주제이므로 이미 복잡한 소프트웨어 개발 법칙은 리버스 엔지니어링으로 극단으로 가져갑니다.


1

리버스 엔지니어링을 사용하면 작업을 최소화하는 코드를 재사용 할 수 있습니다. 예를 들어 Symfony2에서는 일반 MySQL로 만든 데이터베이스를 변환하여 교리 형식으로 변환 할 수 있으며 이는 Symfony에서 가능한 리버스 엔지니어링 프로세스입니다. .... 및 리버스 엔지니어링을 사용하면 코드가 '2D로 표시'되는 것을 볼 수 있습니다


0

나는 내 경험에서 실제 사례를 보여주고 있습니다.

우리 회사가 다른 회사의 프로젝트를 인수하면 프로젝트에 약 반 년 동안 우리는 하위 프로젝트에 코드가 없다는 것을 깨달았습니다. 이전 회사에 코드를 제공하도록 요청했을 때, 그들은 하위 프로젝트의 코드를 찾을 수 없다고 정중하게 대답했습니다. 하위 프로젝트에서 무언가를 변경하고 싶었 기 때문에 코드가 필요했습니다.

하위 프로젝트 를 리버스 엔지니어링 해야했습니다 .

먼저 어셈블리를 디 컴파일했습니다 (예, .NET 프로젝트). 디 컴파일 된 어셈블리의 결과는 로컬 변수의 이름과 복잡한 제어 구조가없는 부드럽고 혼란스러운 코드입니다. 컴파일은 디 컴파일 할 수없는 중요한 정보를 삭제하기 때문입니다.

그런 다음 해당 코드를 변경할 위치를 찾으려고 노력했습니다. 이를 위해 코드를 능률화하여보다 간결하게 작동합니다. 또한 변수의 이름을 동작에서 추측했습니다. 내가하는 일을 알아낼 때까지 코드를 여러 번 살펴 보았습니다.

나는 모든 것을 리버스 엔지니어링하지 않았고, 우리가 바꿔야 할 부분 만 바 꾸었습니다. 약 200 줄의 VB 코드는 그렇게 나쁘지 않았습니다. 작업 시간은 약 5 일이 걸렸습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.