Исследование CuteFTP v3.0.15 beta или красота BitHackaDelphi , Программа и Интерфейс , Исследование программИсследование CuteFTP v3.0.15 beta или красота BitHacka
Оформил: DeeCo 2) HView 3) Spy 4) Немного знаний RE и сообразительности. Вот попался мне этот дистрибутивчик, который, якобы, уже был кракнут, т.е. в нём был ключевой файл, зарегенный на некоего "Ledy-2000", но, как позже выяснилось, этот билт - бетта и там проверка на ключевой файл есть и в меню О программе он пишет - зарегенно, но вот баннер не исчезает! И занимает половину рабочего окна и тянет картинки с завидным упорством. Как оказалось, в этой бете баннер будет всегда, на то она и бета :) Прийдётся "Устранять это недоразумение" (c) Др. Голова Первым делом я вспомнил, что где-то видел тутор el-f'a по поводу исследования похожей программы NetAnts v1.23 с похожим баннером и похожей advert.dll :) Ну я достал его и внимательно изучил. При помощи утилиты Spy я узнал размеры баннерного окна: 468 / 62 Первым делом я пытался отследить создание окон и узнать их размеры: bpx CreateWindowExA do "? *(ebp-18)" при этом высвечивается высота окна. Но! "моей" высоты там не было, а может и была :) вобщем, я решил делать как el-f, я открыл прогу в HVIEW, нажал 2 раза F7 - это поиск по ассемблерной комманде, ввёл "push 3E" (3E = 62)! Т.е. я искал место создания окна и такое вхождение было единственным: :0044BEB5 90 nop :0044BEB6 90 nop :0044BEB7 90 nop :0044BEB8 90 nop :0044BEB9 90 nop :0044BEBA 90 nop :0044BEBB 90 nop :0044BEBC 90 nop :0044BEBD 90 nop :0044BEBE 90 nop :0044BEBF 90 nop :0044BEC0 8B442408 mov eax, dword ptr [esp+08] :0044BEC4 56 push esi :0044BEC5 052CFEFFFF add eax, FFFFFE2C :0044BECA 6A40 push 00000040 :0044BECC 99 cdq :0044BECD 2BC2 sub eax, edx :0044BECF 6A3E push 0000003E <--вот оно!!! :0044BED1 8BF1 mov esi, ecx :0044BED3 68D4010000 push 000001D4 :0044BED8 D1F8 sar eax, 1 :0044BEDA 6A00 push 00000000 :0044BEDC 50 push eax :0044BEDD 68E8644C00 push 004C64E8 :0044BEE2 8D8E88000000 lea ecx, dword ptr [esi+00000088] :0044BEE8 E8E1470200 call 004706CE :0044BEED 8BCE mov ecx, esi :0044BEEF E8C3160200 call 0046D5B7 :0044BEF4 5E pop esi :0044BEF5 C20C00 ret 000Cкак видите, вначале куча нопов, неспроста это, ох неспроста :) Я, как и el-f заменил push 3E на push 00 и окно исчезло, значит это нужное место, но программа продолжала качать из интернета всякие картинки, хоть их и не видно! Я посмотрел чуть ниже и увидел подозрительный код: :0044BEF8 90 nop :0044BEF9 90 nop :0044BEFA 90 nop :0044BEFB 90 nop :0044BEFC 90 nop :0044BEFD 90 nop :0044BEFE 90 nop :0044BEFF 90 nop :0044BF00 8B442404 mov eax, dword ptr [esp+04] :0044BF04 83EC10 sub esp, 00000010 :0044BF07 56 push esi :0044BF08 8BF1 mov esi, ecx :0044BF0A 50 push eax :0044BF0B E8991E0300 call 0047DDA9 :0044BF10 83F8FF cmp eax, FFFFFFFF <--чего-то сравниваем :0044BF13 7509 jne 0044BF1E <--прыжок на процедуру, больно похожую на загрузку картинки :0044BF15 0BC0 or eax, eax :0044BF17 5E pop esi :0044BF18 83C410 add esp, 00000010 :0044BF1B C20400 ret 0004Опять куча нопов (может пытаются запутать адрес вызова???) По адресу 0044BF13 я заменил jne 0044BF1E на jne 0044BF15, чтобы прыгать не на процедуру загрузки окна, а на следующую строку и запуситл прогу: Никакого окна не осталось! Но осталось родительское окно баннера (сам баннер состоял из 2ух окон: одно родительское, а во втором сам баннер). Нужно теперь убрать родительское окно, а все окна снизу подтянуть до упора под тулбар! Я долго промучался с этим и обнаружил такую вещь: если в Spy сделать окно с баннером Visible=false, то при изменении размеров главного окна окно с баннером исчезает, а все нижние окна САМИ поддтягиваются под самый тулбар! Это значит, что программа сначала узнает размеры окна с баннером, а затем на основе этого "строит" остальные окна, а у el-f'a просто прибавлялось смещение окна и все! Тут можно было бы написать простую консольную программу, которая бы при старте CuteFTP находила бы окно с баннером и делала бы его невидимым и сама бы изменяла размер главного окна, чтобы изменения вступили в силу. Но, я решил встроить в cutftp32.exe небольшую функцию, которая бы делала окно с баннером невидимым: я ставлю брекпоинт bpx GetWindowRect do "p ret"это функция, получающая инфу об окне! вываливаюсь тут: :0046F280 8D45F0 lea eax, dword ptr [ebp-10] :0046F283 50 push eax <--адрес, куда сохранять инфу об окне :0046F284 53 push ebx <--передаём Handle окна :0046F285 FF15C8D64900 Call USER32.GetWindowRect <--получаем о нём инфу :0046F28B 8B35F8D54900 mov esi, dword ptr [0049D5F8]Это место вызывается много раз, так как окон много, теперь нам нужно отследить окно с баннером и сделать его невидимым. Почитав немного "Windows API Reference" я узнал, что высота окна при вызове GetWindowRect будет сохраняться по адресу (esp+48). Теперь нужно найти в программе свободное место (обычно это где-то в районе ресурсов), и вписать туда код, который будет проверять, чтобы в (esp+48) было 3F (размер окна с баннером) и если размер окна равен 3F, то делаем его невидимым. Я нашёл много пустого места по адресу 00506876 делаем так: по адресу 0046F28B делаем безусловный переход на пустое место (00506876) по адресу 00506876 пишем нужный нам код, где предпоследней коммандой должна быть затёртая mov esi, dword ptr [0049D5F8] а последней командой должна быть jmp 0046F290 Итак, по адресу 0046F285 делаем так: :0046F285 Call USER32.GetWindowRect :0046F28B jmp 00506876 :0046F290 nopноп появился потому что на команду jmp ушло на 1 байт меньше, чем было. а по адресу пустого места (00506876) пишем такой код: 00506881: 8B442448 mov eax,[esp+00048] <--записываем в eax длинну окна 00506885: 83F83F cmp eax,03F <--если это не окно с баннером 00506888: 7509 jne 000506893 <--то прыгаем на выход 0050688A: 6A00 push 000 <--если это окно с баннером, то сохраняем параметр Visible = False 0050688C: 53 push ebx <--и Handle окна 0050688D: FF157CD44900 call User32!ShowWindow <--и вызваем функцию ShowWindow 00506893: 8B35F8D54900 mov esi,ScreenToClient <--восстанавливаем затёртую строку 00506899: E9F289F6FF jmp 00046F290 <--возвращаемсятеперь пробуем запустить программу и видим, что больше окна с баннером нет, а все остальные окна подтянуты до тулбара!!! УрА! ВсЁ! Исследовал и наваял туториал: vallkor //PTDS e-mail: vallkor@chat.ru Page : http://vallkor.chat.ru
Исследование программы CuteFTP v3.0.15 beta, в которой был обнаружен баннер, который не мог быть удален из-за проверки на ключевой файл в меню О программе, но благодаря использованию утилит SoftIce, HView, Spy и знаний RE программа была модифицирована для Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Исследование программ ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |