Гайд [Reverse Engineering] Реверсим libsamp.so

enblack

Потрачен
Автор темы
6
8
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В этом гайде я вам покажу способ реверса либы сампа, мы преобразуем псевдокод, пропишем битстрим и узнаем параметры клиент джоина.

Что нам нужно для начала?
умелые ручки и Ida pro + hexrays(https://hex-rays.com/IDA-pro/)

Теперь, возьмем нашу либу
1704393756182.png

Закинем ее в Иду
1704393778448.png

1704393794062.png

тут выбираем ELF TO ARM
1704393813210.png

создадим псевдокод нашей либый
1704393839564.png


1704393848383.png


1704393859154.png


ну либо можно просто ctrl + f5


1704394301754.png


либа декомпилировалась, откроем ее

после того как мы открыли либу ,перед нами стоит такая картина

1704394401736.png

среди всего этого нам предстоит найти параметр RPC_ClientJoin, и тут нам поможет расшифрованная мной либа, я приложу ее ниже, открываем ее

1704394502199.png


как мы видим, тут уже попроще, воспользуемся ctrl + f и впишем RPC_ClientJoin

1704394563021.png

как видим, нашлось, теперь как нам найти этот момент в нашей либе которую мы реверсим, как мы видим мы нашли Int, и в конце есть определенние айди рпс, попробуем найти таким методом, что ж как и ожидалось найти таким методом мы ничего не сможем, поэтому перейдем к рпс 25 в расшифрованной либе

1704394805368.png

здесь мы находим вот такие вот данные, обратим внимание на параметр с текстом "0.3.7" это является версией клиента, попробуем поискать такой же параметр в либе которую мы реверсим

1704394869720.png

и воуаля, мы находим этот момент но в нашей зашифрованной либе, перейдем теперь к расшифровке этих данных, воспользуемся нашей расшифрованной либой.
начнем расшифровывать битстрим
если вы встретите такеие вот данные то не бойтесь, это всегда параметр iVersion, то есть 4057, он статический и никогда не меняется
1704394966043.png

и так, мы дали нашей либе битстрим
1704395098111.png


теперь, наша задача узнать какими битами записываются эти параметры.
для этого обратим внимание на расшифрованную либу

1704395153011.png

это и есть наши биты, то есть
параметр iVersion записывается битстримом в 32 бита
параметр byteMod записывается битстримом в 8 битов
параметр authkey записывается стрингом
параметр authkeylen записывается битстримом в 8 битов
параметр clientver записывается битстримиом в 8 битов
параметр сlientverlen записывается битстримом в 8 битов
теперь напишем хук нашего 25 рпс исходя из полученных данных, писать будем на Lua.

ClientJoin:
local event = require('lib.samp.events')

function event.onSendClientJoin(version, mod, nickname, challengeResponse, joinAuthKey, clientVer, unknown)
    local bs = raknetNewBitStream()
    raknetBitStreamWriteInt32(bs, 4057)
    raknetBitStreamWriteInt8(bs, 1)
    raknetBitStreamWriteInt8(bs, nickname:len())
    raknetBitStreamWriteString(bs, nickname)
    raknetBitStreamWriteInt32(bs, challengeResponse)
    raknetBitStreamWriteInt8(bs, 42)
    raknetBitStreamWriteString(bs, 'E02262CF28BC542486C558D4BE9EFB716592AFAF8B')
    raknetBitStreamWriteInt8(bs, 5)
    raknetBitStreamWriteString(bs, '0.3.7')
    raknetSendRpc(25, bs)
    raknetDeleteBitStream(bs)
    return false
end

на этом наш гайд окончен, за гайд мы с вами разобрали параметр рпс 25 клиентджоин, если тема дейсвительно воспользуется популярностью то я создам вторую, а именно как сделать хандлер рпс и как работать с самповским ХТЕА если вы его встретите при реверсе.

расшифрованная либа(https://drive.google.com/file/d/1ghg6NMtm4THYD02Q0CdYHFNG2wbWW_iu/view?usp=sharing)
 

Вложения

  • 1704395126302.png
    1704395126302.png
    4.8 KB · Просмотры: 387

enblack

Потрачен
Автор темы
6
8
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Чем этот гайд полезен?

Его можно урезать до одной строки:
Нажимаем SHIFT + F7 и пишем "0.3.7" => и если нам повезёт, мы увидим наш clientjoin



Посмотреть вложение 227348Посмотреть вложение 227349
я просто не стал баянить, ибо тогда гайд вышел тупо в три слова "так ну короче, зашли в иду, декомпилировали либу, вписали ctrl + f туда 0.3.7 и готово", и ключевое слово в твоих сообщениях "если повезет", а если не повезет то в моей либе можно будет найти клиентджоин с вероятностью 100%, так как там абсолютно все строки ясны и понятны, гайд по факту призывает активность для более больших гайдов нацеленных на эксклюзивный контент по реверсу
 

atomlin

Известный
587
446
я просто не стал баянить, ибо тогда гайд вышел тупо в три слова "так ну короче, зашли в иду, декомпилировали либу, вписали ctrl + f туда 0.3.7 и готово", и ключевое слово в твоих сообщениях "если повезет", а если не повезет то в моей либе можно будет найти клиентджоин с вероятностью 100%, так как там абсолютно все строки ясны и понятны, гайд по факту призывает активность для более больших гайдов нацеленных на эксклюзивный контент по реверсу
Не совсем понимаю как твой гайд поможет если строки clientJoin*a и ProcessNetwork*a поксорены.
Если бы ты хотел показать что-то уникальное - научил бы находить ProcessNetwork, через который бы попали на функцию отправки ClientJoin*a
 

enblack

Потрачен
Автор темы
6
8
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Не совсем понимаю как твой гайд поможет если строки clientJoin*a и ProcessNetwork*a поксорены.
Если бы ты хотел показать что-то уникальное - научил бы находить ProcessNetwork, через который бы попали на функцию отправки ClientJoin*a
да банально по битам, а нетворк будет если тема заинтересует комьюнити бласт хака, и я действительно выложу годноту, ибо лучше для старта чем хук клиентджоина я не приудмал

к тому же я прикрепил либу с так называемым хандлером рпс, которого будет достаточно чтобы найти 25 рпс, ибо в теме я упоминал не раз либу
 

Sargon

Известный
Проверенный
172
418
не так давно на блэк раше обновили алгоритм декрипта пакетов, я уже его нашел, он у меня есть в трех видах, с++, с#, луа, я бы и сделал уже обход но просто нет времени
 

enblack

Потрачен
Автор темы
6
8
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
не так давно на блэк раше обновили алгоритм декрипта пакетов, я уже его нашел, он у меня есть в трех видах, с++, с#, луа, я бы и сделал уже обход но просто нет времени
Screenshot_2024-01-04-21-26-41-325_com.alif.ide-edit.jpg

делал обход - знаешь, умный - знаешь, не читаешь - умный, помимо алгоритма декрипта пакетов в блэк раше существуют другие проверки, и обходами я не занимаюсь уже как месяца полтора, хотел бы сделать сделал

пытаюсь реверсить как саргон день 1 думаю сделаю обход на блэк рашу
 
Последнее редактирование:
  • Ха-ха
  • Bug
Реакции: atomlin и Sargon

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,780
2,604
Не совсем понимаю как твой гайд поможет если строки clientJoin*a и ProcessNetwork*a поксорены.
Если бы ты хотел показать что-то уникальное - научил бы находить ProcessNetwork, через который бы попали на функцию отправки ClientJoin*a
Если либа не накрыта, то ProcessNetworkPacket найти же легче легкого, найдя в импортах, либо в листинге функций recvfrom, который вызывается в SocketLayer::RecvFrom, в котором же вызывается ProcessNetworkPacket
1704445480894.png
 
  • Эм
Реакции: atomlin

atomlin

Известный
587
446
Если либа не накрыта, то ProcessNetworkPacket найти же легче легкого, найдя в импортах, либо в листинге функций recvfrom, который вызывается в SocketLayer::RecvFrom, в котором же вызывается ProcessNetworkPacket
ProcessNetwork != ProcessNetworkPacket

ProcessNetworkPacket отправляет на обработку только прибывшие пакеты
ProcessNetwork (в сурсах раксампа имеет название UpdateNetwork) взаимодействует с уже почищенными и обработанными пакетами

1704446841736.png
 
  • Нравится
Реакции: whyega52

mhertz

Известный
148
305
Не совсем понимаю как твой гайд поможет если строки clientJoin*a и ProcessNetwork*a поксорены.
Если бы ты хотел показать что-то уникальное - научил бы находить ProcessNetwork, через который бы попали на функцию отправки ClientJoin*a
легко и просто - поиск immediate 0xFD9, попадаешь в обработчик коннекшн суцеедед
работает даже на проектах, на которых изменили версию и вообще айди клиентджоина (блек кака привет), так как челлендж сампа там всё ещё присутствует

Посмотреть вложение 227358
делал обход - знаешь, умный - знаешь, не читаешь - умный, помимо алгоритма декрипта пакетов в блэк раше существуют другие проверки, и обходами я не занимаюсь уже как месяца полтора, хотел бы сделать сделал

пытаюсь реверсить как саргон день 1 думаю сделаю обход на блэк рашу
блек кака в декабрьской обнове сделала новогодний сюрприз, попробуй хотя бы опен коннекшн реплай получить
 

mhertz

Известный
148
305

deroulement

Потрачен
1
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
блек кака в декабрьской обнове сделала новогодний сюрприз, попробуй хотя бы опен коннекшн реплай получить
да нету там никакого сюрприза, если у тебя есть исходники локального сервера сампа, можно и их клиент к локальному серверу подключить, если ты вставишь туда алгоритм декрипта их пакетов
 
  • Ха-ха
  • Bug
  • Эм
Реакции: DedPoet, mhertz и atomlin