добавление строки в файл приложения

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Crio
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 21.05.2007 (Пн) 12:01
Откуда: Питер

добавление строки в файл приложения

Сообщение Crio » 21.05.2007 (Пн) 12:19

Задача: Нужно добавить в файл приложения немного текста.
(Если строку приписать после текста приложения ему ничего не будет.)

Условие: Никаких посторонних приложений, всплывающих ДОС-окон и появляющихся-исчезающих файлов.

Нужно сделать это из того же приложения, чтобы оно само себя дописало. А оно во время выполнения блокируется. Я вижу один выход: снять блокировку с приложения.

Как это сделать?

Предложите другие варианты...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 21.05.2007 (Пн) 12:36

Не заниматься ерундой...

Для чего вообще что-то записывать в exe?
Лучший способ понять что-то самому — объяснить это другому.

Crio
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 21.05.2007 (Пн) 12:01
Откуда: Питер

Сообщение Crio » 21.05.2007 (Пн) 13:15

К Ale-Top:

Связывайтесь с Управлением "К", наверняка орден выдадут!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.05.2007 (Пн) 13:19

Crio, просто не обращай на него внимания.
Это наш форумный тролль, у него сейчас всплеск активности.
Побушует и успокоится. Если не сам, то с помощью админов.
Изображение

Crio
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 21.05.2007 (Пн) 12:01
Откуда: Питер

Сообщение Crio » 21.05.2007 (Пн) 13:42

Ясно...
Извините, если получилось грубо...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.05.2007 (Пн) 15:05

Ale-Top, если ты хочешь на выход, то ты движешься в правильном направлении.
Lasciate ogni speranza, voi ch'entrate.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 21.05.2007 (Пн) 15:59

Нужно сделать это из того же приложения, чтобы оно само себя дописало. А оно во время выполнения блокируется. Я вижу один выход: снять блокировку с приложения.

Как это сделать?

Предложите другие варианты...


Ничего не надо снимать, надо только немножко извратиться :)
Вот пример который дописывает сам в себя строчку "hello world!!!!!"
Правда он написан на PowerBASIC но на VB я думаю будет перевести несложно. Главное основную идею ухвати. В аттаче, лежит скомпиленный экзешник, позапускай его. И после каждого запуска, открывай в блокноте, в конце бинарного кода будет появлятся новая строка "hello world!!!!!". Никаких левых программ и консольных окон - нет.


Код: Выделить всё
#Compile Exe
#Include "Win32api.inc"

