ฟังก์ชั่นที่ไม่มีเอกสารถูกค้นพบได้อย่างไร? [ปิด]


11


ฉันสงสัยอยู่เสมอว่าคุณค้นหาAPI ที่ไม่มีเอกสาร / ส่วนตัวได้อย่างไร

ตัวอย่างแอปเปิ้ลที่ไม่มีเอกสาร / API ส่วนตัว, Play Station , Windows Phone 7 , Win32 Kernel , Windows API , การโทรกลับที่ซ่อนอยู่ฯลฯ ...

เครื่องมือใดที่แฮ็กเกอร์ใช้เพื่อค้นหาข้อมูลเกี่ยวกับฟังก์ชั่นส่วนตัวและที่ไม่มีเอกสาร?

ฉันจะอ่านเกี่ยวกับประสบการณ์ของผู้คนที่เจาะลึกไปถึง API ส่วนตัวและเทคนิควิศวกรรมย้อนกลับที่เปิดเผยความลับที่อธิบายได้ตามปกติในเอกสาร API ได้อย่างไร

ขอบคุณ
A

คำตอบ:


7

มีหลายวิธีที่ฉันสามารถนึกถึง:

  1. การสะท้อน. ที่นี่คุณจะได้รับวัตถุและขอให้เปิดเผยข้อมูลเกี่ยวกับตัวเองเช่นวิธีการคุณสมบัติและอื่น ๆ ด้วยตัวเลือกที่เหมาะสม (ขึ้นอยู่กับภาษา) คุณสามารถเปิดเผยข้อมูลที่ไม่ใช่ "สาธารณะ"

  2. ย้อนกลับ สิ่งนี้จะสร้างใหม่ (เวอร์ชัน) ของซอร์สที่ใช้เพื่อสร้างไบนารี นี่อาจเปิดเผยส่วนที่ไม่ใช่ส่วนสาธารณะของ API อีกครั้ง

คุณสามารถเพิ่ม "โดยบังเอิญ" ในรายการ การโทร / คำสั่งที่สะกดผิดที่ใช้งานได้หรือหน้าจอความช่วยเหลือที่เปิดเผยข้อมูลมากเกินไป


2
คุณสามารถเพิ่มเข้าไปในรายการโดยอุบัติเหตุ ใช่มันน้อยลง แต่มันเกิดขึ้น;) โดยเฉพาะอย่างยิ่งเมื่อเจ้าของ API ก่อให้เกิดอุบัติเหตุ

1
@ เปียร์ - จุดดี
ChrisF

นอกจากนี้ลายเซ็นห้องสมุดที่ใช้ร่วมกัน เรื่องนี้เกี่ยวข้องกับการแยกส่วน แต่ฟังก์ชั่นที่ส่งออกในไฟล์. dll / .dylib / .so สามารถเรียกดูได้ด้วยเครื่องมืออย่างเป็นทางการ (explorer explorer ใน Visual Studio, nm ใน Unixes)
Chris Dolan

4

เครื่องมือปกติที่คุณใช้พัฒนาซอฟต์แวร์ :)

ฟังก์ชั่น 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)

หรืออะไรทำนองนั้น ...


2

ข้อจำกัดความรับผิดชอบ: ฉันชอบคำตอบของ ChrisF ฉันคิดว่ามันเป็นการละทิ้งแนวทางสองสามอย่าง หากมันอยู่ในความคิดเห็นต่อคำตอบที่ได้รับการคุ้มครองฉันจะลบคำตอบของฉัน

มันอาจจะตกอยู่ภายใต้การแยกส่วน:

การค้นหา API ที่ไม่มีเอกสารอื่น ๆ สามารถทำได้โดยการดีบักเครื่องมือของผู้จัดจำหน่ายซึ่งจะให้สิ่งที่คุณต้องการและติดตามการโทรระหว่างห้องสมุด ด้วยวิธีนี้คุณสามารถมีความคิดเกี่ยวกับประเภทของข้อมูลที่ส่งไปยังที่ใด

เครื่องมือ "กำหนดเอง" อื่น ๆ นั้นสามารถเขียนเพื่อเล่นกับ API ที่ไม่มีเอกสารเหล่านี้โดยใช้ python และ CTYPES หรือ 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/
โทร hijacking สำหรับ java หนา ไคลเอนต์เพื่อบริการเครือข่ายที่กำหนดเอง fuzz ครอบคลุมอยู่ที่นี่:
http://www.securitytube.net/JavaSnoop-How-to-hack-anything-written-in-Java-video.aspx

สุดท้ายนั้นมีความเกี่ยวข้องเพียงเล็กน้อยเท่านั้น แต่สามารถพิสูจน์ได้ว่าเกี่ยวข้องกับผู้ถามในที่สุด ใช้ API ที่คุณไม่ได้เป็นเจ้าของ ... ทำอะไรก็ได้


การเพิ่มคำตอบของคุณเองมากกว่าการให้ข้อมูลที่แตกต่างกันเป็นสิ่งที่ดี - คือสิ่งที่กองแลกเปลี่ยนเป็นเรื่องเกี่ยวกับ
ChrisF

@ChrisF ขอบคุณสำหรับการชี้แจง ดูเหมือนว่ามันอาจถูกปกปิดโดยการย้อนกลับ ฉันคิดว่ามันอาจมีสัญกรณ์เฉพาะเจาะจงมากขึ้นสำหรับวิธีการอื่นที่เป็นไปได้ / ชุดย่อยที่เฉพาะเจาะจงมากขึ้นของการย้อนกลับ (การย้อนกลับอาจครอบคลุมการค้นหาสัญลักษณ์ที่ไม่ได้อ้างอิงใน MSDN เช่นกันเป็นต้น)
RobotHumans

-2

การแฮ็คฟังดูค่อนข้างโรแมนติคจารกรรมทางอุตสาหกรรมการรั่วไหลการติดสินบนการโจรกรรมและความโชคดีไม่ได้ ฉันจะไม่นับพวกมันออกมา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.