답변:
내가 생각할 수있는 몇 가지 방법이 있습니다.
반사. 여기에는 객체를 가져 와서 메소드, 속성 등과 같은 자체 정보를 공개하도록 요청합니다. 언어에 따라 올바른 옵션을 사용하면 "공개"가 아닌 정보를 공개 할 수 있습니다.
디 컴파일. 바이너리를 만드는 데 사용 된 소스 (버전)가 재생성됩니다. 이것 역시 API의 비공개 부분을 드러 낼 수 있습니다.
"우연히"목록에 추가 할 수도 있습니다. 작동하는 미 스펠 전화 / 명령 또는 너무 많은 정보를 표시하는 도움말 화면.
소프트웨어 개발에 사용하는 일반적인 도구 :)
일반적으로 문서화되지 않은 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)
아니면 그런 ...
면책 조항 : 나는 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를 사용하여 ... 무엇이든.