Function IsFile(ByVal FileName As String) As Long
    ErrClear
    Local Attr As Long
    Local LongPath  As Asciiz * %MAX_PATH
    Local ShortPath As Asciiz * %MAX_PATH
    Local Path      As String
    Local Temp      As String

    Replace $Dq With "" In FileName
    Path = FileName
    While Len(Path)
        Temp      = Extract$(Path, "\")
        LongPath  = ShortPath & Temp
        Path      = LTrim$(Mid$(Path, Len(Temp) + 1), "\")
        GetShortPathName LongPath, ShortPath, SizeOf(ShortPath)
        ShortPath = ShortPath & "\"
    Wend
    FileName = RTrim$(ShortPath, "\")

    Attr = GetAttr(FileName)
    If Err Or IsTrue (Attr And %FILE_ATTRIBUTE_DIRECTORY) Then GoTo errtrap:
    Function = %TRUE
    Exit Function
errtrap:
    Function = %FALSE
End Function

Function SystemDirectory () As String
    On Error GoTo errtrap:
    Local zText As Asciiz * %MAX_PATH
    Local syspath As String
    GetSystemDirectory zText, %MAX_PATH
    syspath=Trim$(zText)
    If Left$(syspath,1)<>"\" Then
        syspath=syspath & "\"
    End If
    Function = syspath
    Exit Function
errtrap:
    Function=""
    Exit Function
End Function

Function GetCommandExe() As String
    On Error GoTo errtrap:
    Local syspath As String
    Local cmdpath As String
    syspath = SystemDirectory()
    If IsFile(syspath & "cmd.exe")=1 Then
        cmdpath=syspath & "cmd.exe"
    Else
        If IsFile(syspath & "command.com")=1 Then
            cmdpath=syspath & "command.com"
        Else
            cmdpath=""
        End If
    End If
    Function=cmdpath
    Exit Function
errtrap:
    Function=""
    Exit Function
End Function

Function CheckComspec() As Long
    On Error GoTo errtrap:
    Local tmpcmd As String
    If Len(Environ$("COMSPEC"))<=0 Then
        tmpcmd = GetCommandExe
        SetEnvironmentVariable "COMSPEC",ByCopy tmpcmd
    End If
    Function=%TRUE
    Exit Function
errtrap:
    Function=%FALSE
    Exit Function
End Function

Function myShellExecute (Program As String, Arguments As String, nShow As Long) As Dword
    On Error GoTo errtrap:
    Local ShellInfo As SHELLEXECUTEINFO
    ShellInfo.cbSize = SizeOf(ShellInfo)
    ShellInfo.fMask = %SEE_MASK_FLAG_NO_UI Or %SEE_MASK_NOCLOSEPROCESS
    ShellInfo.lpFile = StrPtr(Program)
    ShellInfo.lpParameters = StrPtr(Arguments)
    ShellInfo.nShow = nShow
    If ShellExecuteEx(ShellInfo) Then Function = ShellInfo.hProcess
    Exit Function
errtrap:
    Function=0
End Function


Function sFile(ByVal n As String) As Dword
  Open "file~.tmp" For Binary As 1
  Put$ #1,n
  Close 1
End Function

Function PBMain() As Long
    Local comspec As String
    Local cmdline As String
    Local szModuleName As Asciiz * %MAX_PATH
    GetModuleFileName ByVal 0, szModuleName, SizeOf (szModuleName)
    sFile "hello world!!!!!!!!!!!!"
    If CheckComspec()=%TRUE Then
        comspec = Environ$("COMSPEC")
         cmdline = "/c copy /B " & $Dq & szModuleName & $Dq & " + file~.tmp"
          Call myShellExecute(comspec,cmdline,%SW_HIDE)
           cmdline = "/c del file~.tmp >> NUL"
            Call myShellExecute(comspec,cmdline,%SW_HIDE)
    End If
End Function
Вложения
Patсh.rar
(10.41 Кб) Скачиваний: 66

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: добавление строки в файл приложения

Сообщение tyomitch » 21.05.2007 (Пн) 16:10

Crio писал(а):Условие: Никаких посторонних приложений, всплывающих ДОС-окон и появляющихся-исчезающих файлов.
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 21.05.2007 (Пн) 16:22

Условие: Никаких посторонних приложений, всплывающих ДОС-окон и появляющихся-исчезающих файлов.


С точки зрения пользователя, посторонний файл и не появляется. Точнее время его "жизни" cтоль мало (десятые доли секунды), что оболочка Windows, а тем более файл-менеджеры не успевают прореагировать на его рождение и смерть. Так, что это условие выполнено

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.05.2007 (Пн) 16:32

Автор, получается, говорил о файлах, исчезающих завтра? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 21.05.2007 (Пн) 16:43

Если программа будет использоватсья только на NTFS - то можно спокойно писать в другой поток, в самого себя.
Программисты не глючат - глючат компиляторы...

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 21.05.2007 (Пн) 16:59

Автор, получается, говорил о файлах, исчезающих завтра


Даже если файл пропатчит самого себя в памяти, все равно надо будет удалить старую копию себя на диске, а потом сохранить пропатченный вариант на диск. Т.е. по крайней мере, без одной операции удаления и одной - сохранения файла, не обойтись.
На самом деле, те же яйца, только вид сбоку...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.05.2007 (Пн) 17:02

jangle писал(а):С точки зрения пользователя, посторонний файл и не появляется. Точнее время его "жизни" cтоль мало (десятые доли секунды), что оболочка Windows, а тем более файл-менеджеры не успевают прореагировать на его рождение и смерть.

Угу, особенно на флоппике или медленной шаре.

Зачем-то же автор поставил своё условие? Наверное не просто так?
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.05.2007 (Пн) 19:23

tyomitch писал(а):Угу, особенно на флоппике или медленной шаре.

А еще в NTFS права можно настроить так, что создать файл будет можно, а вот удалить его же уже нельзя.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.05.2007 (Пн) 19:31

Плюс к тому, на забитом диске может просто нехватить места на копию изменяемого файла.
Изображение

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 21.05.2007 (Пн) 21:00

наверное, можно создать копию exe, как файла отображенного на память, запустить новый процесс из него, и по завершении первого процесса новый процесс дописывает строку.
наверное можно.. :roll:

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 21.05.2007 (Пн) 21:50

Угу, особенно на флоппике или медленной шаре.

Зачем-то же автор поставил своё условие? Наверное не просто так?


Интересно попробовать программу на флопике, в моем компе, он каким-то чудом сохранился, но ни одной дискеты так и не нашел. Я уже и СD давно не использую, таскаю связку флешек, где самая маленькая - 1 Гб. А флопики - уже давно антиквариат.

Про условие автора, ничего понять нельзя. Да он и сам скорее всего не может понять, зачем их поставил в таком виде.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.05.2007 (Пн) 22:01

Оффтоп: один раз помогал ставить винду на комп, который был куплен с пустым винтом, драйверами к нему на дискетке, и без флоппи-дисковода. Установщик винды не видит винт, если не нажать F6 и не подсунуть ему эту дискетку. Интересно, каким местом думали собиравшие такой комп продавцы? :-)
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 21.05.2007 (Пн) 22:16

ИМХО, надо идти наверное к хакерам на форум, раз уж такой гемор нужен - недавно нактнулся на статью, пролистал - ничо не понял ссылку не помню, ибо был там мимоходом, но вдруг полезным будет мой совет - вирусы как-то прямо в памяти запускаются, прописывают в нее код, тока боюсь это уже не VB... зато можно создать такую виртуальную копию, свой экзешник вырубить, а виртуалка пусть пишет... я бы порыл в этом направлении =)
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.05.2007 (Пн) 23:38

Wolfie, есть такая поговорка: "слышал звон, да не знаю где он" ;-)
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 22.05.2007 (Вт) 8:20

