Сейчас на форуме: Rio, vsv1 (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Изменение длл
Посл.ответ Сообщение

Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 апреля 2008 12:15
· Личное сообщение · #1

Драсте. Сейчас долблюсь над одной прогой - error smart (версия 2.7.2861.900). Защита там не очень и сложная но я наткнулся на другую проблему. Мне надо изменить длл . В файле все изменил , но в памяти когда загружается дллка код остается первоначальным. Как бороться с этой заразой?
Прогу не получается выставить- огромная скотина.



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 18 апреля 2008 13:12 · Поправил: HandMill
· Личное сообщение · #2

Лови на LoadLibrary (если этим методом происходит загрузка) из exe (тоесть вообще патчи exe, а не dll в файле, а сам exe уже будет патчить dll в памяти). Если же загрузка dll статическая - то патчи по импорту(тоесть базовая точка будет любая функция из таблицы импорта dll). Потом отсчитывай от места загрузки / адреса из таблицы импорта адрес того что ты там собираешься патчить. Тоесть идея состоит в том, что бы пропатчить ехе, а он уже в процессе будет изменять код dll. Ну и вот приблизительно что у тебя может получится:

call LoadLibraryA
__exe: jmp patch_place ; передаём управление на наш патч

xxxxxxxx

patch_place:

mov __exe, ORIGINAL_CODE ; восстанавливаем в ехе оригинальный код
add eax, PATCH_ADDRESS ; получаем адрес места где собираемся вносить изменения
mov dword ptr ds:[eax], PATCH_DATA ; патчим нужное место столько раз, сколько тебе нужно
mov dword ptr ds:[eax+4], PATCH_DATA ; патчим нужное место столько раз, сколько тебе нужно
sub eax, PATCH_ADDRESS ; восстанавливаем содержимое регистра eax
jmp __exe ; передаём управление на оригинальный код

Быть может это изврат, но таким вот образом можно патчить и пакованные dll (например накрытые аспром) причём абсолютно без распаковки и в обход всяких там механизмов антиотладки(ессесно не крутых).
З.Ы.: а луче для новичка - сварганить search and replace patch - так долго думать не прийдётся пропатчилось оно или нет(лог покажет)

-----
все багрепорты - в личные сообщения




Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 18 апреля 2008 13:21
· Личное сообщение · #3

pycha пишет:
В файле все изменил , но в памяти когда загружается дллка код остается первоначальным.

Варианты:
1. Скорее всего ты промахнулся в файле. Менял что-то где-то не там.
2. Ты уверен, что в памяти осталось как было? Может быть это только отладчик так показывает. Проверь наверняка. В ольки грохни файл(ы) анализа (*.udd).
3. Теоретически код может "перезаписываться" по ходу выполнения программы. Проверить это просто - если секция кода НЕ имеет атрибут записи (как обычно), значит такого быть не может.
4. Ты уверен, что файл пропатчил вообще? Проверь в Hiew'e или каком-нибудь дизасме.

-----
Всем привет, я вернулся




Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 18 апреля 2008 22:01 · Поправил: pycha
· Личное сообщение · #4

В файле я точно не промазал в Hdasm показывает что все пропатчено а адреса в файле точно такие как и в памяти . Ради чистоты эксперимента переимновал длл и переместил в другую папку. В памяти она всеравно была ( хоть и в папке не создалась)
Вот часть кода проги где идет вызов длл.
.text:0041A17E mov eax, [esp+30h]
.text:0041A182 push eax
.text:0041A183 lea ecx, [esp+18h]
.вызов на длл text:0041A187 call ds:?Compare@?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@A TL@@QBEHPBD@Z ; ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::Comp are(char const *)
.text:0041A18D test eax, eax
.text:0041A18F jnz short loc_41A1D3
.text:0041A191 push ecx
.text:0041A192 lea edx, [esp+18h]
.text:0041A196 mov ecx, esp
.text:0041A198 mov [esp+24h], esp
.text:0041A19C push edx
.text:0041A19D call ds:??0?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@QA E@ABV01@@Z ; ATL::CStringT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::CStr ingT<char,StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>(CStringT<char, StrTraitMFC_DLL<char,ATL::ChTraitsCRT<char>>>::CStringT<char,StrTraitM FC_DLL<char,ATL::ChTraitsCRT<char>>> const &)
.text:0041A1A3 push 1
.text:0041A1A5
.text:0041A1A5 loc_41A1A5: ; CODE XREF: .text:0041A12Aj
.text:0041A1A5 ; .text:0041A153j ...
.text:0041A1A5 call sub_41A3B0
.text:0041A1AA push 0
.text:0041A1AC push 0
.text:0041A1AE push offset aApplicationReg ; "Application registered!"
.text:0041A1B3 call ?AfxMessageBox@@YGHPBDII@Z ; AfxMessageBox(char const *,uint,uint)
.text:0041A1B8 mov ecx, dword_455BCC
.text:0041A1BE mov eax, [ecx]
.text:0041A1C0 mov edx, [ecx+1020h]
.text:0041A1C6 mov eax, [eax+164h]
.text:0041A1CC
Как мне новичку легче будет найти нужный код в проге?
HandMill З.Ы.: а луче для новичка - сварганить search and replace patch - так долго думать не прийдётся пропатчилось оно или нет(лог покажет) -
я смысл вродебы понял , переспрошу - попытатся найти индентичный код в ехе и его там изменить?




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 21 апреля 2008 22:49
· Личное сообщение · #5

ОМГ) какой ясный код )
А что за либа? Может, она вообще системная или mfc ))

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 22 апреля 2008 10:08
· Личное сообщение · #6

