Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
zeroturnaround__zt-zip_CVE-2018-1002201_1-12 — مكتبة جافا توفر طرقًا ملائمة لمعالجة أرشيفات ZIP، بما في ذلك التعبئة والتفريغ وتكرار الإدخالات والتحويل والمقارنة. | Kitploit
أدوات/GitHubGitHub/shoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12
أدوات عامةالأدوات والمكونات
GitHubshoucheng3/zeroturnaround__zt-zip_cve-2018-1002201_1-12

zeroturnaround__zt-zip_CVE-2018-1002201_1-12

مكتبة جافا توفر طرقًا ملائمة لمعالجة أرشيفات ZIP، بما في ذلك التعبئة والتفريغ وتكرار الإدخالات والتحويل والمقارنة.

عرض المستودع
3منذ سنة واحدةلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

ZIP - طرق ملائمة

التكامل المستمر

Build Status

نظرة عامة سريعة

بدأ المشروع وكتبه Rein Raudjärv عندما احتاج إلى معالجة مجموعة كبيرة من أرشيفات ZIP الضخمة لاستخدامات LiveRebel الداخلية. وبعد فترة وجيزة بدأنا باستخدام الأداة في مشاريع أخرى بسبب سهولة استخدامها ولأنها تعمل فقط.

تم بناء المشروع باستخدام حزم java.util.zip.* للوصول القائم على التدفقات (stream). كما أن معظم الطرق الملائمة لاستخدام نظام الملفات مدعومة أيضًا.

التثبيت

Maven Central

تتوفر قطع المشروع في مستودع Maven المركزي. لتضمينه في مشروع Maven الخاص بك، يجب عليك تحديد التبعية.

root@kitploit:~
...
<dependency>
    <groupId>org.zeroturnaround</groupId>
    <artifactId>zt-zip</artifactId>
    <version>1.11</version>
    <type>jar</type>
</dependency>
...

لاحظ أن 1.8 هو آخر إصدار متوافق مع Java 1.4. ومنذ ذلك الحين، أصبح Java 1.5 مطلوبًا.

خلفية

كانت لدينا المتطلبات الوظيفية التالية:

  1. ضغط وفك ضغط الدلائل بشكل تعاودي (recursively)
  2. تضمين/استبعاد الإدخالات
  3. إعادة تسمية الإدخالات
  4. الضغط/فك الضغط في مكانه - يصبح ZIP دليلًا والعكس صحيح
  5. التكرار عبر إدخالات ZIP
  6. إضافة أو استبدال الإدخالات من ملفات أو مصفوفات بايت
  7. تحويل إدخالات ZIP
  8. مقارنة أرشيفَين - مقارنة جميع الإدخالات مع تجاهل الطوابع الزمنية

وهذه المتطلبات غير الوظيفية:

  1. استخدام الواجهات البرمجية الموجودة قدر الإمكان
  2. أن تكون بسيطة الاستخدام
  3. أن تكون فعّالة الاستخدام - عدم اجتياز ملف ZIP بأكمله إذا كان هناك حاجة إلى إدخال واحد فقط
  4. أن تكون آمنة الاستخدام - عدم تمكين المستخدم من ترك التدفقات مفتوحة وإبقاء الملفات مقفلة
  5. عدم التصريح عن الاستثناءات
  6. أن تكون متوافقة مع Java 1.5

أمثلة

فك الضغط

التحقق مما إذا كان إدخال موجودًا في أرشيف ZIP

root@kitploit:~
boolean exists = ZipUtil.containsEntry(new File("/tmp/demo.zip"), "foo.txt");

استخراج إدخال من أرشيف ZIP إلى مصفوفة بايت

root@kitploit:~
byte[] bytes = ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt");

استخراج إدخال من أرشيف ZIP باستخدام ترميز محدد (Charset) إلى مصفوفة بايت

root@kitploit:~
byte[] bytes = ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt", Charset.forName("IBM437"));

استخراج إدخال من أرشيف ZIP إلى نظام الملفات

root@kitploit:~
ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt", new File("/tmp/bar.txt"));

فك ضغط أرشيف ZIP

root@kitploit:~
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"));

فك ضغط أرشيف ZIP ليصبح دليلًا

root@kitploit:~
ZipUtil.explode(new File("/tmp/demo.zip"));

استخراج دليل من أرشيف ZIP مع تضمين اسم الدليل

root@kitploit:~
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    return name.startsWith("doc/") ? name : null;
  }
});

استخراج دليل من أرشيف ZIP مع استبعاد اسم الدليل

root@kitploit:~
final String prefix = "doc/"; 
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    return name.startsWith(prefix) ? name.substring(prefix.length()) : name;
  }
});

استخراج الملفات من أرشيف ZIP التي تطابق نمط اسم

root@kitploit:~
ZipUtil.unpack(new File("/tmp/demo.zip"), new File("/tmp/demo"), new NameMapper() {
  public String map(String name) {
    if (name.contains("/doc")) {
      return name;
    }
    else {
      // returning null from the map method will disregard the entry
      return null;
    }
  }
});

طباعة أسماء إدخالات .class في أرشيف ZIP

root@kitploit:~
ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipInfoCallback() {
  public void process(ZipEntry zipEntry) throws IOException {
    if (zipEntry.getName().endsWith(".class"))
      System.out.println("Found " + zipEntry.getName());
  }
});

طباعة إدخالات .txt في أرشيف ZIP (يستخدم IoUtils من Commons IO)

root@kitploit:~
ZipUtil.iterate(new File("/tmp/demo.zip"), new ZipEntryCallback() {
  public void process(InputStream in, ZipEntry zipEntry) throws IOException {
    if (zipEntry.getName().endsWith(".txt")) {
      System.out.println("Found " + zipEntry.getName());
      IOUtils.copy(in, System.out);
    }
  }
});

الضغط

ضغط دليل إلى أرشيف ZIP

root@kitploit:~
ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"));

ضغط دليل ليصبح أرشيف ZIP

root@kitploit:~
ZipUtil.unexplode(new File("/tmp/demo.zip"));

ضغط دليل إلى أرشيف ZIP مع دليل أصلي (parent directory)

root@kitploit:~
ZipUtil.pack(new File("/tmp/demo"), new File("/tmp/demo.zip"), new NameMapper() {
  public String map(String name) {
    return "foo/" + name;
  }
});

إضافة إدخال من ملف إلى أرشيف ZIP

root@kitploit:~
ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt", new File("f/tmp/oo.txt"), new File("/tmp/new.zip"));

إضافة إدخال من مصفوفة بايت إلى أرشيف ZIP

root@kitploit:~
ZipUtil.addEntry(new File("/tmp/demo.zip"), "doc/readme.txt", "bar".getBytes(), new File("/tmp/new.zip"));

إضافة إدخال من ملف ومن مصفوفة بايت إلى أرشيف ZIP

root@kitploit:~
ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
ZipUtil.addEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));

إضافة إدخال من ملف ومن مصفوفة بايت إلى تدفق مخرجات

root@kitploit:~
ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
OutputStream out = null;
try {
  out = new BufferedOutputStream(new FileOutputStream(new File("/tmp/new.zip")));
  ZipUtil.addEntries(new File("/tmp/demo.zip"), entries, out);
}
finally {
  IOUtils.closeQuietly(out);
}

استبدال إدخال في أرشيف ZIP من ملف

root@kitploit:~
boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt", new File("/tmp/foo.txt"), new File("/tmp/new.zip"));

استبدال إدخال في أرشيف ZIP من مصفوفة بايت

root@kitploit:~
boolean replaced = ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "doc/readme.txt", "bar".getBytes(), new File("/tmp/new.zip"));

استبدال إدخال في أرشيف ZIP من ملف ومصفوفة بايت

root@kitploit:~
ZipEntrySource[] entries = new ZipEntrySource[] {
    new FileSource("doc/readme.txt", new File("foo.txt")),
    new ByteSource("sample.txt", "bar".getBytes())
};
boolean replaced = ZipUtil.replaceEntries(new File("/tmp/demo.zip"), entries, new File("/tmp/new.zip"));

إضافة أو استبدال الإدخالات في أرشيف ZIP

root@kitploit:~
ZipEntrySource[] addedEntries = new ZipEntrySource[] {
        new FileSource("/path/in/zip/File1.txt", new File("/tmp/file1.txt")),
        new FileSource("/path/in/zip/File2.txt", new File("/tmp/file2.txt")),
        new FileSource("/path/in/zip/File3.txt", new File("/tmp/file2.txt")),
    };
ZipUtil.addOrReplaceEntries(new File("/tmp/demo.zip"), addedEntries);

التحويل

تحويل إدخال في أرشيف ZIP إلى أحرف كبيرة

root@kitploit:~
boolean transformed = ZipUtil.transformEntry(new File("/tmp/demo"), "sample.txt", new StringZipEntryTransformer() {
    protected String transform(ZipEntry zipEntry, String input) throws IOException {
        return input.toUpperCase();
    }
}, new File("/tmp/demo.zip"));

المقارنة

مقارنة أرشيفَي ZIP (مع تجاهل الطوابع الزمنية للإدخالات)

root@kitploit:~
boolean equals = ZipUtil.archiveEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"));

مقارنة إدخالي أرشيف ZIP بنفس الاسم (مع تجاهل الطوابع الزمنية للإدخالات)

root@kitploit:~
boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo.txt");

مقارنة إدخالي أرشيف ZIP بأسماء مختلفة (مع تجاهل الطوابع الزمنية للإدخالات)

root@kitploit:~
boolean equals = ZipUtil.entryEquals(new File("/tmp/demo1.zip"), new File("/tmp/demo2.zip"), "foo1.txt", "foo2.txt");

التصحيح

تستخدم المكتبة إطار عمل تسجيل slf4j-api. جميع عبارات السجل هي إما بمستوى DEBUG أو TRACE. اعتمادًا على إطار عمل التسجيل الذي تستخدمه، فإن استخدام -Dorg.slf4j.simpleLogger.defaultLogLevel=debug بسيط أو System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "debug"); سيفي بالغرض لإظهار عبارات السجل من مكتبة zt-zip. يمكنك أيضًا ضبط المستويات وتضمين رسائل السجل لكل حزمة بدقة أكبر باستخدام إطار عمل التسجيل الخاص بك.

تنزيل الأداة