tyomitch верно :) но не хотелось все свое хистори перелистывать в поисках састья - может автор поищет чего хочет :lol:
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 22.05.2007 (Вт) 9:58

tyomitch писал(а):Оффтоп: один раз помогал ставить винду на комп, который был куплен с пустым винтом, драйверами к нему на дискетке, и без флоппи-дисковода. Установщик винды не видит винт, если не нажать F6 и не подсунуть ему эту дискетку. Интересно, каким местом думали собиравшие такой комп продавцы? :-)
Off 2: А по-моему давно пора бить лицо создателям установщика винды за то, что F6 до сих пор признает только дисковод. :twisted:
Лучший способ понять что-то самому — объяснить это другому.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 22.05.2007 (Вт) 10:05

Зачем мучится с дискетами. Можно установить винду с флэшки, или если ее размер более гига, поставить XP прямо на флешку, в BIOS надо выставить загрузку с USB-ZIP

http://www.ironhorse.ru/content/view/102/37/

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.05.2007 (Вт) 10:50

И что, винда сразу же увидит винт оттого, что загружена с флешки, а не с сидюка?
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 22.05.2007 (Вт) 15:52

Так... ссылку нашел, но она битая оказалась - топик переместили...
свой вопрос автгор может задать на http://www.cracklab.ru/ :) это не пропагада крекинга etc., а решение мирной задачи :)
короче: можно без файлов и т.п. выполнить в памяти код и потушив свой экзешник дописать его, но есть пара минусов:
1. любой антивирь и фаервол (нормальный) с такой программой покончит, ибо такой метод используется для вирусов и т.п.,
2. Это ассемблер, а как его в бейсик встраивать, опять же, чтобы без создания в процессе работы файлов, я не знаю

Ну и на крайняк - про снятие блокировки, как автору хочется, также там почитать можно :? вот, теперь место положения звона я установил точнее
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

Crio
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 84
Зарегистрирован: 21.05.2007 (Пн) 12:01
Откуда: Питер

Сообщение Crio » 23.05.2007 (Ср) 8:31

БОЛЬШОЕ ВАМ ВСЕМ СПАСИБО!

Особенно Wolfie.

Если загружать в память отдельную программу, то пример я нашёл прямо на VBStreets, в разделе FAQ, Выпуск 1.

http://www.vbstreets.ru/FAQ/default.aspx

Правда, это пока для меня сложновато...
Если всё же разберусь, то можно я код выложу?

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 23.05.2007 (Ср) 14:01

Crio рад что был полезен =) Я бы посмотрел код с результатом, мало ли для чего понадобится, мне кажется в этом топике он будет вполне уместен!
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

Cytron
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 266
Зарегистрирован: 15.02.2007 (Чт) 21:09

Сообщение Cytron » 24.05.2007 (Чт) 11:38

[offtopic] кто нить выложите все выпуски FAQ как аттачмент на форуме, с простого сайта скачать не возможно.. [/offtopic]


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 81

    TopList  
cron