| quest_for_glory ( @ 2005-07-03 01:40:00 |
Суббота
Результат субботы таков: написана функция, которая по входным данным (сырые данные + 3 магических числа) генерит правильный пакет. Прям хоть бери и отсылай :)
Среди магических значений одно пытался проследить, но дело осложнилось Армадиллой. Статически анализировать не получается, так как то и дело в коде стоят весёлые jmp в память (где на момент дампа и была армадилла). Прыгаем на код, который делает какую-то белиберду (обменимает по пять раз регистры, пушает-попает, и т.д.) а в конце - опять прыгает назад, на следующую инструкцию за первым jump'ом. Это, насколько позволяют мне туманные знания, "полиморфный код", т.е. он делает какие-нибудь простые действия, типа вот я раскопал, делается два push'а, но вокруг наворочено всякой разной херни, так что сразу и не разглядеть. Короче, защита, бля. Наверное, мне даже не понадобится это всё анализировать, так как в конце всё приходит в нормальную функцию.
Ещё сегодня воровал код :) Чтобы не было проблем с блоуфишем, я выдрал контекст (1048h байт кстати, довольно дохрена), и функции. Распихал их по __declspec(naked) __stdcall функциям, которые полностью состоят из блока __asm. Что порадовало - копипейст из иды абсолютно нормально кушается студией. Хотя, наверное так и должно быть, хз. Сначала возился с аргументами - т.е. вот я вижу, что функция принимает 3 аргумента, я и пишу их все. Потом до меня дошло, что нахрен это не надо, так как функции напрямую не зовутся, только из __asm'а. Теперь все функции (), что смотрится довольно странно, так как я точно знаю, что вот эта функция принимает один, а вот эта - три агрумента.
Короче, надо ботанить recv. Думается мне, потом сразу можно будет писать клиента.
Результат субботы таков: написана функция, которая по входным данным (сырые данные + 3 магических числа) генерит правильный пакет. Прям хоть бери и отсылай :)
Среди магических значений одно пытался проследить, но дело осложнилось Армадиллой. Статически анализировать не получается, так как то и дело в коде стоят весёлые jmp в память (где на момент дампа и была армадилла). Прыгаем на код, который делает какую-то белиберду (обменимает по пять раз регистры, пушает-попает, и т.д.) а в конце - опять прыгает назад, на следующую инструкцию за первым jump'ом. Это, насколько позволяют мне туманные знания, "полиморфный код", т.е. он делает какие-нибудь простые действия, типа вот я раскопал, делается два push'а, но вокруг наворочено всякой разной херни, так что сразу и не разглядеть. Короче, защита, бля. Наверное, мне даже не понадобится это всё анализировать, так как в конце всё приходит в нормальную функцию.
Ещё сегодня воровал код :) Чтобы не было проблем с блоуфишем, я выдрал контекст (1048h байт кстати, довольно дохрена), и функции. Распихал их по __declspec(naked) __stdcall функциям, которые полностью состоят из блока __asm. Что порадовало - копипейст из иды абсолютно нормально кушается студией. Хотя, наверное так и должно быть, хз. Сначала возился с аргументами - т.е. вот я вижу, что функция принимает 3 аргумента, я и пишу их все. Потом до меня дошло, что нахрен это не надо, так как функции напрямую не зовутся, только из __asm'а. Теперь все функции (), что смотрится довольно странно, так как я точно знаю, что вот эта функция принимает один, а вот эта - три агрумента.
Короче, надо ботанить recv. Думается мне, потом сразу можно будет писать клиента.