правильный XOR

Тема в разделе "WASM.BEGINNERS", создана пользователем ptr, 11 мар 2010.

  1. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    пытаюсь сделать инсталятор.
    делаю EXE -> BIN(10-ую систему исчисления) , потом XOR однобайтным ключем.
    И и перед запуском делаю все с точностью наоборот, но exe получается битым. Не пойму почему.
    Хотя если не делать XOR то все ок, приложение стартует.
    Спасибо.
     
  2. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Я один вопроса не понял? Примеры какие то можно посмотреть?
     
  3. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    1)Читаю exe по-байтно ReadFile(hOFile,buf^,1,dwRead,nil);
    2) XOR'ю buf^:=buf^ xor 2;
    3)пишу в файл WriteFile(hSFile,buf^,1,dwWrite,nil);
    потом делаю все так же для шифрофайла по шагам 1-3. В итоге exe создается битым.
     
  4. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    ptr
    попробуйте просто наложить на exe маску с помощью xor
    а потом инсталятором ее убрать

    вообще общая стратегия поиска ошибки
    пусть идут преобразования
    a->b->c
    вы записываете результате каждого преобразования в файл
    потом идете обратно
    с->b1->a1
    и сравнивайте b c b1 и a c a1
    как только обнаружите расхождения, то функция обратного преобразования не соответствует прямой
    ищите косяк отладчиком
     
  5. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Во первых, лучше прочесть сразу все в память, и циклом поксорить.

    Наверняка ошибка не в самом ксоре. Либо не байт ксоришь, а dword например.
    Либо что то наподобии.
     
  6. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    ptr
    сравните файлы утилитой fc и узнайте с какого места идут расхождения
     
  7. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Sunzer
    +1 хз как вы там с типами в своем си работаете - там шаг влево вправо и приехали

    зы известный баг паскаля узнал когда лабы вел в универе - задача расчета кубов от 0 до 100
    фишка была в том что надо было перед умножением поставить преобразование типа иначе результат усекался до записи в переменную большего размера
    Код (Text):
    1. k:=(longint)i*(longint)i*(longint)i
     
  8. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    все ок, ошибку нашел.
    терь другой косяк, пытаюсь не шифровать нули.
    Код (Text):
    1.  if buf^ <>  byte(0) then buf^:=buf^ xor 2;
    файл битый, сравниваю по содержимому в ТCommander, различий куча =\
     
  9. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    ps: переменная buf определена как
    Код (Text):
    1. buf: pbyte
    память для нее выделяю динамически GlobalAlloc
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    ptr
    а вы учли что при шифровке из нуля получается не ноль и соответственно наоборот из какого-то числа (равного маске) получится ноль
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    ptr
    затея не шифровать нули - глупость
    тогда уж не шифруйте и байты равные маске
     
  12. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    [Rockphorr/b]
    да учел,как при (де)шифровке игнорю нули.
     
  13. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Дропер походу пишите?

    2 Rockphorr , это он для снижения энтропии наверное делает.
     
  14. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    Sunzer
    да, если так сказать. но это не малвара. а Авира кричит как вирус.
    можно подробнее, т.к матчасть в универе начали учить :)
     
  15. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    На полностью поксореный файл? Я не понимаю...
     
  16. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    ptr
    вот у вас маска 2 очевидно что все двойки перейдут в 0
    а нули ваш декриптор пропустит - вот вам и разница
     
  17. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    файл идет как довесок.
    Rockphorr, спасибо буду разбираться
     
  18. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Если даже понизишь энтропию в оверлее, от этого авира не перестанет кричать на файл.
     
  19. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    почему то перестает кричать, если не ксорить нули, вот только файл битый.
     
  20. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    Rockphorr, тебе отдельное спс. получилось. все работает :))