Ну что же, она не системная, лежит в подпапке Microsoft.VC80.CRT название msvcr80.dll путь к ней проходит через еще 2 длл одна из которых mfc80.dll



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 22 апреля 2008 14:15
· Личное сообщение · #7

pycha Вообще-то в полной Visual Studio 2005 их 2 - одна для 32-бит и вторая для 64-х



Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 22 апреля 2008 19:07
· Личное сообщение · #8

Я тебя видно не понял , к чему тут visual studio ? Эти файлы были в подпапке проги error smart или ты имееш ввиду что эта прога входила в комплект к VS?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 23 апреля 2008 08:25
· Личное сообщение · #9

pycha Ты посмотри в PETools действительно ли DLL подгружена из папки программы или используется ее копия из Windows. Копия может храниться как в system32 так и в WinSxS. И вообще пачит системные длл - это изврат, пропатчи прогу.

-----
Yann Tiersen best and do not fuck




Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 23 апреля 2008 10:29
· Личное сообщение · #10

pychapycha пишет:
Я тебя видно не понял , к чему тут visual studio ?

Я к тому, что нормальная dll весит 600 кило, но я у себя на диске видел у защищенной проги
на 60 Кб и в импорте у нее оля зашита. Возможно и у тебя такая.



Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 23 апреля 2008 13:31
· Личное сообщение · #11

Да спасибо, нашел. Ето системная msvcr80.dll в WinSxS. И изменить ее можно только с другой ОС. Мне нужно изменить ее потомучто если просто меняеш прыжок то выкидывает мэсаг что прога зарегана, но прога так и остается не зарегистрированой. Или же я чтото не доглядел.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 23 апреля 2008 16:06
· Личное сообщение · #12

pycha пишет:
Или же я чтото не доглядел

Уже лучше. Начинаешь соображать
На будущее, чтоб разговор складывался проще, ссылку на жертву и конкретные действия (патчил файл-такой-то по смещению такому-то).

pycha пишет:
если просто меняеш прыжок то выкидывает мэсаг что прога зарегана, но прога так и остается не зарегистрированой

Давай думай.
Вызывается func1, ты меняешь результат после выхода, а прога по прежнему ограничена.
Если меняешь значение в func1, то всё ок.

Что это означает?

-----
Всем привет, я вернулся




Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 24 апреля 2008 01:22 · Поправил: pycha
· Личное сообщение · #13

Вот именно вся проверка (как я понимаю) идет в длл файлах и если я не ошибаюсь то все системные .Изменение длл нужного эфекта не дало . Прогу иследую дальше. Не выставлял прогу ибо папка с установленой прогой весит 32 метра , сегодня наконец-таки (наконецто :s6догадался посмотреть на установщик, а он весит всего 2.3 метра. Вот собственно и он http://slil.ru/25724006 http://slil.ru/25724006 У меня медленный и не очень дешовый gprs поэтому я думаю что меня поймут почему не вылажывал .



Ранг: 75.0 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 24 апреля 2008 08:41 · Поправил: Rush
· Личное сообщение · #14

pycha
Ничего там менять не надо в системных длл. Проверка примитивная, можешь для самообучения кейген намутить (навскидку там все просто).

Вот здесь смотри регистр eax
.text:0041A103 mov eax, [esp-0EC0h+RegCode] - серийник на имя
.text:0041A107 push eax
.text:0041A108 lea ecx, [esp-0EBCh+RegCode2]
.text:0041A10C call ds:MFC80_1482
.text:0041A112 test eax, eax
.text:0041A114 jnz short loc_41A12C

Где-то выше генератор серийника от имени.

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

R.$. Посмотрел повнимательнее - там по ходу дела 3 варианта серийника (триал, полный и еще что-то) судя по количеству констант, от которых он генерится и количетсву проверок.
До кучи есть еще интересное место:
.text:0040D07D mov eax, [esp+24h+arg_0]
.text:0040D081 setnle bl
.text:0040D084 test eax, eax - вот здесь eax должно быть больше 2
.text:0040D086 jnz short loc_40D0BA
В этой функе проверяется триал и т.д. Эта хрень запускается из многих мест в проге.
Вот тебе сколько задачек - разбирайся, отламывай, кейгень и т.д.



Ранг: 6.0 (гость)
Активность: 0.010
Статус: Участник

Создано: 24 апреля 2008 11:01 · Поправил: pycha
· Личное сообщение · #15

Я просто увидел что в msvcr80.dll для того чтобы прога выкинула сообщение что она зарегана (чтобы не сработал проыжок 0041A18F ) в функции по адресу 78144В20 должен обнулятся еах, что собственно я хотел и сделать. Я всех системных длл не знаю, а темболее клон лежал в подпапке проги вот я и подумал что все происходит в нем
PS Так и не пойму зачем он там



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 24 апреля 2008 12:36
· Личное сообщение · #16

pycha Ты просто промахнулся. Пропатчив msvcr80 ты отключил выдачу MessageBox в прогах скомпиленых на этой версии студии. А лежит он там - видимо у автора были проблемы с совместимостью и он победил их таким образом.


 eXeL@B —› Вопросы новичков —› Изменение длл
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати