пытаюсь сделать инсталятор. делаю EXE -> BIN(10-ую систему исчисления) , потом XOR однобайтным ключем. И и перед запуском делаю все с точностью наоборот, но exe получается битым. Не пойму почему. Хотя если не делать XOR то все ок, приложение стартует. Спасибо.
1)Читаю exe по-байтно ReadFile(hOFile,buf^,1,dwRead,nil); 2) XOR'ю buf^:=buf^ xor 2; 3)пишу в файл WriteFile(hSFile,buf^,1,dwWrite,nil); потом делаю все так же для шифрофайла по шагам 1-3. В итоге exe создается битым.
ptr попробуйте просто наложить на exe маску с помощью xor а потом инсталятором ее убрать вообще общая стратегия поиска ошибки пусть идут преобразования a->b->c вы записываете результате каждого преобразования в файл потом идете обратно с->b1->a1 и сравнивайте b c b1 и a c a1 как только обнаружите расхождения, то функция обратного преобразования не соответствует прямой ищите косяк отладчиком
Во первых, лучше прочесть сразу все в память, и циклом поксорить. Наверняка ошибка не в самом ксоре. Либо не байт ксоришь, а dword например. Либо что то наподобии.
Sunzer +1 хз как вы там с типами в своем си работаете - там шаг влево вправо и приехали зы известный баг паскаля узнал когда лабы вел в универе - задача расчета кубов от 0 до 100 фишка была в том что надо было перед умножением поставить преобразование типа иначе результат усекался до записи в переменную большего размера Код (Text): k:=(longint)i*(longint)i*(longint)i
все ок, ошибку нашел. терь другой косяк, пытаюсь не шифровать нули. Код (Text): if buf^ <> byte(0) then buf^:=buf^ xor 2; файл битый, сравниваю по содержимому в ТCommander, различий куча =\
ps: переменная buf определена как Код (Text): buf: pbyte память для нее выделяю динамически GlobalAlloc
ptr а вы учли что при шифровке из нуля получается не ноль и соответственно наоборот из какого-то числа (равного маске) получится ноль
Sunzer да, если так сказать. но это не малвара. а Авира кричит как вирус. можно подробнее, т.к матчасть в универе начали учить
ptr вот у вас маска 2 очевидно что все двойки перейдут в 0 а нули ваш декриптор пропустит - вот вам и разница