1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

VB6. Пишем билдер

Тема в разделе "Visual Basic", создана пользователем chimatii, 1 фев 2010.

  1. chimatii

    chimatii Глобальный модератор

    Регистрация:
    13 окт 2009
    Сообщения:
    0
    Симпатии:
    98
    Баллы:
    0
    Добрый вечер дамы и господа! В данной статье я опишу процесс создания билдера на Visual Basic 6.

    Билдер - программа, которая выдаст другую, настроенную по вашему желанию,
    не используя при этом компилятора (пример - Pinch). Работать с такой штукой удобно: расставил галочки, заполнил поля, нажал создать и вот он - готовый троян с нужными нам данными. А как же написать такое самому?
    Принцип прост - сначала напишем программу, которая будет считывать данные из себя же, потом напишем прогу которая эти данные меняет.

    Сначала напишем программу, которая считывает из себя данные, а именно ресурсы.
    Откроем Visual Basic 6, создадим проект, не содержащий форм и прочих рюшечек (лишний вес нам пока ни к чему;)).
    Для этого можно создать обычный проект, удалить оттуда форму и создать новый модуль.

    [​IMG]

    В новый модуль пишем код:

    Код:
    Public Function BYTES_TO_STRING(bBytes() As Byte) As String
    BYTES_TO_STRING = bBytes
    BYTES_TO_STRING = StrConv(BYTES_TO_STRING, vbUnicode)
    End Function
    
    Sub Main()
    MsgBox BYTES_TO_STRING(LoadResData(100, 1))
    End Sub
    Функция LoadResData считывает массив данных из ресурсов, где 100 - идентификационный номер ресурса, а 1 - его тип, функция BYTES_TO_STRING нужна для того, чтобы преобразовать массив данных в строку. Ф-цией MsgBox мы их (данные) покажем. Скомпилируем Проект1.exe

    Теперь напишем сам билдер.
    Создадим новый проект (Стандартный EXE), откроем окошко кода и объявим следующие API:

    Код:
    Private Declare Function BeginUpdateResource Lib "Kernel32" Alias "BeginUpdateResourceA" (ByVal pFileName As String, ByVal bDeleteExistingResources As Long) As Long
    Private Declare Function UpdateResource Lib "Kernel32" Alias "UpdateResourceA" (ByVal hUpdate As Long, ByVal lpType As Long, ByVal lpName As Long, ByVal wLanguage As Long, lpData As Any, ByVal cbData As Long) As Long
    Private Declare Function EndUpdateResource Lib "Kernel32" Alias "EndUpdateResourceA" (ByVal hUpdate As Long, ByVal fDiscard As Long) As Long
    
    Ф-ции BeginUpdateResource, UpdateResource, EndUpdateResource нужны для редактирования ресурсов.

    Дальше добавим наш Проект1.exe к нашему билдеру, запихнув его в ресурсы.
    Нужно добавить в Инструменты редактор ресурсов. Для этого щелкнем в меню Дополнения > Менеджер дополнений > Resource Editor.

    [​IMG]

    Теперь выберем в инструментах Resource Editor. Там нажмем на кнопочку Add Custom Resource (вторая справа) и добавим наш Проект1.exe, обозначив его тип как "SFX" а имя как "EXE". Щелкнем кнопку Save и сохраним файл.

    [​IMG]

    Теперь вернемся к форме нашего билдера. Кинем на нее текстовое поле txtText и кнопку cmdCreate. Получится что-то вроде этого:

    [​IMG]

    Ну и запишем в процедуру Cliсk нашей кнопки следующее:

    Код:
    Private Sub cmdCreate_Click()
    
    Dim bin_data() As Byte, nf As Integer
    
    Open "c:\proga.exe" For Binary Access Write As nf
    bin_data = LoadResData("EXE", "SFX")
    Put nf, , bin_data
    Close nf
    
    Erase bin_data
    
    End Sub
    
    Пояснение: Здесь мы создаем и открываем файл c:\proga.exe для бинарного доступа и записываем туда наш Проект1.exe из ресурсов.
    Да, файл создали но ресурсы нигде не редактировали, щас исправим :)
    Для удобства я добавил следующую функцию:

    Код:
    Private Function SetResource(lpType As Long, lpID As Long, lpData As String, lpFile As String) As Long
    
    Dim pReturn As Long, rPort As Long
    pReturn = BeginUpdateResource(lpFile, False)
    If pReturn <> 0 Then
     rPort = UpdateResource(pReturn, lpType, lpID, 1033, ByVal lpData, Len(lpData))
     EndUpdateResource pReturn, False
     If rPort <> 0 Then SetResource = True
    End If
    
    End Function
    
    Где lpType - тип ресурса, lpID - имя ресурса, lpData - данные и lpFile - путь к редактируемому фалу.

    Ну и допишем теперь в cmdCreate вызов нашей функции для редактирования ресурса:

    Код:
    Call SetResource(1, 100, txtText, "c:\proga.exe")
    Теперь запускаем билдер, заполняем текстовое поле любыми данными и жмем на кнопку.
    После открываем наш полученный билд по пути c:\proga.exe и видим сообщение с нашим текстом:)
    Собственно, всё!:)

    P.S. Ленивые особи могут скачать исходники билда и билдера во вложении.

    (c) chimatii, xaker.name & grabberz.com​
     
    Последнее редактирование: 4 ноя 2011
    1 человеку нравится это.
  2. lytgeygen

    lytgeygen pacifiste maniaque ..::V.I.P::..

    Регистрация:
    13 окт 2008
    Сообщения:
    431
    Симпатии:
    244
    Баллы:
    0
    не самый лучший вариант создавить билдер методом добовления к стабу файла ресурсов...
    не лучший вариант если содержимое это текст...

    для чтения из файла ресурсов есть несколько функций обращения к нему...
    Код:
     Загрузка текстовых данных
    
    Объект = LoadResString(index)
    
    Index - идентификационный номер строки
    
    Объект - TextBox, Label и все остальное, куда можно грузить текст
    
     
    
    Загрузка графических данных
    
    Объект = LoadResPicture(index,format)
    
    Index - идентификационный номер строки с картинкой
    
    Format - тип загружаемых данных:     VbResBitmap - картинки
    
    VbResCursor - курсоры
    
    VbResIcon - иконки
    
    Объект - PictureBox, Image и все остальное, куда можно грузить графику  
    
    Загружает данные и возвращает байтовый массив
    
    Объект = LoadResData(index, format)
    
    Index - идентификационный номер строки с данными
    
    Format - тип возвращаемых данных в виде байтов:
    
    1     Курсор
    
    2     Графика
    
    3     Иконка
    
    4     Меню
    
    5     Окно диалога
    
    6     Текст
    
    7     Каталог со шрифтами
    
    8     Шрифт
    
    9     Таблица
    
    10    Пользовательские ресурсы
    
    12    Группа курсоров
    
    14    Группа иконок 
     
  3. chimatii

    chimatii Глобальный модератор

    Регистрация:
    13 окт 2009
    Сообщения:
    0
    Симпатии:
    98
    Баллы:
    0
    Не умничай я это все знаю:) ресурс сохраняется не как строка, можешь в рестораторе посмотреть
     
  4. lytgeygen

    lytgeygen pacifiste maniaque ..::V.I.P::..

    Регистрация:
    13 окт 2008
    Сообщения:
    431
    Симпатии:
    244
    Баллы:
    0
    chimati, хочу и умничаю :idea:

    ты хотя бы тестировал ?

    Код:
    b() = Split(a, " ")
    MsgBox b(0)
    MsgBox b(1)
    а почему не все слова ?

    Код:
    For i=0 to UBound(b())
    MsgBox b(i)
    Next
    Добавлено через 3 минуты
    хотябы оформил бы...
     
    Последнее редактирование: 8 фев 2010
  5. chimatii

    chimatii Глобальный модератор

    Регистрация:
    13 окт 2009
    Сообщения:
    0
    Симпатии:
    98
    Баллы:
    0
    Увидел вот статью, которую писал больше года назад:crazy:
    Нашел некоторые ошибки, оформил по-людски, обновил.
    Результат в первом посте)
     
  6. Mr.Burns

    Mr.Burns местная мразь Продвинутый

    Регистрация:
    4 ноя 2010
    Сообщения:
    0
    Симпатии:
    24
    Баллы:
    0
    бедный lytgeygen получил психологическую травму пустот черепной коробки и ночное недержание от вида б-гмерзкого выньапи (буэээ, смотрите, это же винапи на вб6! запинайте его палкой! негодяй!).
    но я до сих пор пью слабительное, дабы вывести из себя всю хворь твоих неграмотных изрыганий, после случайного посещения твоего блога.

    по ссу по ссу тфьу по сути.
    дык если стаб пожат тем же упхом, то кина не будет. оверлей наше всё. да и в самом стабе хватит места для строчки-другой буковок.
     

Поделиться этой страницей