RCE.SU - реверсинг, кодинг, выделенные сервера, ICQ, proxy

Доделка ImageDupeless 1.05

Сразу скажу что это изврат необыкновенный... Многие вещи просто не поддаются логике. Вопервых почему нельзя юзать больше чем 1000 картинок в галерее? автору в лом было юзать динамические массивы? Почему можно увеличивать только первые пять картинок в галерее? Это вобще не поддается обьяснению... Жаба что ли автора давит, что кто-то посмотрит больше чем на пять картинок. Потом в ограничениях написано "не все параметры можно менять". Да прога такая сырая, что на некоторых кнопках даже надписей нету. Естественно тут не поменяешь... И самое прикольное! У него на сайте все пункты скачивания на зываются "Закачать", типа Upload??? Типа сам допиши и залей мне - я как раз прогу поюзаю... Я просто в шоке...

Ладно побурчали и хватит. Ща мозги вправим...

Инструменты: Softice, Windasm или Ida, Hex редактор.

Ограничение в 1000 картинок... хмм. Берем ida или Windasm и ищем 3F8 (это 1000 десятичными). Подход конечно не очень хороший, но смотреть прогу я начал на работе , а айса у мя там не было. Мы найдем несколько мест со сравнениями и несколько push. Естественно нам интересны сравнения. Первые два адреса со сравненем - это 40EF60 и 40EF98. Ставим bpx на эти адреса. Нажимаем в проге "Создать галерею из каталога". И после того как нажмем "Начать" мы попадем в айс по адресу 40EF98 там у нас идет:

.text:0040EF98                 cmp     eax, 3E8h
.text:0040EF9D                 jle     short loc_40EFAF
.text:0040EF9F                 push    3E8h
Типа если меньше 1000 картинок - идем дальше, если больше то все равно обработаем только 1000. Ну тут все ясно надо только чтоб jle прыгнул. Патчим как кому нравится. И все дела.

Теперь о увеличении картинок...
Вот тут изврат. Ставим bpx на Showwindow и кликаем по полосочке слева, около одной из первых пяти картинок. Появится окошко которое мы перехватим и определим потом что вызывалось оно с адреса

.text:00413A9A                 call    ?DoModal@CDialog@@UAEHXZ ; CDialog::DoModal(void)
Вот так аж. Теперь листаем в айсе наверх и смотрим где же начало этой процедуры. А начало вот тут:
.text:004137E0                 push    0FFFFFFFFh
.text:004137E2                 push    offset loc_4832E7
.text:004137E7                 mov     eax, large fs:0
.text:004137ED                 push    eax
.text:004137EE                 mov     large fs:0, esp
Теперь стави брейк поинт на какой-нить а дрес из этого кусочка и кликаем снова. Айс сработает как раз в начале процедуры а теперь давайте смотреть чо делается... Идем... идем... идем... И вот интересное место:
.text:004138B3                 mov     edx, [esp+20h]
.text:004138B7                 or      ebp, 0FFFFFFFFh
.text:004138BA                 lea     eax, [ecx+esi]
.text:004138BD                 lea     eax, [eax+eax*4]
.text:004138C0                 cmp     edx, eax
.text:004138C2                 jge     short loc_4138C9
.text:004138C4                 mov     ebp, 4                 - 4!!!
.text:004138C9 
.text:004138C9 loc_4138C9:                             ; CODE XREF: .text:004138C2j
.text:004138C9                 lea     ebx, [ecx+esi]
.text:004138CC                 sub     eax, ebx
.text:004138CE                 cmp     edx, eax
.text:004138D0                 jge     short loc_4138D7
.text:004138D2                 mov     ebp, 3                  - 3!!!
.text:004138D7 
.text:004138D7 loc_4138D7:                             ; CODE XREF: .text:004138D0j
.text:004138D7                 lea     ebx, [ecx+esi]
.text:004138DA                 sub     eax, ebx
.text:004138DC                 cmp     edx, eax
.text:004138DE                 jge     short loc_4138E5
.text:004138E0                 mov     ebp, 2                 - 2!!!
.text:004138E5 
.text:004138E5 loc_4138E5:                             ; CODE XREF: .text:004138DEj
.text:004138E5                 lea     ebx, [ecx+esi]
.text:004138E8                 sub     eax, ebx
.text:004138EA                 cmp     edx, eax
.text:004138EC                 jge     short loc_4138F3
.text:004138EE                 mov     ebp, 1                 - 1!!!
.text:004138F3 
.text:004138F3 loc_4138F3:                             ; CODE XREF: .text:004138ECj
.text:004138F3                 add     ecx, esi
.text:004138F5                 sub     eax, ecx
.text:004138F7                 cmp     edx, eax
.text:004138F9                 jge     short loc_4138FD
.text:004138FB                 xor     ebp, ebp                 - Пуск :))) !!!
.text:004138FD 
Бред какой-то... чо-то вычитается а потом в ebp остается какое-то число... от 0 до 4. Опа! так это жеж и есть номер картинки... Теперь давайте разиеремся что вычитается.

Как мы видим. Постоянно идет cmp edx, eax. А потом в из eax постоянно вычитается ecx... Для начала посмотрим что попадает в EDX перед этими сравнениями...

.text:004138B3                 mov     edx, [esp+20h]
Ничего не говорит... делаем d esp+20h. И запускаем снова. Пройдем от начала процедуры и посмотрим откуда это данные в [esp+20h] берутся. Идем... и вот!
Как говорит на это место IDA:
.text:0041385D                 mov     [esp+2Ch], edx
.text:00413861                 call    ds:DPtoLP       ; Converts device coordinates
.text:00413861                                         ; into logical coordinates
То есть! Просто берутся координаты курсора! А потом просто вычисляется номер картинки тупым вычитанием размера каждой картинки (они идут по 160 пикселов т.е. A0, в еcx как раз было A0!). А потом в ebp заносится номер картинки через такую тупую систему сравнений (видать пытался запутать).
Ну что ж, поможем автору. Оптимизируем его прогу таким вот образом :)...
по адресу 4138B3:
mov  	eax, edx	; В EDX лежит координата курсора
xor 	edx, edx	; очистка перед делением
mov 	ecx, a0
div	ecx 	; делим на  160
mov	ebp, eax	; в EAX лежит целая часть, т.е. номер картинки.
jmp 	41390A	; перепрыгиваем оставшиеся куски этой порнографии...
Все! Кто сильно хочет - может доделать еще чтоб можно было кликать на рисунки а не на эту узкую полосочку... Проверка идет тут же, в этой процедуре сверху.

P.S. Чувак, открой FTP я тебе прогу закачаю, прям как ты предлагал на сайте :)))))))))


<= Вернуться к статьям


Rambler's Top100