Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.04.23;
Скачать: CL | DM;

Вниз

Есть у нас спецы по гуглевскому 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.006 c
15-1460496602
Юрий
2016-04-13 00:30
2017.04.23
С днем рождения ! 13 апреля 2016 среда


2-1440135500
goga_m
2015-08-21 08:38
2017.04.23
Работа с TidHttp


8-1240846731
Витя
2009-04-27 19:38
2017.04.23
Как сделать чтоб MediaPlayer воспроизвадил видео на panel


2-1441283581
Цукор5
2015-09-03 15:33
2017.04.23
копировать TObjectList в TObjectList


15-1460105207
ttUser
2016-04-08 11:46
2017.04.23
Кто-нибудь программировал под телевизоры? (SmartTV)