Answers:
我可以想到几种方法:
反射。在这里,您得到一个对象,并要求它显示有关其自身的信息,例如方法,属性等。使用正确的选项(取决于语言),您可以显示非“公开”的信息。
反编译。这将重新生成用于创建二进制文件的源(版本)。同样,这可能会揭示API的非公开部分。
您也可以将“偶然”添加到列表中。起作用的拼写错误的呼叫/命令,或显示过多信息的帮助屏幕。
您用来开发软件的普通工具:)
通常未公开的API函数就是未公开的API函数,并不是真正经过仔细隐藏的秘密。
设计一个面向未来的API很难-您可以轻松地向API中添加内容,但是要删除任何东西(不破坏某些客户端)确实很困难。因此,在向API添加任何内容时要非常小心。这就是为什么API中可能有一些额外的功能(用于测试,开发,快速破解?),这些功能未记录在案,并且不能保证在下一版本中可以正常使用或存在。
只要您知道编译器,链接器,库和调试器的工作方式(系统编程方面的知识),就可以轻松地找到这些未记录的功能。知道目标体系结构的汇编语言不会有任何伤害。如果您的IDE /编译器可以构建可运行的可执行文件,那么您也可以“手动”执行此操作,并且睁开眼睛,您可能会发现一些隐藏的功能:)
Unix环境中的示例:一种场景,其中我们仅提供有关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,该工具可以执行所需的操作并跟踪库调用。这样,您可以了解将什么类型的数据发送到哪里。
然后可以使用python和CTYPES编写其他“自定义”工具来与这些未公开说明的API一起玩,或者使用ruby及其类似版本,直到您确切地了解它的作用或是否崩溃。亚伦·波特诺伊(Aaron Portnoy)在以下文章中对此话题进行了最小深度的介绍:http : //pentest.cryptocity.net/reverse-engineering/和他在会议上的其他一些演讲(我记得他在巴西的一次演讲中直接谈到了这一话题。 )。它与RE有关,但我不认为这只是一般RE。注意:pentest.cryptocity.net上的视频并非仅此主题。它们更深入地覆盖了其他区域,这只是涉及。我认为,这是测试人员经常会提防的事情,因为“确切的步骤会泄露我们的秘密”。
感谢您阅读任何反馈,不胜感激。
编辑:可以在Windows端对此进行最小化的一种工具在此处进行了最少介绍:http : //breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
针对厚Java的电话劫持客户端模糊测试自定义网络服务的内容在这里:http :
//www.securitytube.net/JavaSnoop-How-to-hack-anything-write-in-Java-video.aspx
最后一个问题只具有最低限度的相关性,但可以证明与发问者最终的去向有关。使用您无须做的API ...