Как заставить LightShot выдавать прямые ссылки

Статус
В этой теме нельзя размещать новые ответы.

NarutoUA

NarutoUA
Автор темы
BH Team
692
1,535
Есть очень много утилит для быстрого создания и редактирования скриншотов и каждая из них имеет свои недостатки и преимущества. В дальнейшем речь будет идти о LightShot, которую я использую уже несколько лет и менять её на аналог в ближайшем будущеем я не собираюсь. Подробней об этой программе можно узнать на официальном сайте или википедии.

1.jpg
Единственный для меня недостаток в этой программе - загрузчик скриншотов в Интернет. Он загружает ваш скриншот на сервера Imgur и возращает ссылку на поддомен оф. сайта программы: prntscr.com . Это не было бы проблемой для меня, если LightShot выдавал прямой линк на скриншот, но, увы, приходилось каждый раз копировать прямую ссылку через контексное меню браузера. Мне надоело повторять эту процедуру каждый раз и я решил это исправить.

Для решения этой задачи я использовал бесплатные опен-сорс отладчик x64dbg и шестнадцатеричный редактор HxD. Зайдя в папку программы, я увидел интересную библиотеку "uploader.dll". Именно ёё я и буду разбирать.

Подключив отладчик к процессу Lightshot, первым делом я решил проанализировать строки этого модуля. Чтобы посмотреть, какие же строки используются в конкретном модуле, нужно сначало перейти к библиотеке в окне дизассемблера: в кладке "Memory Map" найти модуль "uploader.dll" и в контексном меню выбрать "Follow in Disassembler"

8KJyi16.png


Переходим к окну "String references" (Контексное меню -> Search for -> Current Module -> String references). Вбив в поиск "http", наблюдаем картину:

3GHNORT.png

Больше всего меня заинтересовали последние 2 строки, ставим брейкпоинт (F2) на обращение к ним:

https://api.prntscr.com/v1/
http://upload.prntscr.com/upload/%I64d/%s/

Продолжаем работу программы (F9) и делаем тестовый скриншот для отправки. Сработал брейкпоинт на обращение к строке "https://api.prntscr.com/v1/". Перейдя к окну дизассемблера и пролистав немного вниз, можно увидеть, как функция формирует POST запрос к серверу оф. сайта.

ah58FSY.png

Примерно запрос выглядит вот так:

Код:
POST https://api.prntscr.com/v1/ HTTP/1.1
Accept: */*
Content-Type: application/x-www-form-urlencoded
Host: api.prntscr.com
Content-Length: 261
Cache-Control: no-cache

{"jsonrpc":"2.0","method":"save","id":1,"params":{"img_url":"http:\/\/i.imgur.com\/ah58FSY.png","thumb_url":"http:\/\/i.imgur.com\/ah58FSYs.png","delete_hash":"3VYbjevxfJ0qIJw","app_id":"{F1F88C8C-9A9B-45E2-913F-489DF108D86F}","width":450,"height":354,"dpr":1}}

Переходим в конец процедуры (Debug->Execute till return [Ctrl+F9]) и выходим из неё (Step into [F7]).

ZUeiAch.png

Далее следует вызов WinAPI функции SendMessageW, которая отравляет окну или окнам некое сообщение. В данном случае некому окну программы отправляются две URL:


5E8A9D90 | lea eax,dword ptr ss:[esp+14] | ;[esp+14]:http://prntscr.com/agjj4l
5E8A9D95 | lea eax,dword ptr ss:[esp+20] | ;[esp+20]:http://i.imgur.com/jMfEuFPs.png

Пропускаем несколько инструкций (F8) вместе с вызовом SendMessageW и смотрим результат:

pUh1oX1.png

Видимо SendMessage отправило окну указание вставить первую ссылку в EditBox. Интересно, зачем вторым параметром передается прямая ссылка на Imgur? Попробуем подменить передачу первой строки на вторую. Ставим брейкпоинт (F2) на инструкцию:

5F529D90 | lea eax,dword ptr ss:[esp+14] | ;[esp+14]:http://prntscr.com/agjn4j

Теперь перезапускаем программу, пробуем загрузить новый скриншот на сервер и идем до последней точки останова (ту, на которой мы остановились впервые, можно удалить/выключить во вкладке "Breakpoints")

TWV9TSy.png


Кликаем два раза на инструкцию и в появившемся окне

uRQRvkS.png

Смещение 0x14 (первая ссылка) меняем на 0x20 (вторая). Закрываем это окно, и запускаем программу (F9).

zRQJvs1.png

Вуаля, получилось! Работает, даже если включить в настройках автоматическое копирование ссылки и закрытие окна. Теперь осталось пропатчить файл "uploader.dll". Перед закрытием отладчика скопируем смещение для дальнейшего патчинга. На инструкции вызываем контексное меню -> Copy -> RVA. От полученого шестнадцатеричнего числа нужно вычесть 0xC00 (например, в стандартном калькуляторе в режиме "Программист"). У меня вышло число 0x19190. Теперь можно закрыть отладчик.

Запускаем HxD, открываем в нём файл. В главном меню жмём "Поиск -> Перейти... (Ctrl+G)". Переходим в сохраненному выше смещению.

aFVmWnv.png

Перед патчингом библиотеки делаем бэкап и закрываем LightShot. Меняем 14 на 20, сохраняем файл, запускаем скриншоттер и проверяем работоспособность. Если всё правильно сделали, у вас обезательно должно получится. Если что-то пошло не так, в аттаче лежит пропатченный мною файл.

Вот так вот изменением одного байта в программе можно существенно упростить себе жизнь.
 

Вложения

  • uploader.dll
    256.5 KB · Просмотры: 293

RanGoo

Известный
27
2
Я тоже мучился это проблемой спасибо ты спас многим жизнь :)
 
  • Нравится
Реакции: ufard

BROalex

Известный
65
37
Вот он не так давно обновился и теперь при скриншоте он открывает новую вкладку. Можно ли сделать, что бы как раньше скриншот делался в той же вкладке? Очень неудобно стало
 
  • Нравится
Реакции: Gunirs

NarutoUA

NarutoUA
Автор темы
BH Team
692
1,535
Вот он не так давно обновился и теперь при скриншоте он открывает новую вкладку. Можно ли сделать, что бы как раньше скриншот делался в той же вкладке? Очень неудобно стало
Щас бы статью не читать и думать что речь идёт об плагине для браузера.
 
  • Нравится
Реакции: SR_team

Inkoo

Новичок
12
1
Просто лучший))) Сам давно юзаю LightShot и тоже напрягало постоянное копировании ссылки скриншота с бразуера. Но ты облегчил задачу. От души :good:
 

Ded_1313

Новичок
2
0
РЕБЯТА !!!! РАБОтаеТ !! С ТРеТЕГо скрина все запахало.
Ты реально моодец, огромное спасибо. !!! КАчайте.
Даже не желею что тут зарегался ради того чтобы скачать !!
ССылки реально прямые ////// EEEEEEEEEEEEEE
 
Статус
В этой теме нельзя размещать новые ответы.