Попалась статья от китайцев о реверсе и взломе оригинального cobaltstrike.jar версии 4.0. Сам способ кряка заключается в подделке authpub.key и cobaltstrike.auth. К статье прилагался скрипт для генерации этих файлов:
В скрипте выше, переменная data - байтовый массив, который в дальнейшем станет cobaltstrike.auth, с таким порядком элементов:
1-6 - заголовок;
7-10 - срок лицензии (если сумма = 29999999, то пожизенная);
11-14 - ватермарка (если сумма = 0, то в биконе будут EICAR строки и прочий мусор);
15 - версия Кобальта (4.0 = 40, но не больше 128 (в скрипте 127));
16 - длинна ключа;
17-32 - ключ для расшифровки рукавов.
Ключ расшифровки рукавов для 4.3 был найден на Рейде: 58, 68, 37, 73, 15, 56, -102, -18, -61, 18, -67, -41, 88, -83, 43, -103
Собственно в чём проблема: Authorization.class версии 4.0 и 4.3 немного отличаются, и поэтому скрипт генерирует уже невалидные (для 4.3) авторизационные файлы. Если на форуме есть люди, которые ковыряли Кобу, то я прошу вашей помощи, или хотя-бы толчка в нужное направление. Как адаптировать данный скрипт для 4.3? Буду вам премного благодарен!
P.S. Почему не легче скачать чужую крякнутую версию? Да потому, что только один Бог знает что там внутри.
Java:
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import java.io.*;
import java.security.*;
import java.util.Base64;
public class RSAKeyPairGenerator {
private PrivateKey privateKey;
private PublicKey publicKey;
public RSAKeyPairGenerator() throws NoSuchAlgorithmException {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair pair = keyGen.generateKeyPair();
this.privateKey = pair.getPrivate();
this.publicKey = pair.getPublic();
}
// 将byte 写入文件
public void byte2File(String path, byte[] data) throws IOException {
File f = new File(path);
f.getParentFile().mkdirs();
FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
fos.flush();
fos.close();
}
public PrivateKey getPrivateKey() {
return privateKey;
}
public PublicKey getPublicKey() {
return publicKey;
}
// 加密数据
public byte[] encryptPri(byte[] data, PrivateKey privateKey) throws BadPaddingException, IllegalBlockSizeException, InvalidKeyException, NoSuchPaddingException, NoSuchAlgorithmException {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, this.privateKey);
return cipher.doFinal(data);
}
public static void main(String[] args) throws NoSuchAlgorithmException, IOException, IllegalBlockSizeException, InvalidKeyException, NoSuchPaddingException, BadPaddingException {
RSAKeyPairGenerator PairGenerator = new RSAKeyPairGenerator();
byte[] data = { -54, -2, -64, -45, 0, 43, 1, -55, -61, 127, 0, 0, 34, -112, 127, 16, 27, -27, -66, 82, -58, 37, 92, 51, 85, -114, -118, 28, -74, 103, -53, 6 };
byte[] rsaByte = PairGenerator.encryptPri(data, PairGenerator.getPrivateKey());
PairGenerator.byte2File("RSA/cobaltstrike.auth", rsaByte);
PairGenerator.byte2File("RSA/authkey.private", PairGenerator.getPrivateKey().getEncoded());
PairGenerator.byte2File("RSA/authkey.pub", PairGenerator.getPublicKey().getEncoded());
}
}
В скрипте выше, переменная data - байтовый массив, который в дальнейшем станет cobaltstrike.auth, с таким порядком элементов:
1-6 - заголовок;
7-10 - срок лицензии (если сумма = 29999999, то пожизенная);
11-14 - ватермарка (если сумма = 0, то в биконе будут EICAR строки и прочий мусор);
15 - версия Кобальта (4.0 = 40, но не больше 128 (в скрипте 127));
16 - длинна ключа;
17-32 - ключ для расшифровки рукавов.
Ключ расшифровки рукавов для 4.3 был найден на Рейде: 58, 68, 37, 73, 15, 56, -102, -18, -61, 18, -67, -41, 88, -83, 43, -103
Собственно в чём проблема: Authorization.class версии 4.0 и 4.3 немного отличаются, и поэтому скрипт генерирует уже невалидные (для 4.3) авторизационные файлы. Если на форуме есть люди, которые ковыряли Кобу, то я прошу вашей помощи, или хотя-бы толчка в нужное направление. Как адаптировать данный скрипт для 4.3? Буду вам премного благодарен!
P.S. Почему не легче скачать чужую крякнутую версию? Да потому, что только один Бог знает что там внутри.
Последнее редактирование: