-
Ситуация конечно вообще дикая. Короче вчера с Женькой сидели вычитывали статью по поводу виртуальной машины, над которой я бился почти 3 месяца. Правили некоторые моменты. А там в этом вебинтерфейсе есть такая штука - автосохранение (раз в минуту чтоль). Ну короче что-то мы там не то подправили и я нажал CTRL+Z пару раз. В итоге похоже нажал лишний раз и статья полностью очистилась (до чистого листа) и буквально через секунду сработало это автосохранение. А команды REDO у них нет. И вот собственно говоря у меня есть только заголовок статьи без текста.
Вопрос: Как и с кем связаться чтоб мне восстановили текст статьи? Я вчера облазил весь этот блогер и так и не смог найти адрес технической подержки, чтоб помогли мне в этом. Я ж точно знаю что они хранят всю историю изменений - но вот как бы это сделать?
Подскажите - люди добрые :)
-
Поздно, конечно, наверное, но у меня кнопка Redo доступна и после автосохранения. Только что проверил.
-
Как вариант посмотреть в гугле старую версию статьи. В поиске.
-
я не публиковал - в кеше нет - проверял
-
Только локальный ворд. Только 10 копий.
PS Примириться и переписать заново, но уже лучше. Это шанс.
-
support@blogger.com - по крайней мере, с него приходят.
-
> KilkennyCat © (08.04.16 13:39) [5]
спс, попробую
-
Ладно, не восстановили мне тест статьи - буду писать с нуля. А пока что вот подготовленные к публикации исходники: https://dl.dropboxusercontent.com/u/70911765/vm_core_demo.zipЧтоб VM заработала в полную силу - собирать в релизе (тогда включатся инлайны). Тестировал на Delphi 2010 - ниже не пробовал. Если у кого будут вопросы - пишите прямо сюда, буду по ходу объяснять что там такое творится и как оно вообще такой код генерирует.
-
Хочу "крякми.exe", а то у меня в командировки и с инклюдами туго.
Странная у вас ВМ. Не понимаю что она даёт? Мне казалось цель ВМ 1) запутать сравнение. 2) сделать большую задержку, что-бы нельзя было сделать генератор. Не первого не второго в коде не вижу.
-
Розыч, ты лучше скажи - VMProtect стоящая вещь или нельзя полагаться? А то нужно написать защиту, но времени как ты заморачиваться нет и опыта нету.
-
> Pavia © (19.04.16 16:24) [8] > Хочу "крякми.exe", а то у меня в командировки и с инклюдами > туго. > > Странная у вас ВМ. Не понимаю что она даёт? Мне казалось > цель ВМ > 1) запутать сравнение. > 2) сделать большую задержку, что-бы нельзя было сделать > генератор. > Не первого не второго в коде не вижу.
И то и то в коде есть - смотри на кодонегерацию - на асм выхлоп.
> ttUser © (19.04.16 17:06) [9] > Розыч, ты лучше скажи - VMProtect стоящая вещь или нельзя > полагаться?
Начиная с третьей версии стоящая, но только если не включать режим просто мутации кода - мутация у нее по сравнении с двойкой слабая. Используй виртуализацию или режим - ультра.
-
-
ЗЫ: не обращай внимания то что там С++ написано - ядро одинаковое (но да - в этом случае было собрано на си).
-
ЗЗЫ: будешь анализировать - чтоб не искать - начало работы VM с адреса 00401270
-
На вот тебе для помощи алгоритм этого кейгенми, чтоб показать как там все работало: void checkSerial()
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))
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_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(&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);
}
|