Реферат: Арифметика на службе защиты
14. 25600 = 160^2
...
Такие S[i] следуют какое-то время, но затем становится опять понятно их происхождение: шаги 31-36 добавляют к этой "контрольной сумме" цифры поля "код".
Тут я понял, что дело близко к развязке. Но не понял, что настолько. Первая версия - промежуточные S[i] - какие-то магические константы. Приготовился даже поискать возможный их формирователь. Для начала решил все же поискать их в файле... Да, да, они там были...
Осталось привести код remainder'а. Писать его на асм, как я обычно делаю, было как-то не прикольно. Так что извините за пас. Но и в нем я все же обошелся без real-чисел. В структуре, объявленной в программе, поясняется, зачем нужны были добавочные байты (S[i]).
{$A-}
{$N+}
{$S-}
{$D-}
const
{INN: string[11] = '0000000000';}
INN: string[11] = '7575757575'; { result must be 359683 }
TypeSetup: string[11] = 'Преферанс';
Code: string[7] = '014194';
Version: string[7] = 'Вер 46';
type
tExtPassData =
record
INN: array[1..10] of byte; { ИНН - вместе с ключом }
TypeSetup: array[1..10] of byte; { Тип конфигурации: Преферанс, etc }
Fillers: array[1..10] of byte; { Пробелы }
Code: array[1..6] of byte; { Код }
Version: array[1..6] of byte; { Версия программы: Вер 46 и т.п. }
end;
var
sum,i,PassByte: longint;
ExtPassData: tExtPassData;
begin
writeln; writeln('Preferance password remainder started!'); writeln;