문서화되지 않은 기능은 어떻게 발견됩니까? [닫은]


11


나는 항상 문서화되지 않은 / 비공개 API를 어떻게 찾 습니까?

예제 애플은 문서화 / 개인 API를, 역 재생 , 윈도우 폰 7 , Win32에서 커널 , 윈도우 API , 숨겨진 콜백 등, ...

해커는 개인 및 문서화되지 않은 기능에 대해 알아 내기 위해 어떤 도구를 사용합니까?

API 문서에서 일반적으로 설명되는 비밀을 드러내는 개인 API 및 리버스 엔지니어링 기술에 대한 사람들의 경험에 대한 정보는 어디에서 읽을 수 있습니까?

고마워,
A

답변:


7

내가 생각할 수있는 몇 가지 방법이 있습니다.

  1. 반사. 여기에는 객체를 가져 와서 메소드, 속성 등과 같은 자체 정보를 공개하도록 요청합니다. 언어에 따라 올바른 옵션을 사용하면 "공개"가 아닌 정보를 공개 할 수 있습니다.

  2. 디 컴파일. 바이너리를 만드는 데 사용 된 소스 (버전)가 재생성됩니다. 이것 역시 API의 비공개 부분을 드러 낼 수 있습니다.

"우연히"목록에 추가 할 수도 있습니다. 작동하는 미 스펠 전화 / 명령 또는 너무 많은 정보를 표시하는 도움말 화면.


2
실수로 목록에 추가 할 수 있습니다 . 예, 덜 빈번하지만 발생합니다.;) 특히 API 소유자가 사고를 유발할 때 발생합니다.

1
@ 피에르-좋은 지적.
ChrisF

또한 공유 라이브러리 서명. 이것은 디 컴파일과 관련되어 있지만 .dll / .dylib / .so 파일에서 내 보낸 함수는 공식 도구 (Visual Studio의 종속성 탐색기, Unixes의 nm)를 사용하여 찾아 볼 수 있습니다.
Chris Dolan

4

소프트웨어 개발에 사용하는 일반적인 도구 :)

일반적으로 문서화되지 않은 API 함수는 문서화되지 않고 실제로 숨겨진 비밀이 아닙니다.

미래의 증명 API를 설계하는 것은 어렵습니다. API에 쉽게 항목을 추가 할 수 있지만 일부 클라이언트를 손상시키지 않고는 무엇이든 제거하기가 어렵습니다. 따라서 API에 무언가를 추가 할 때 매우주의해야합니다. 그렇기 때문에 API에 몇 가지 추가 기능 (테스트, 개발, 빠른 해킹 등)이있을 수 있습니다.이 기능은 문서화되지 않았으며 다음 버전에서 작동하거나 작동하지 않을 수 있습니다.

컴파일러, 링커, 라이브러리 및 디버거의 작동 방식 (시스템 프로그래밍 기능)을 알면 이러한 문서화되지 않은 함수는 다소 쉽게 찾을 수 있습니다. 대상 아키텍처의 어셈블리 언어를 아는 것은 아프지 않습니다. IDE / 컴파일러가 작동하는 실행 파일을 빌드 할 수있는 경우 "수동으로"수행 할 수 있으며 해당 경로를 계속 주시하면 숨겨진 기능을 발견 할 수 있습니다. :)

유닉스 환경에서의 예 : printf 함수에 대한 문서 만 있고 다른 printf 와 같은 함수 가 있는지 알고 싶은 시나리오 . 생각의 기차는 다음과 같이 갈 수 있습니다.

1. 헤더 파일 확인

$ grep printf /usr/include/stdio.h | head -5
extern int fprintf (FILE *__restrict __stream,
extern int printf (__const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
extern int vprintf (__const char *__restrict __format, _G_va_list __arg);

2. 도서관 확인

$ nm /usr/lib/libc.a | grep printf | head -5
         U __asprintf
         U __fwprintf
         U __asprintf
         U __fwprintf
         U __printf_fp

3. 라이브러리 기능 분해

    $ objdump -S /usr/lib/libc.a | grep -A 10 '_fwprintf' | head
00000000 <__fwprintf>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   8d 45 10                lea    0x10(%ebp),%eax
   6:   83 ec 0c                sub    $0xc,%esp
   9:   89 44 24 08             mov    %eax,0x8(%esp)
   d:   8b 45 0c                mov    0xc(%ebp),%eax
  10:   89 44 24 04             mov    %eax,0x4(%esp)
  14:   8b 45 08                mov    0x8(%ebp),%eax
  17:   89 04 24                mov    %eax,(%esp)

아니면 그런 ...


2

면책 조항 : 나는 ChrisF의 대답을 좋아합니다. 그것은 몇 가지 접근법을 생략한다고 생각합니다. 답변에 대한 의견에 답변이 포함되어 있으면 답변을 삭제합니다.

디 컴파일에 속할 수도 있습니다.

문서화되지 않은 다른 API를 찾으려면 공급 업체가 제공 한 도구를 디버깅하여 원하는 종류의 라이브러리를 호출하고 라이브러리 간 호출을 추적 할 수도 있습니다. 이런 방식으로 어떤 유형의 데이터가 어디로 전송되는지 알 수 있습니다.

그런 다음 다른 "사용자 정의"도구를 작성하여 파이썬 및 CTYPES 또는 루비를 사용하여 이러한 문서화되지 않은 API와 함께 작동하도록하거나 충돌에 대해 정확히 무엇을하거나 퍼지하는지 알 때까지 비슷한 버전의 루비를 사용할 수 있습니다. 이 주제는 http://pentest.cryptocity.net/reverse-engineering/ 에서 Aaron Portnoy가 최소한으로 다루고 있으며 회의에서 그의 다른 대화 중 일부는 브라질에서 대화에서 직접 이야기하는 것을 기억합니다. ). RE와 관련이 있지만 정확히 RE라고 생각하지는 않습니다. 참고 : pentest.cryptocity.net의 비디오는이 주제에 해당되지 않습니다. 그들은 다른 영역을 더 깊이 다루고 있습니다. 테스터가 "정확한 단계는 우리의 비밀을 알려줄 것"으로 지키는 것이기 때문이라고 생각합니다.

감사의 말을 읽어 주셔서 감사합니다.

편집 : Windows 측 에서이 기능에 유용 할 수있는 한 가지 도구는 최소한 여기에서 다룹니다 : http://breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
두꺼운 자바를위한 전화 하이재킹 사용자 지정 네트워크 서비스를 퍼징하는 클라이언트는 여기에서 다룹니다.
http://www.securitytube.net/JavaSnoop-How-to-hack-anything-written-in-Java-video.aspx

마지막 것은 최소한의 관련성이 있지만, 질문자가 어디로 가는지에 관련 될 수 있습니다. 소유하지 않은 API를 사용하여 ... 무엇이든.


더 많은 / 다른 정보를 제공하는 것보다 자신의 답변을 추가하는 것이 좋습니다. 이것이 바로 Stack Exchange의 모든 것입니다.
ChrisF

설명을 해주셔서 감사합니다. 그것은 반전으로 덮여있을 것 같았습니다. 나는 다른 가능한 방법 / 더 구체적인 역전의 하위 집합에 대한 더 구체적인 표기법을 가질 수 있다고 생각했습니다 (역전은 MSDN에서 참조되지 않은 기호 검색 등을 포함 할 수 있음).
RobotHumans

-2

해킹은 상당히 낭만적 인 산업 스파이, 누출, 뇌물, 도난 및 일반 운이 들리지 않습니다. 나는 그들을 세지 않을 것입니다.

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