- 1,976
- 68
- 221
Дело было вечером, делать было нечего...
Осталась "мелочь" - написать саму функцию перебора. И с этим я обращаюсь к вам - помогите, люди добрые, иначе мой мозг взорвётся сильнее Хиросимы, Нагасаки и Мегатонны вместе взятых хд
В общем, кого заинтересовал и если кому не сложно - помогите)
Всем хорошего настроения и удачного дня о/
P.S. Ах да, чуть не забыл - ходят слухи, что в строке 19 символов. Потому изначально я планировалпробежаться проползти именно по такому варианту хд
Сидел я, листал ресурсы Ботании, ничего не предвещало беды, как вдруг я натыкаюсь на загадочный файл flightTiara9.png и сопутствующий ему flightTiara9.png.mcmeta. Смотрю, а там какие-то закорючки нарисованы, вроде потока символов в фильме "Матрица", анимированные естественно.
Уж сколь плохо я знаю Ботанию, но моя уверенность в отсутствии данной текстуры в креативном инвентаре (равно как и в NEI) была ещё больше уверенности Ким Чен Ына в своей крутости.
Так и оказалось - видов крыльев всего 9 (0-8). Но я ведь тоже не лыком шитый, взял да прописал /give на 9ю мету. И что бы вы думали? Как и следовало ожидать, в мои распростёртые длани подобно заповедям господньим прямо с небес упали мистические девятые крылья. "Что за фигня? ", - подумал я, - "откуда они взялись и как их скрафтить? ". Ткнул в великую магическую кнопочку 'R' - ничего, будто в землю потыкал, разве что палец чистый остался.
Но я ведь великий программист, я же могу посмотреть в код ботании! Ага, вот и оно,
Мистика тут же отправилась в неведомом направлении на поиски более наивных жертв.
Всё просто, ясно и понятно - уберхитрый Вязкий решил не искать лёгких путей по выдаче интересных предметов только себе любимому и написал оверсложный код на шифровку кастомного названия предмета по SHA-256, в результате чего только последователи Сатаны и адепты тайного ордена Ботании могут легальным путём получить эти самые 9е крылья, алсо именуемыми Matrix Wings.
Ну а я что? Я ничего, я пошёл к великому и всезнающему (нет, не Мерлину) гуглу, искать может кто-то таки смог расшифровать сей хеш, ну или предал Вазки и слил ключ в паблик.
Спустя пару часов бессмысленных блужданий во всякий реддитах и изучения радужных списков, я понял, что на стороне мне не помогут - Вязкий юзал соль.
А поскольку решения так не нашлось, я решил попытать счастье своими силами, написал кучу вложенных циклов, больше чем у меня задолженностей по учёбе, и давай брутфорсить по всем 256 вариантам записи char. Минут через пять я убил процесс, т.к. он повис как МакКуин и не отвечал ни на что. Был ещё вариант - онлайн компиляторы, но они точно так же поступали с моимвеликим брутокодом, только в 60 раз быстрее.
Я решил почитать, как экономить память и все дела, нашёл инфу по StringBuilder'у, всё вроде бы хорошо, но вот загвоздка: как написать человеческий алгоритм, который бы выполнялся не весь разом, а постепенно, а ещё лучше мог быть остановлен в любом момент и запущен вновь?
Ответ: сделать тайл в майне, запустить сервер и оставить на N времени, а чтобы не повесить машину нафиг, сделать срабатывание раз в тик.
Уж сколь плохо я знаю Ботанию, но моя уверенность в отсутствии данной текстуры в креативном инвентаре (равно как и в NEI) была ещё больше уверенности Ким Чен Ына в своей крутости.
Так и оказалось - видов крыльев всего 9 (0-8). Но я ведь тоже не лыком шитый, взял да прописал /give на 9ю мету. И что бы вы думали? Как и следовало ожидать, в мои распростёртые длани подобно заповедям господньим прямо с небес упали мистические девятые крылья. "Что за фигня? ", - подумал я, - "откуда они взялись и как их скрафтить? ". Ткнул в великую магическую кнопочку 'R' - ничего, будто в землю потыкал, разве что палец чистый остался.
Но я ведь великий программист, я же могу посмотреть в код ботании! Ага, вот и оно,
ItemFlightTiara.class[/b]]
Код:
@Override
public void onEquipped(ItemStack stack, EntityLivingBase player) {
super.onEquipped(stack, player);
if(stack.getItemDamage() != WING_TYPES && hash(stack.getDisplayName()).equals("16E1BDFD1D6AE1A954C9C5E1B2D9099780F3E1724541F1F2F77310B769CFFBAC")) {
stack.setItemDamage(WING_TYPES);
stack.getTagCompound().removeTag("display");
}
}
String hash(String str) {
if(str != null)
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
return new HexBinaryAdapter().marshal(md.digest(salt(str).getBytes()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
// Might as well be called sugar given it's not secure at all :D
String salt(String str) {
str = str += "wowsuchsaltmuchsecurityverywow";
SecureRandom rand = new SecureRandom(str.getBytes());
int l = str.length();
int steps = rand.nextInt(l);
char[] chrs = str.toCharArray();
for(int i = 0; i < steps; i++) {
int indA = rand.nextInt(l);
int indB;
do {
indB = rand.nextInt(l);
} while(indB == indA);
char c = (char) (chrs[indA] ^ chrs[indB]);
chrs[indA] = c;
}
return String.copyValueOf(chrs);
}
Всё просто, ясно и понятно - уберхитрый Вязкий решил не искать лёгких путей по выдаче интересных предметов только себе любимому и написал оверсложный код на шифровку кастомного названия предмета по SHA-256, в результате чего только последователи Сатаны и адепты тайного ордена Ботании могут легальным путём получить эти самые 9е крылья, алсо именуемыми Matrix Wings.
Ну а я что? Я ничего, я пошёл к великому и всезнающему (нет, не Мерлину) гуглу, искать может кто-то таки смог расшифровать сей хеш, ну или предал Вазки и слил ключ в паблик.
Спустя пару часов бессмысленных блужданий во всякий реддитах и изучения радужных списков, я понял, что на стороне мне не помогут - Вязкий юзал соль.
А поскольку решения так не нашлось, я решил попытать счастье своими силами, написал кучу вложенных циклов, больше чем у меня задолженностей по учёбе, и давай брутфорсить по всем 256 вариантам записи char. Минут через пять я убил процесс, т.к. он повис как МакКуин и не отвечал ни на что. Был ещё вариант - онлайн компиляторы, но они точно так же поступали с моим
Я решил почитать, как экономить память и все дела, нашёл инфу по StringBuilder'у, всё вроде бы хорошо, но вот загвоздка: как написать человеческий алгоритм, который бы выполнялся не весь разом, а постепенно, а ещё лучше мог быть остановлен в любом момент и запущен вновь?
Ответ: сделать тайл в майне, запустить сервер и оставить на N времени, а чтобы не повесить машину нафиг, сделать срабатывание раз в тик.
Код:
public class DecryptorTileEntity extends TileEntity {
public static final String possibleChars = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789 `~!@#$%^&*()-_=+|/+[]{}';:.,<>?\\\"";
public boolean decrypt19 = false;
public int[] curPoses = new int[25];
public int nowIters = 19;
public DecryptorTileEntity() {
for (int i : curPoses) i = 0;
//for (int i = 0; i < possibleChars.length(); i++) System.out.println(possibleChars.charAt(i));
}
@Override
public void updateEntity() {
}
public void checkString(String string) {
if (hash(string).equals("16E1BDFD1D6AE1A954C9C5E1B2D9099780F3E1724541F1F2F77310B769CFFBAC")) {
System.out.println(string);
this.worldObj.setBlock(xCoord, yCoord + 1, zCoord, Blocks.chest);
((IInventory) worldObj.getTileEntity(xCoord, yCoord + 1, zCoord)).setInventorySlotContents(0, new ItemStack(Items.paper, 1, 0).setStackDisplayName(string));
}
}
String hash(String str) {
if(str != null)
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
return new HexBinaryAdapter().marshal(md.digest(salt(str).getBytes()));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
// Might as well be called sugar given it's not secure at all :D
String salt(String str) {
str = str += "wowsuchsaltmuchsecurityverywow";
SecureRandom rand = new SecureRandom(str.getBytes());
int l = str.length();
int steps = rand.nextInt(l);
char[] chrs = str.toCharArray();
for(int i = 0; i < steps; i++) {
int indA = rand.nextInt(l);
int indB;
do {
indB = rand.nextInt(l);
} while(indB == indA);
char c = (char) (chrs[indA] ^ chrs[indB]);
chrs[indA] = c;
}
return String.copyValueOf(chrs);
}
}
Всем хорошего настроения и удачного дня о/
P.S. Ах да, чуть не забыл - ходят слухи, что в строке 19 символов. Потому изначально я планировал