Форум: "Прочее";
Текущий архив: 2017.04.23;
Скачать: [xml.tar.bz2];
ВнизЕсть у нас спецы по гуглевскому Blogger? Найти похожие ветки
← →
Rouse_ © (2016-04-08 10:34) [0]Ситуация конечно вообще дикая.
Короче вчера с Женькой сидели вычитывали статью по поводу виртуальной машины, над которой я бился почти 3 месяца. Правили некоторые моменты.
А там в этом вебинтерфейсе есть такая штука - автосохранение (раз в минуту чтоль).
Ну короче что-то мы там не то подправили и я нажал CTRL+Z пару раз.
В итоге похоже нажал лишний раз и статья полностью очистилась (до чистого листа) и буквально через секунду сработало это автосохранение.
А команды REDO у них нет.
И вот собственно говоря у меня есть только заголовок статьи без текста.
Вопрос:
Как и с кем связаться чтоб мне восстановили текст статьи? Я вчера облазил весь этот блогер и так и не смог найти адрес технической подержки, чтоб помогли мне в этом. Я ж точно знаю что они хранят всю историю изменений - но вот как бы это сделать?
Подскажите - люди добрые :)
← →
DayGaykin © (2016-04-08 11:05) [1]Поздно, конечно, наверное, но у меня кнопка Redo доступна и после автосохранения. Только что проверил.
← →
pavelnk © (2016-04-08 11:48) [2]Как вариант посмотреть в гугле старую версию статьи. В поиске.
← →
Rouse_ © (2016-04-08 11:57) [3]я не публиковал - в кеше нет - проверял
← →
KSergey © (2016-04-08 13:04) [4]Только локальный ворд.
Только 10 копий.
PS
Примириться и переписать заново, но уже лучше. Это шанс.
← →
KilkennyCat © (2016-04-08 13:39) [5]support@blogger.com - по крайней мере, с него приходят.
← →
Rouse_ © (2016-04-08 14:29) [6]
> KilkennyCat © (08.04.16 13:39) [5]
спс, попробую
← →
Rouse_ © (2016-04-19 16:05) [7]Ладно, не восстановили мне тест статьи - буду писать с нуля.
А пока что вот подготовленные к публикации исходники: https://dl.dropboxusercontent.com/u/70911765/vm_core_demo.zip
Чтоб VM заработала в полную силу - собирать в релизе (тогда включатся инлайны).
Тестировал на Delphi 2010 - ниже не пробовал.
Если у кого будут вопросы - пишите прямо сюда, буду по ходу объяснять что там такое творится и как оно вообще такой код генерирует.
← →
Pavia © (2016-04-19 16:24) [8]Хочу "крякми.exe", а то у меня в командировки и с инклюдами туго.
Странная у вас ВМ. Не понимаю что она даёт? Мне казалось цель ВМ
1) запутать сравнение.
2) сделать большую задержку, что-бы нельзя было сделать генератор.
Не первого не второго в коде не вижу.
← →
ttUser © (2016-04-19 17:06) [9]Розыч, ты лучше скажи - VMProtect стоящая вещь или нельзя полагаться?
А то нужно написать защиту, но времени как ты заморачиваться нет и опыта нету.
← →
Rouse_ © (2016-04-19 19:05) [10]
> Pavia © (19.04.16 16:24) [8]
> Хочу "крякми.exe", а то у меня в командировки и с инклюдами
> туго.
>
> Странная у вас ВМ. Не понимаю что она даёт? Мне казалось
> цель ВМ
> 1) запутать сравнение.
> 2) сделать большую задержку, что-бы нельзя было сделать
> генератор.
> Не первого не второго в коде не вижу.
И то и то в коде есть - смотри на кодонегерацию - на асм выхлоп.
> ttUser © (19.04.16 17:06) [9]
> Розыч, ты лучше скажи - VMProtect стоящая вещь или нельзя
> полагаться?
Начиная с третьей версии стоящая, но только если не включать режим просто мутации кода - мутация у нее по сравнении с двойкой слабая.
Используй виртуализацию или режим - ультра.
← →
Rouse_ © (2016-04-19 19:06) [11]
> Pavia © (19.04.16 16:24) [8]
> Хочу "крякми.exe", а то у меня в командировки и с инклюдами
> туго.
А, по поводу крякми - лови: http://www.crackmes.de/users/rouse/keygenme_1/
Это на базе данного движка сделано.
← →
Rouse_ © (2016-04-19 19:08) [12]ЗЫ: не обращай внимания то что там С++ написано - ядро одинаковое (но да - в этом случае было собрано на си).
← →
Rouse_ © (2016-04-19 19:12) [13]ЗЗЫ: будешь анализировать - чтоб не искать - начало работы VM с адреса 00401270
← →
Rouse_ © (2016-04-19 19:15) [14]На вот тебе для помощи алгоритм этого кейгенми, чтоб показать как там все работало:
void checkSerial()
{
char login[9];
char serial[31];
INT8 login_len = 0;
Peirce::MACRO_MOV8((INT8)SendMessageA(hEdLogin, WM_GETTEXT, 9, (LPARAM)(&login)), &login_len);
SendMessageA(hEdSn, WM_GETTEXT, 31, (LPARAM)(&serial));
BOOL badCode;
Peirce::MACRO_MOVB(false, &badCode);
INT8 outRes[5];
Peirce::MACRO_MOV8(0, &outRes[4]);
INT16 crc, tmpCrc;
Sheffer::MACRO_MOV16(0, &crc);
// рассчитываем контрольную сумму серийника
for (int i = 0; i < 26; i = (int)Sheffer::MACRO_INC(i))
{
Peirce::MACRO_MOV16((INT16)serial[i], &tmpCrc);
Sheffer::MACRO_MOV16((INT16)Peirce::vmMul(tmpCrc, i + 1), &tmpCrc);
Peirce::MACRO_MOV16((INT16)Sheffer::MACRO_ADD(crc, tmpCrc), &crc);
}
// берем контрольное значение с конца серийника
INT16 snCrc;
Sheffer::MACRO_MOV16((BYTE)char2int((BYTE*)&serial[26]), &snCrc);
Sheffer::MACRO_MOV16(Peirce::MACRO_SHL16(snCrc, 8), &snCrc);
Peirce::MACRO_MOV16((INT16)Sheffer::MACRO_ADD(snCrc, (BYTE)char2int((BYTE*)&serial[28])), &snCrc);
// и проверяем
Peirce::MACRO_MOVB(Sheffer::MACRO_JMPNE(Peirce::MACRO_CMP16(snCrc, crc)), &badCode);
// рассчитываем старшую часть серийника
INT8 start_value;
Sheffer::MACRO_MOV8((BYTE)char2int((BYTE*)&serial[8]), &start_value);
Peirce::MACRO_MOVB((BOOL)Peirce::MACRO_IFTHEN(true, badCode,
Sheffer::MACRO_JMPZ(Peirce::MACRO_CMP8(start_value, 0))), &badCode);
INT32 sn, tmpLoginByte;
Peirce::MACRO_MOV32((INT32)start_value, &sn);
for (int i = 0; i < login_len; i = (int)Sheffer::MACRO_INC(i))
{
Peirce::MACRO_MOV32((BYTE)login[i], &tmpLoginByte);
Peirce::MACRO_MOV32((INT32)Sheffer::MACRO_SHL32(tmpLoginByte, 1), &tmpLoginByte);
Sheffer::MACRO_MOV32((INT32)Peirce::vmMul(sn, tmpLoginByte), &sn);
Peirce::MACRO_MOV32((INT32)Sheffer::MACRO_XOR(sn, start_value), &sn);
}
// теперь проверяем его с тем что записано в самом серийнике
INT8 byteCalculated, byteSn;
Peirce::MACRO_MOV8((BYTE)Sheffer::MACRO_SHR32(sn, 24), &byteCalculated);
Peirce::MACRO_MOV8((BYTE)char2int((BYTE*)&serial[0]), &byteSn);
Peirce::MACRO_MOVB((BOOL)Peirce::MACRO_IFTHEN(true, badCode,
Sheffer::MACRO_JMPNE(Peirce::MACRO_CMP16(byteCalculated, byteSn))), &badCode);
Peirce::MACRO_MOV8((BYTE)Sheffer::MACRO_SHR32(sn, 16), &byteCalculated);
Peirce::MACRO_MOV8((BYTE)char2int((BYTE*)&serial[2]), &byteSn);
Peirce::MACRO_MOVB((BOOL)Peirce::MACRO_IFTHEN(true, badCode,
Sheffer::MACRO_JMPNE(Peirce::MACRO_CMP16(byteCalculated, byteSn))), &badCode);
Peirce::MACRO_MOV8((BYTE)Sheffer::MACRO_SHR32(sn, 8), &byteCalculated);
Peirce::MACRO_MOV8((BYTE)char2int((BYTE*)&serial[4]), &byteSn);
Peirce::MACRO_MOVB((BOOL)Peirce::MACRO_IFTHEN(true, badCode,
Sheffer::MACRO_JMPNE(Peirce::MACRO_CMP16(byteCalculated, byteSn))), &badCode);
Peirce::MACRO_MOV8((BYTE)Sheffer::MACRO_AND(sn, 0xFF), &byteCalculated);
Peirce::MACRO_MOV8((BYTE)char2int((BYTE*)&serial[6]), &byteSn);
Peirce::MACRO_MOVB((BOOL)Peirce::MACRO_IFTHEN(true, badCode,
Sheffer::MACRO_JMPNE(Peirce::MACRO_CMP16(byteCalculated, byteSn))), &badCode);
// теперь можно выводить результат
INT8 outCursor, tmpCursor, tmpSnByte;
Peirce::MACRO_MOV8((INT8)Sheffer::MACRO_IFTHEN(18, 10, badCode), &outCursor);
for (int i = 0; i < 4; i = (int)Sheffer::MACRO_INC(i))
{
Peirce::MACRO_MOV8((INT8)Sheffer::MACRO_ADD(Peirce::MACRO_SHL8(i, 1), outCursor), &tmpCursor);
Peirce::MACRO_MOV8((INT8)char2int((BYTE*)&serial[tmpCursor]), &tmpSnByte);
Peirce::MACRO_MOV8((INT8)Peirce::MACRO_XOR(tmpSnByte, serial[i]), &outRes[i]);
}
Peirce::MACRO_MOV8((INT8)Sheffer::MACRO_INC(start_value), &start_value);
Peirce::MACRO_MOV8((INT8)Peirce::MACRO_XOR(outRes[0], start_value), &outRes[0]);
Peirce::MACRO_MOV8((INT8)Sheffer::MACRO_INC(start_value), &start_value);
Peirce::MACRO_MOV8((INT8)Peirce::MACRO_XOR(outRes[1], start_value), &outRes[1]);
Peirce::MACRO_MOV8((INT8)Sheffer::MACRO_INC(start_value), &start_value);
Peirce::MACRO_MOV8((INT8)Peirce::MACRO_XOR(outRes[2], start_value), &outRes[2]);
Peirce::MACRO_MOV8((INT8)Sheffer::MACRO_INC(start_value), &start_value);
Peirce::MACRO_MOV8((INT8)Peirce::MACRO_XOR(outRes[3], start_value), &outRes[3]);
INT32 outXorValue;
Sheffer::MACRO_MOV32(*(DWORD*)(&outRes[0]), &outXorValue);
// проверка что у нас в выходном буфере
BOOL validBad, validGood;
Sheffer::MACRO_MOVB((BOOL)Peirce::MACRO_JMPE(Peirce::MACRO_CMP32(outXorValue, 0x7B78718F)), &validBad);
Sheffer::MACRO_MOVB((BOOL)Peirce::MACRO_JMPE(Peirce::MACRO_CMP32(outXorValue, 0x72317B98)), &validGood);
Sheffer::MACRO_MOV32((INT32)Peirce::MACRO_IFTHEN(0x7B78718F, outXorValue,
(!validBad && badCode) || (!badCode && !validGood)), &outXorValue);
Sheffer::MACRO_MOV32((INT32)Peirce::MACRO_XOR(outXorValue, 0x53421EC1), &outXorValue);
*(DWORD*)(&outRes[0]) = outXorValue;
char msg[120];
sprintf_s(msg, "Checked -> %s ", &outRes[0]);
MessageBoxA(hMain, msg, "Check serial", MB_ICONINFORMATION);
}
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2017.04.23;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c