- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
main()
{
j=atol("776677"); c=0;
gb=65500; /*гран буф не>65500!*/
gp=gb+65500;
c=PA();
vm = v_mod(0x0f00)&0x00ff;
if((vm!=2) && (vm!=3) && (vm!=7)) v_mod(3);
if(vm==7) v_m=MK_FP(0xB000,0); /* присвоить адр в-памяти */
else v_m=MK_FP(0xB800,0);
if(c==0) {printf("Самопроверка программы неудачна."); dely(9);}
gek=calloc(1000,sizeof(int));
bufa=farcalloc(4000,sizeof(long));
bfk=calloc(4000,sizeof(int));
ok=calloc(800,sizeof(char));
st=calloc(10,sizeof(char));
bufv=calloc(4000,sizeof(char));
if((gek==NULL)||(bufa==NULL)||(bfk==NULL)||(ok==NULL)||(st==NULL)||(bufv==NULL))
{
printf(" Неудачное выделение памяти для основных буферов.\n");
printf(" Программа не выполняется.");
dely(9); exit(1); }
for(x=0;x<4000;x++) {bufa[x]=0L;bfk[x]=0; /*занул буф адресов и кодов */
if(x<10) st[x]=0x00; /*буф для выв чисел на экр*/
if(x<26) urov[x]=1;
if(x<20) {abn[x]=1; aba[x]=2L;}} /*мин адресa абс ном строк и нач загр буф*/
if(x<128) B0[x]=0;
ur=vv=avt=in=0; i=N=0; zap=0;x_=1;
ifm=10;/*10,01,11,12,21 - 1:п/панель записей,0-инф п/панель,12,21-2 базы*/
/* vctp(3);*/
mou(0); kur(0);
okn=0; /*сбр инд сохр-х окон*/
v_mod(0);
nok1=16;
SET(); ch=pal[0];
textbackground(BLACK);
clrscr();
okno(0,2,ch,ch);
window(1,1,80,25);
okno(16,2,ch,ch);
nstr(1);
baz=1;
nfl="0.cry ";
F_place("10.cry");
kzo();
prx=3; /*нейтраль*/
for(vm=4000;vm<8000;vm++) v_m[vm]=0; vm=0;
/*vm-далее кол-во стр загр буф*/
ppan(0,0);
form_kod(2);/*чт genko*/
attr=pal[5]; vdl(a+1,y_,a+36,y_,0,0); /*сох атр бывш стр*/
vctp(0);
tit();
if(zap!=0) nstr(2);
ZA[0]='\0';
za=strlen(MPR);
strcat(ZA,MPR);if(za>3) strcat(ZA,"\\"); strcat(ZA,"save.com");
za=0; if((access(ZA,0)!=-1)) za=1; /*ZA-путь savera*/
/**************/
for(;;)
{
mou(1);
ch=get_char(1);
if((ch<48)||(ch>57)) /*кроме цифр*/
if((ch!=0xfe)&&(ch>0x20)&&(f_kl==0)) {printf("\7"); ch=0;}
mou(2); mus(a); /*ориен мыши*/
if((ch==TAB)||(ch==RIGHT)||(ch==LEFT))
tab();/*порядок не менять*/
if(ch==15) { ctrl(); tab();}
mus(a); mus(101);
if(ch==F7) gl_poisk(0);
if(ch==AF7) gl_poisk(1);
if(ch==F1) hlp();
if(ch==CTRL) ctrl();
if((ch==AF1)&&(Pp==1)) ctrl();
if((ch==AF2)&&(Pp==0)) ctrl();
if(ch==32) exr(0);
if(ch==AF3) exb();
if(ch==AF4) exr(1);
if(ch==UP) { cm=0; up(1);}
if(ch==DOWN) { cm=0; down(1); }
if(ch==PGUP) { cm=0;scroll(0,0);}
if(ch==PGDN) { cm=0;scroll(1,0);}
if(ch==HOME) { cm=0;scroll(0,4000);}
if(ch==END) { cm=0;scroll(1,4000);}
if(ch==F5) kon(1);
if(zap==0) /*ес зп разреш*/
{
if(ch==INS) { s=0;
if((chkm(3)!=0)||(chkm(4)!=0)) {s=1;
coo(0,0x4E,0xCF,"","Предельная длина файла!",
"Разрешено только удаление!",""," Выход");}
if((chkm(1)!=0)||(chkm(2)!=0)) {s=1;
coo(0,0x4E,0xCF,"","Исчерпана длина буфера!",
"Сохраните набранную информацию,","после чего можно продолжить.",
" Выход");}
if(vm==4000)
{coo(0,0x7f,0x70,"Количество записей в списке достигло 4000.",
"","В данном случае возможно только удаление",
Это один знакомый слесарь ЭВМ писал прогу для создания/редактирования/просмотра самопальной древовидной БД, для своих нужд, с тем условием, что работать она должна была чуть ли не на i286, и грузилась не более 2х секунд. Недавно он обратился ко мне с просьбой перенести её под линь, но увидев это я решил что такое жить не должно, поэтому просто писал аналог с нуля, на плюсах, но справедливости ради, замечу что моя прога вышла чуть тормознее:).
Полный код к сожалению не влез, вот он: http://ideone.com/3sLsa.
P.S. Авторское форматирование сохранено.
>У моей подруги
Вонни, перелогинься.
Это ты о чём?
Кон цкл.
Вот это заинтриговало. Как тут что-то может зависеть от порядка?
Хотя, по-видимому, это касается последующих строчек вида if(ch == ...). Если ch - глобальная переменная, то процедуры обработки могут ее менять, так что сработает сразу несколько ифов.
{
j=atol("776677");
Интересный способ инициализации переменных
Видимо или TurboC не поддерживало суффикс L для лонгов (очень маловероятно), или автор программы об этом просто не знал, потому и поюзал atol("776677") вместо 776677L.
> Полный код к сожалению не влез, вот он: http://ideone.com/3sLsa
Даже если скачать обрывается на
Линкуешь модуль, при первом запуске прога запоминает своё состояние, при последующих проверяет.
Но имело смысл только на однозадачных системах, имхо.
некий системный механизм.
Во всех остальных случаях, в чём гарантия что не модифицирована алгоритмика валидации слепка состояния программы?
'контроля' — системные механизмы или 'самоконтроля' — механизм конкретного приложения?
Вы имеете ввиду «подделать» какой-нибудь, например, 1024байтный хешкод слепка состояния?
Может легче ночью с фомкой прийти?
Да вообще-то и 512бит хватит для всех.
Я имел в виду, что если кому-то очень-очень приспичит, он найдет уязвимости в системе (зачем подбирать контент под хэш-код, если можно тупо поправить этот хеш код в базе, или "пофиксить" код, проверяющий оный), или призовет юзера на помощь (тут свежая порнушка, но система защиты по ошибке матерится, ты ее успокой). На крайний случай можно и ночью с фомкой ;)
А в остальных 99% случаев от залетного вируса сработает и банальнейшая самопроверка с дохленьким CRC32. Принцип "Неуловимого Джо".
P.S. А вообще сейчас эти самопроверки неактуальны. Из последних файловых вирусов вспоминается разве что sality.
http://pastebin.com/G8pSQEje
самое смешное
поясняю: смешно то, что поле есть, но никто его не использует (если я правильно понял, этот велосипед прячет копию своего заголовка в .data)
Окай, пусть сумма всех слов кроме ChkSum равна 1, подберите значение ChkSum, чтобы сумма всех слов файла, равнялась ему. Problem?
> смешно то, что поле есть, но никто его не использует
Не смешно. Это стандартный заголовок экзешника. Как говорится 'из песни "бля" не выкинешь'.
P.S. Если вы о том, что после "заражения" файла не пофиксили контрольную сумму, то ЕМНИП ноль там вполне допустим (в windows чуть более чем все экзешники с нулями, хотя там и формат другой).
[i]Петя, Вася и Маша хавали ништяки. Петя захавал 6 ништяков, Вася - 8. Сколько захавала Маша, если известно, что было всего захавано 7 (mod 16) ништяков?
> Сколько захавала Маша
Очевидно, что 9. Но это совершенно другая история. Я ведь не зря два раза писал про весь файл. Т.е. весь файл, включая само поле с контрольной суммой.
Правильная задача на данную тему: дан файл Проставьте вместо xx такой байт, чтобы он равнялся сумме всех байтов этого файла по модулю 256. Не проставите - слив засчитан. Время пошло.
судя по минусу, время уже вышло, наверное не успею написать почему так ;-)
0xFF != 0xFE
FAIL.
Даже если сменить функцию вычисления checksum на xor, то таже картина.
crc8 checksum я даже пробовать не буду.
(Как бы не в функции дело, а хотелось побитоёбить на Хаскеле)
http://ideone.com/xxHAE
Что-то мне подсказывает, что я где-то накосячил
> Включая его самого? ;)
К сожалению guest никак не может\не хочет это понять.
Вы далекий человек от функционального программирования? Мне просто интересно, насколько функциональный код понятен далёким людям?
> 7 (mod 16)
Что за не популярная нотация? Так выглядит, как будто функция 7 принимает в качестве параметра функцию mod с одним захваченым параметром и одним свободным. (mod 16). При условии, что mod - остаток от деления.
Самая обычная математическая нотация, когда справа от выражения приписывают (mod N).
Читать что угодно с винта, как бы выразиться помягче. Когда у меня однажды встала задача примерно такой же направленности, я сказал "да ну его" и забил. Это время потраченное впустую, не даст ровным счётом ничего.
только не блоки, а сегменты/секции. очевидно, что ресурсы хешировать не нужно
теоретически, в памяти получится секурнее
на виндах встречается реже, но картина примерно такая же