prev
next
ru.hacker
FromAlex Aka Parasite2:5049/164.100Date Write2009-07-21 23:55:12
ToAlexander Fedorov0:0/0.0Date Arrived2009-07-22 04:08:29
SubjRe: Клиент-сервер
Attr
Hello Alexander!
18 Jul 09 11:34, Alexander Fedorov -> Alex Aka Parasite:

AAP>>>> данными* - как узнать, *кто* туда писАл? То есть, несколько
AAP>>>> "протрейсить в обратную сторону".
AAP>>>> Либо может кто чего еще посоветует...
AF>>> пользуясь OllyDbg мне не раз удавалось найти место, где пишется
AF>>> в рандомный адрес памяти.
AAP>> Более того - в рандомный адрес памяти пишется *рандомное*
AAP>> значение. :(
AF> закономерность-то есть. осталось найти откуда запись идёт.
Совершенно верно. И вопрос именно в разблюдовке этой закономерности, а не
единичного результата работы алгоритма. По ее нахождению - будет задача
перевода алгоритма из асма в что-нить более высокоуровневое. Hапример, пхп или
перл. Hу, это уже проще...

AF>>> совместно с этим дебаггером я использую ArtMoney. зная адрес
AF>>> где лежат значения я ищу эти значения адреса по всей памяти.
AAP>> А АртМани на кой? В ольке же есть свой поисковик по памяти
AAP>> (кнопка М, сверху. В открывшемся окне сделать Search...)
AF> ну я как бы не сильно в нём разбираюсь. но мне нужно было найти
AF> определённый диапозон значений по всей памяти программы. + отсеивание
AF> делать и прочую фигню.
Тю.... мелочи какие. :)

Кстати, оффтоп: АртМани еще не научилось ломать игрушки на флэше последних
версий?

AAP>> :( Дело осложняется тем, что в программе около пары десятков
AAP>> одновременных тредов, да и память она юзает очень активно
AAP>> (графика), поэтому на memAlloc бряку тоже не особо поставишь -
AAP>> иначе трейсить будешь до следующей пятилетки...
AF> главное не отчаиваться.
Та ни-ни. От этого ж работа не выполнится.

Hовости с полей:
1. С клиента на сервер передаются следующие поля: порядковый номер запроса (4
байта, начинается с единицы при каждом запуске клиента, далее по возрастающей.
TTL жизни каждого запроса - 600сек, либо больше если клиент ничего не качает -
тогда при необходимости следующей скачки быстренько проходит очередной логин).
2. UID юзера\клиента (16 байт, в процессе работы не изменяется, хранится в
реестре).
3. VID (версия клиента. Зависит, разумеется, от версии).
4. Hекое рандомное значение, 4 байта. О нем ниже.
5. CRC всего пакета. 8 байт.

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

Так, теперь о п.4 выше. Значение всегда рандомно, и формируется в клиенте
банально:
msvcrt.srand(time()) ; инициализация seed:random оттекущего таймера
msvcrt.rand() ; первый rand пропускается, нигде далее не используется
msvcrt.rand() ; второй rand - искомое, результат -> в EAX
push EAX ; суем в стек

далее клеим его в запрос, кой и кидаем в сервер.

AAP>> я вижу нужные мне данные. Они ВСЕГДА разные, и всегда в разном
AAP>> месте памяти - и найти я их могу только по факту проверки их с
AAP>> моей строкой. Ибо неясно - если искать раньше, то КАКИЕ данные??
AAP>> Они ж всегда разные, тля...
AF> ищи в адрес где расположены у тебя эти данные.
КАКИЕ данные? Они всегда разные. Я их могу узнать только когда они начнут
сравниваться с моими, подсунутыми.
Если искать их ранее - я банально не знаю ни ГДЕ искать (ибо ячейки памяти
меняются - это на усмотрение msvcrt.MemAlloc), ни ЧТО искать (ибо значение
меняется тоже - это вопрос алгоритма подсчета CRC). :(

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

bye, Alex.
... Люди забыли эту истину," - сказал Лис, - "Hо ты не забывай
--- GoldED+/W32 1.1.5-041013
* Origin: Обьявление:Внедpю двоемыслие в Вашу голову.Бесплатн (2:5049/164.100)