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

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

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

Создано: 21 апреля 2007 20:23
· Личное сообщение · #1

всем привет. отлаживаю ща одну программку в ОЛЛИ и записал свой код ей в хвост(это пространство, как я выяснил , не используется программой) чтобы она вместо проверки на правильность ключа записывала его в сообщение (бывшее сообщение об ошибке). вместо процедуры проверки я пишу ДЖАМП на мою процедуру, в ней я (ессесно сделав предварительно pushad & pushfd) заставляю программу писать правильный ключ в память на место "Ключ не верный!",затем делаю ПОПФД,ПОПАД и вызываю оригинальную процу проверки(если ее не вызывать, то все работает нормально, но я сразу попадаю на поздравления с регистрацией, т.к. мой код возвращает Z=1 и JNZ прохожу какбудто код правильный. мне же надо попасть на "не правильное" сообщение(и падчить ее не хочу : моя цель - правильная работа моего кода, а не регистрация программы!), да и малоли что полезное делает та проца помимо проверки) и вот во время этой процедуры проверки вся прога виснет(искл. ситуация).
мой код:
0 pushad
1 pushfd
2 mov esi,dword ptr ss:[ebp-10] ; туда пишется правильный ключ
3 mov edi,00465EB0 ; по этому адресу лежит "Ключ не верный!"
4 mov al, byte ptr ss:[esi]
5 cmp al,0
6 je 11
7 mov byte ptr ds:[edi],al
8 inc esi
9 inc edi
10 jmp 4
11 inc edi
12 mov byte ptr ds:[edi],0
13 popfd
14 popad
15 call 004043CB ; оригинальная процедура проверки , в ней вся проблема: в какой та момент в ней происходит исключительная ситуация.
16 retn ; до него дело ваще не доходит, если вызвать эту процедуру.

писал по памяти ,поэтому адреса могут не совпадать
подскажите пожалуйста мож ПУШАД не все регистры сохраняет и чтото надо самому сохранять, мож со стэком че надо делать...?



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 21 апреля 2007 21:04
· Личное сообщение · #2

push esi
push edi
push eax
mov esi, dword ptr [ebp-10]
mov edi, 00465EB0
loc1:
lodsb
stosb
test al, al
jnz loc1
pop eax
pop edi
pop esi
jmp 004043CB


В оригинальном коде (программы) замени вызов
call 004043CB
на
call НАЧАЛО_ЭТОГО_КОДА

Или же, если все дело в
goga2007 пишет:
мой код возвращает Z=1

добавь после popfd
inc al



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

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

ща сделал, все работает. моя ошибка была в том ,что ret работает в паре с call ,ая писал jmp на мой адресс, поэтому вместо ret надо писать тоже jmp на следующую инструкцию.
но на этом проблемы не кончились: прога проверяет контрольную сумму как оказалось на диске и данная модификация может работать только под отладчиком.
подскажите пожалуйста ,если ктонить знает, как ее можно(и можно ли) заставить перестать проверять эту сумму?



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

Создано: 21 апреля 2007 21:33
· Личное сообщение · #4

goga2007 пишет:
как ее можно(и можно ли) заставить перестать проверять эту сумму?
:
1. вписать вместо значения контрольной суммы которая в программе - своё значение;
2. убрать саму проверку контрольной суммы (программа станет быстрее работать );
3. подменить путь к файлу(если смотрится с диска), чтоб контрольная сумма считалась оригинального файла а не патченного;
4. затереть свой патч в памяти, т.е. вместо байтов патча - выставить оригинальные;
5. сделать лоадер для программы вместо патча - тогда возможно ненадо с контрольной суммой будет возиться.

-----
Само плывет в pуки только то, что не тонет.




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

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

а где почитать как сделать:
2. убрать саму проверку контрольной суммы (программа станет быстрее работать );
4. затереть свой патч в памяти, т.е. вместо байтов патча - выставить оригинальные;
и куда вписывать
1. вписать вместо значения контрольной суммы которая в программе - своё значение;?



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

Создано: 21 апреля 2007 21:52
· Личное сообщение · #6

или вот еще вопрос: КУДА можно вписать свой код, чтобы программа его не могла обнаружить?



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

Создано: 21 апреля 2007 21:56
· Личное сообщение · #7

goga2007 пишет:
2. убрать саму проверку контрольной суммы (программа станет быстрее работать );

bp CreateFileA (W). Дальше по ситуации...



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

Создано: 21 апреля 2007 23:53
· Личное сообщение · #8

щас записал свой код в середину программы(где нашел нули), почемута РАБОТАЕТ. если ктонить знает скажите пожалуйста , эта проверка контрольной суммы не видит изменений в середине программы чтоли????



Ранг: 158.7 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 22 апреля 2007 03:13
· Личное сообщение · #9

Ну если работает, то точно не видит. Проверяет скорее всего файл не целиком, а какой то кусок, ну вот ты на него и попал, когда впервые патчил. А вообще лучше найди её(проверку т.е.) и сам глянь что там да как.

-----
Я ещё не волшебник, я только учусь...



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


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