IT POLICE
رفتن به کانال در Telegram
👮♂️➡️👨💻 💬: https://t.me/codelords 💾: https://github.com/Bednyakov 🌇: https://www.instagram.com/arty.mem
نمایش بیشتر637
مشترکین
اطلاعاتی وجود ندارد24 ساعت
اطلاعاتی وجود ندارد7 روز
+630 روز
آرشیو پست ها
637
Листинг Hamster Kombat под большим вопросом
Оказалось, что правообладатель еще в 2020 обратился в один из IT-холдингов с целью привлечения инвестиций в размере $600к, на что получил положительный ответ, в обмен на долю в 18,6%.
А после успешного запуска владельцы Hamster Kombat просто кинули инвесторов.
Вероятнее всего дальше будут судебные тяжбы и выход на биржу может не состояться.
637
+1
Выглядит это так ( пик.1)
В игре у моего персонажа было 12345 монет, это значение я и ввел. Однако программа нашла слишком много адресов с идентичными значениями, поэтому в игре я собрал еще немного голды, изменив количество монет у персонажа, и отфильтровал адреса уже по новым данным. Во второй раз адресов было значительно меньше и я решил дальше не фильтровать, а изменить значения во всех. В итоге мой персонаж стал почти миллионером (совсем уж наглеть не стал).
Что сказать, я доволен, и могу без всяких там читов чистить данжы, закупившись хилками на все деньги.
Кто желает воспользоваться программой или дополнить её: репозиторий PyMoney.
Благодарю за внимание!
637
Метод search_next_value
def search_next_value(self, addresses: list, next_value: int) -> list:
search_results = []
search_bytes = ctypes.c_uint32(next_value).value.to_bytes(4, byteorder='little')
for address in addresses:
if self.is_memory_readable(address):
try:
buffer = self.pm.read_bytes(address, 4)
except pymem.exception.MemoryReadError:
continue
if buffer == search_bytes:
search_results.append(address)
return search_results
Эта функция ищет новое значение (next_value) только среди адресов, найденных на предыдущем этапе поиска.
Функция принимает список адресов (addresses) и значение для поиска (next_value).
Если новое значение найдено по одному из адресов, этот адрес добавляется в список search_results.
И метод replace_value
def replace_value(self, addresses: list, new_value: int) -> None:
replace_bytes = ctypes.c_uint32(new_value).value.to_bytes(4, byteorder='little')
for address in addresses:
self.pm.write_bytes(address, replace_bytes, 4)
print(f"Замена значения по адресу: {hex(address)} на {new_value}")
Функция заменяет значения по указанным адресам (addresses) на новое значение (new_value).
replace_bytes — это новое значение в виде байтовой строки.
self.pm.write_bytes(address, replace_bytes, 4) записывает новое значение в память по указанному адресу.
Вот и всё. Теперь в основной части программы необходимо просто создать экземпляр написанного выше класса с названием процесса игры, и поочередно вызывать необходимые методы, для поиска нужных ячеек, и замены значений. Я не стал мудрить с интерфейсом, и написал простейшее меню в командной строке, с запросами нужной информации у пользователя.637
Метод search_value
def search_value(self, value: int) -> list:
search_results = []
memory_size = 0x7FFFFFFF # Размер памяти для сканирования (большой диапазон)
chunk_size = 0x1000 # Размер блока чтения
search_bytes = ctypes.c_uint32(value).value.to_bytes(4, byteorder='little')
offset = 0
while offset < memory_size:
current_address = self.process_base + offset
if self.is_memory_readable(current_address):
try:
buffer = self.pm.read_bytes(current_address, chunk_size)
except pymem.exception.MemoryReadError:
offset += chunk_size
continue
chunk_offset = 0
while True:
chunk_offset = buffer.find(search_bytes, chunk_offset)
if chunk_offset == -1:
break
# Сохранение адреса найденного значения
address = current_address + chunk_offset
search_results.append(address)
chunk_offset += len(search_bytes)
offset += chunk_size
return search_results
Эта функция выполняет поиск заданного значения (value) в памяти процесса.
memory_size определяет область памяти, в которой будет производиться поиск.
chunk_size определяет, какой объем данных будет считываться за раз (в данном случае 4KB).
search_bytes преобразует значение в байтовую строку для поиска в памяти.
Цикл while offset < memory_size: проходит по всей указанной области памяти, проверяя каждую часть на наличие нужного значения.
self.is_memory_readable(current_address) проверяет, доступна ли память для чтения.
Если значение найдено в текущем блоке памяти, его адрес сохраняется в search_results.
Метод is_memory_readable
def is_memory_readable(self, address) -> bool:
mbi = pymem.memory.virtual_query(self.pm.process_handle, address)
if mbi.Protect & 0xF != 0x0 and mbi.State == 0x1000 and mbi.Protect & 0x100 == 0:
return True
return False
Эта функция проверяет, доступна ли память по указанному адресу для чтения.
Использует функцию virtual_query из библиотеки pymem, которая возвращает информацию о состоянии и защите памяти.
Проверяет, что память доступна, не защищена и не имеет флага PAGE_GUARD.
Продолжение ниже...637
Взламываем игры с помощью Python
В стародавние времена, когда по земле ходили мамонты, а я был в два раза моложе, среди игрового сообщества пользовалась популярностью компьютерная программа для "взлома" игр под названием ArtMoney. С помощью этой софтины можно было не только облегчить себе жизнь в прохождении хардкорного приключения, модифицировав значения ресурсов в игре, но и просто поразвлечься, изучив полюбившийся проект с разных сторон.
А на днях мне вдруг захотелось вспомнить молодость поиграть в бумерский диаблойд под названием Titan Quest, выпущенный аж в 2006 году. Да вот только времени на беготню, прокачку, и вот это вот всё, у меня нет. И ArtMoney нет. Зато есть определенные знания программирования. Вот я и решил совместить приятное с полезным, написав аналог ArtMoney на Python, а заодно стать супербогатым, хотя бы в Titan Quest.
Для этого дела понадобились только Python и библиотека Pymem, с помощью которой можно взламывать процессы Windows и манипулировать памятью (читать и записывать).
Программа состоит из класса MemoryEditor, который отвечает за взаимодействие с процессом игры, поиск и замену значений в его памяти. И функции, которая выступает интерактивным меню для взаимодействия с юзером.
Класс MemoryEditor
class MemoryEditor:
def __init__(self, process_name: str) -> None:
self.pm = pymem.Pymem(process_name)
self.process_base = pymem.process.module_from_name(self.pm.process_handle, process_name).lpBaseOfDll
Конструктор класса принимает имя процесса (process_name), которое нужно открыть (например, process.exe).
pymem.Pymem(process_name) — открывает процесс и позволяет взаимодействовать с его памятью.
process_base — это базовый адрес основного модуля процесса (обычно самого .exe файла).
Продолжение ниже...637
Ютуб ожил, похоже.
Хотя, до сих пор так никто и не признался, кто пихал палки в колёса отечественному зрителю.
UPD на 08.08.2023: опять умер, только теперь уже тестируется полный блок ресурса, а не замедление.
637
from loggers import logger # уже настроенный логгер
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
def get_html(url: str) -> str:
"""
Возвращает HTML.
"""
chrome_options = Options()
chrome_options.add_argument(f"--load-extension={'/home/username/my_project/proxi_extension'}") # подключаем расширение с прокси
driver = webdriver.Chrome(options=chrome_options)
driver.set_page_load_timeout(5)
try:
driver.get(url)
except Exception as e:
logger.error(e)
finally:
html = driver.page_source
driver.quit()
return html
Вот и весь способ. Теперь автоматизированный Chrome будет открывать всё, что не заблокировано в регионе, в котором установлен прокси-сервер.
Надеюсь, что я не побаловал вас диким баяном и кому-то, да помог. Хорошего дня.637
Используем Proxy в Selenium
Привет. Вряд ли эта статья откроет Америку для прожженных разработчиков "парсеров" или тестировщиков, но должна помочь тем, кто работает с Selenium время от времени.
Если вы иногда занимаетесь автоматизированным сбором информации с веб-ресурсов (т.н. веб-скрапинг или парсинг), то однозначно сталкивались с проблемой, что некоторые ресурсы недоступны из некоторых регионов, по разным причинам. Сейчас этой проблемы стало даже чуточку больше. И для преодоления этого препятствия нам помогают прокси-серверы (промежуточные серверы). Однако, если в части библиотек для работы с запросами использование прокси является очевидным решением, идущим из коробки, то такой инструмент как Selenium очевидного встроенного решения или не имеет, или я не смог его обнаружить.
Далее приведу некоторые примеры с использованием Python, но привязки к языку не будет. Решение универсальное, связанное с написанием расширения для веб-драйвера.
В Python для работы с HTTP-запросами любого уровня сложности вполне достаточно встроенной библиотеки Requests. А для использования прокси с библиотекой, достаточно всего лишь передать данные о сервере в качестве аргумента. Например, так:
import requests
proxies = {
'http': 'http://login:password@ip:port',
'https': 'http://login:password@ip:port'
}
url = "https://badsite.com/"
response = requests.get(url, proxies=proxies)
Но для работы со многими современными веб-ресурсами этой библиотеки недостаточно. Например, она не поддерживает JS и нужные данные просто не всегда подгружаются, а ответ приходит неполный. В таких случаях и нужна связка с Selenium, который автоматизирует браузер, может обработать любую веб-страницу, обойти защиту от роботов и так далее.
Разумеется, если вы попробуете открыть с помощью Selenium ресурс, который недоступен из вашего региона, ничего не выйдет. Можно придумать много вариантов решения, но как по мне, самый удобный способ настройки прокси в Selenium- это написать прокси-расширение. В моем случае это будет расширение для веб-драйвера Chrome.
Допустим, у вас есть проект с логикой работы Selenium для получения HTML в отдельном файле main.py. Теперь в директории проекта создадим папку proxi_extension и добавим в неё два файла:
1. manifest.json с таким наполнением:
{
"version": "1.0.0",
"manifest_version": 2,
"name": "Chrome Proxy",
"permissions": [
"proxy",
"tabs",
"unlimitedStorage",
"storage",
"<all_urls>",
"webRequest",
"webRequestBlocking"
],
"background": {
"scripts": ["background.js"]
},
"minimum_chrome_version": "22.0.0"
}
2. background.js с таким наполнением:
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: "ip_address",
port: parseInt("8000")
},
bypassList: ["localhost"]
}
};
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
function callbackFn(details) {
return {
authCredentials: {
username: "login",
password: "password"
}
};
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
);
В background.js необходимо лишь заменить значения host, port, username и password на нужные.
Далее возвращаемся к файлу main.py и подключаем к веб-драйверу написанное расширение, указав путь к нему в соответствующем аргументе:637
Российские IT-компании готовятся к массовому отключению иностранных сервисов. Большинство привычных сервисов могу скоро просто отвалиться.
Все из-за санкций Минфина США, которые запрещают предоставление услуг в сфере программного обеспечения, IT-консультирования и проектирования на территории РФ.
Российские IT-конторы, соответственно, вынуждены искать бесплатные альтернативы с открытым кодом, на которые не распространяется запрет, а облачные хранилища теперь — только российские.
Кстати, как я смотрю, Сбер очень активно к этому готовился. У них и IDE на базе PyCharm— GIGA IDE, и гит-платформа GitVerse (полный аналог GitHub), и куча еще всего.
Я пока не особо тестил GIGA IDE, т.к. полностью перешел на майковский VS Code. Но он на базе комьюнити версии, только с разными плюшками и ИИ. А гит-платформа выглядит симпотно, ничего больше сказать не могу. Вероятно, всё это имеет очень хороший смысл, если трудишься полностью в их экосистеме.
В любом случае, молодцы, что предоставляют альтернативу.
637
+3
«YouTube, Google всё»
Москвичей один из интернет-провайдеров предупредил о полном закрытии сервисов Google и замедлении видеохостинга до «непозволительных скоростей».
В целом, не страшно, если вы юзаете ВПН или Прокси. Однако, если с первым всё понятно, то второй вариант, во всяком случае среди моих знакомых, совсем непопулярен. А ведь использование приватного прокси-сервера в разы удобнее, производительнее и безопаснее. И закрывает больше потребностей.
1. Настроив соединение через прокси-сервер вы можете посещать любые ресурсы, которые не запрещены в стране, где этот прокси установлен (я обычно использую США).
2. И этот же прокси можно использовать для работы своего программного обеспечения на удаленном сервере. Например, я использую прокси для работы некоторых своих парсеров с Selenium (я возвысился в своих познаниях до того, что написал расширение для Selenium на JS, оказалось это не сложно). Да и для простых реквестов к "ушедшим" из России ресурсам тоже часто использую прокси.
Короче, прокси- это круто, модно, молодёжно. А сейчас еще и необходимо. И использовать прокси намного проще, чем vpn. Например, использовать вэпэнэ в линуксе без танцев с бубнами сложновато, как по мне.
И информация ниже для тех, кто не в теме, но хочет пользоваться всеми возможностями интернета без лишнего жжения в пятой точке.
Чтобы пользоваться сревером-посредником между вами и ресурсом, вам нужен доступ к этому серверу, т.е. логин, пароль, IP и порт. Есть варианты найти публичные прокси, но этот вариант ненадёжен и небезопасен. Поэтому:
1. Просто купите закрытый прокси на любом специализирующимся ресурсе. Например, на proxy6.net я покупаю IPv4 за 99р в месяц и мне хватает его за глаза для всех нужд.
2. После покупки из полученных логина, пароля и айпишника (см. пик.2) соберите такую строку: login:password@ipaddress
3. В таком виде запишите его в настройках для соеднинения через прокси для http и https.
В Windows: пуск -> параметры -> система -> Прокси сервер -> Настройка прокси вручную (см. пик. 3)
В Ubuntu: Настройки -> сеть -> сетевой прокси -> вручную (см. пик.4)
Порт указывайте в отдельном окне, а не вместе с IP.
Всё, теперь ваш браузер автоматом подхватит настройки и будет без проблем грузить ютубчик и всё остальное. Правда иногда придется его отключать, так как не все отечественные сервисы хотят грузиться через бездуховные прокси.
Если этот пост соберёт что-то, кроме какашек в реакциях, напишу и про использование прокси с Selenium.
637
Владельцам старых телеграм-аккаунтов Дуров насыпет DOGS 🚀
Что-то автоматизировать там и получить больше, чем положено, не получится. Но зато всё честно.
637
Только не говорите, что я один этого не знал.
Если ссылку любого репозитория на GitHub, например такую:
https://github.com/Bednyakov/takewords
Дополнить строкой vscode.dev, чтобы получилось:
https://vscode.dev/github/Bednyakov/takewords
Проект откроется в онлайн редакторе Visual Studio Code.
637
+2
Всем привет. Лето немного замедляет КПД, поэтому ничего новенького тут давно не было, пока занят изучением API-строения на FastAPI.
И, тем не менее, немного полезности для тех, кто качает BLUM и подобное, например с помощью моего скрипта для автоматической игры на билеты. Просто у меня тут опять накопилось больше сотни билетов, решил их слить, а заодно и вспомнил про канал)
Для работы скрипта нужен токен авторизации, который раз в час меняется на новый. Я нашел запросы, которые за это отвечают, но прям лень разбираться в алгоритме получения нового токена. Поэтому хотел просто показать изи способ запуска BLUM в веб-версии telegram и взаимодействия с ним, в том числе, для получения токена.
Чтобы запустить BLUM в барузере Chrome вам просто нужно отключить некоторые заголовки в ответах с сервера. И самый простой способ это сделать- воспользоваться готовыми пресетами уже знакомого многим расширения для браузера Resource Override.
1. Устанавливаем расширение Resource Override и заходим в его панель.
2. Как на пик. 2 к полю со звездочкой (т.е. для всех URL) добавляем правило c изменением заголовков (жмем Add Rule -> Change Headers).
3. В строке For тоже ставим * (потом можете изменить на конкретный ресурс) и нажимаем Edit Headers.
4. Далее делаем как на пик. 3, вверху во вкладке presets из четырех пресетов выбираете первые три.
Всё. Теперь Blum открывается в браузере. Можете взаимодействовать с приложением с помощью ПК, ну а чтобы получить токен, воспользуйтесь инструментами разработчика и загляните в заголовки любого запроса на поле Authorization.
Кстати, тот факт, что разрабы блюма это не фиксят, наводит на мысль, что контора тухлая, и выхлопа конкретно с эйрдропа не будет. А все их заявления, что они кого-то забанят за автоматизацию, попахивают дешевым блефом. Но посмотрим.
637
Создатели Notcoin выкатили либо коллабу, либо свой же проект— Musk Empire
Те же яйца, только в профиль, и с какими-то новыми фишками. Доверие проект буд-то бы вызывает, но...
Защиты от автоматизации похоже опять нет, методы взаимодействия с API почти как у хомяка, авторизация только иная, на первый взгляд.
Автоматизируем?
637
+1
Кстати, я тут еще немного "причесал" свой первый pet-проект, который написал еще год назад. И это не какая-то гриндилка токенов, это так сказать ПОЛЕЗНЫЙ продукт.
Короче, это приложение для изучения английского языка по документации (т.е. когда лень учить язык, но нужен набор слов для беспроблемного чтения документации, например).
Функционал такой:
1. Программа принимает от пользователя URL на страницу с документацией (но и не только).
2. В ответ пользователь получает интерфейс для изучения английских слов по англо-русскому словарю, который был составлен исключительно из нужной веб-страницы.
3. В процессе обучения изученные слова удаляются из базы, пока их вовсе не останется. После чего можно спокойно идти читать документ.
При написании кода были затронуты темы:
- Парсинг веб-страниц с библиотеками requests и bs4.
- Работа с регулярными выражениями.
- Многопроцессорная обработка данных (словарь создается за секунды).
- Работа с базами данных и SQL.
- Создание приложения на Flask (это уже было добавлено относительно недавно, сначала я использовал Tkinter).
- Автотесты (Pytest), но очень слабенько.
- Немного HTML, CSS и Jinja (стили вообще стырены, я в них не бум-бум).
Для начала работы достаточно запустить app.py.
В целом, приложение можно запустить на сервере и открыть для свободного доступа. Для каждого пользователя создается отдельный словарь и друг-другу они не мешают. Хотя над безопасностью в приложении не мешало бы поработать, так как процесса авторизации там нет, "личный кабинет" доступен по IP.
Репозиторий: https://github.com/Bednyakov/takewords
Если приложуха зайдет и не сильно лень, долбаните звездочку на GitHub, мерси боку. Если что-то нужно разобрать по коду программы, всегда готов.
637
Сегодня ночью умирал "хомяк", вместе с ним умер и мой бот. Но я его уже пропатчил.
Репозиторий: https://github.com/Bednyakov/Hamster_Kombat_autoclaimer
Функционал бота:
[x] Клейм токенов раз в 3 часа
[x] Протапывание раз в час
[x] Разгадывание и клейм серкетного слова Hamster Kombat при наличии
[x] Daily reward ежедневно
637
+3
Как получить токен авторизации приложений telegram Mini Apps
Первый и самый простой способ, это открыть web версию telegram в браузере, открыть инструменты разработчика (F12 в Chrome) и во вкладке network посмотреть заголовки запросов, которые шлет клиент приложения. В поле Authorization будет искомый токен.
Однако разработчики всяких крипто-приложений, которые обычно и интересуют автоматизаторов, постоянно прикрывают возможность открытия приложения вне мобильной версии telegram. И тут приходится использовать всякие костыли.
Но в этом посте я поделюсь способом, который мне подсказал @r3mm0dy. Заключается он в использовании отладчика приложения telegram для Android.
В первую очередь, понадобится включить в настройках телефона "Параметры разработчика". Например, на Samsung это делается так: Настройки -> Сведения о телефоне -> Сведения о ПО -> 7 раз быстро нажать на номер сборки -> в меню "Параметры разработчика" включить "Отладка по USB".
Далее открываем приложение telegram на этом же телефоне -> Настойки -> пару раз длительно нажимаем на строку с версией приложения -> в открывшемся секретном меню "включить отладку WebView".
Подключаем телефон к компьютеру по USB и переходим в DevTools браузера Chrome: chrome://inspect/#devices
На телефоне в telegram запускаем нужное приложение и ждем, пока инспектор его определит, после чего жмём "inspect". Всё, теперь все манипуляции с приложением будут отображаться в браузере.
637
Автоматическая игра в BLUM
Если у вас, как и у меня, накопилось много билетов для мини игры в приложении BLUM, но нет времени, чтобы их потратить, попробуйте воспользоваться моим небольшим проектом: репозиторий BLUM_autoclaimer.
Он эмулирует действия клиента на уровне запросов к закрытому API и тратит все билеты, зарабатывая за каждую игру случайное количество очков, но в районе возможного максимума. Каждая игра длится полминуты. Программа завершает работу после того, как все билеты будут использованы.
Для работы программы потребуется токен авторизации.
Пулл реквесты приветствуются.
