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

 eXeL@B —› Программирование —› Подскажите пожалуйста, что не так делаю в il-кодах (нужно убрать вызов функции)
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 июля 2007 08:19
· Личное сообщение · #1

Немного истории: есть программа, очень нужная (мне)
Нашел место, в котором вызывается функция проверки ключа, и если проверка не удалась - возникает исключение.
Есть мысль убрать эту проверку.
Дизассемблировал exe-шник
Вычистил StrongKey. (Если после этого снова собрать ехе - то все работает нормально)
Пытаюсь убрать вызов этой фукнции.
/* IL_0037: call void [Licensing.Checker]Licensing.Checker.LicenseChecker::CheckLicense(stri ng,
string,
string)
*/
IL_0037: nop
IL_0038: nop
IL_0039: nop
IL_003a: nop
IL_003b: nop
IL_003c: nop
Заполнил адресное пространство с 0037 по 003с nop'ами.
----Дальше идет то, что после этой функции.
IL_003d: ldarg.0

Запускается программа нормально - но когда попадает на это место - при нажатии кнопки сохранить код - возникает исключение
System.InvalidProgramException: Common Language Runtime detected an invalid program.

У меня два вопроса:
1. Может я чего-то не так понял насчет nop-ов?
2. В тексте исключения пишет, что можно активировать вызов JIT-дебаггера, но у меня не получилось.
Добавил строку <system.windows.forms jitDebugging="true" /> в конфиг-файл ilasm'a и в конфиг моей программы.




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 03 июля 2007 08:29
· Личное сообщение · #2

Большая прога?



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 июля 2007 08:36
· Личное сообщение · #3

Не, небольшая
Оригинальный Exe - примерно 170К
IL-коды - около 190К
После сборки - 150К
Что лучше выложить?



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 июля 2007 08:39
· Личное сообщение · #4

Дистрибутив в архиве чуть меньше 2М




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 03 июля 2007 08:39
· Личное сообщение · #5

ехе, потренируюсь со стронг кей заодно




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 03 июля 2007 08:40
· Личное сообщение · #6

А, тогда дистр.



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 июля 2007 09:14
· Личное сообщение · #7

Кстати, при убирании StrongKey я не нашел AssemlyKeyFile
То есть убрал только PublicKey




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 03 июля 2007 14:49
· Личное сообщение · #8

max_xxx

Попробуй в начале функции, которую нужно убрать, ret поставить.



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

Создано: 03 июля 2007 15:57
· Личное сообщение · #9

nop не нужно ставить, если правиш непосредственно IL код а не в бинарнике, достаточно просто закоментировать не нужные команды. Ошибка скорее всего возникает из-за того что перед вызовом функции что-то помещается в стек а потом оттуда не "вынимается". проверь балансировку стека.

Обрати внимание вот на этот плуг для .NET Reflector: hxxp://sebastien.lebreton.free.fr/blog//archives/9-Reflexil- v0.1.html



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 июля 2007 08:58
· Личное сообщение · #10

jfx
Утилиту скачал - вещь интересная

Появились новости в этом направлении:
посмотрел код до вызова ненужной мне функции - там действительно помещались в стек параметры.
Убрал их - сейчас ошибки при попытке сохранения лицензии нет, но и регистрация не прошла. Хочу попробовать это посмотреть в отладчике.
Сейчас у меня основной вопрос - как можно запустить отладку этого дела?
NIKOLA
Проблема в том, что эта функция находится в другой dll - попробовал ее вчера пересобрать - появились ошибки. Пока, насколько возможно, хочу постараться не трогать ту dll-ку




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 04 июля 2007 09:08
· Личное сообщение · #11

Чтобы нормально пересобрать длл, надо из ехе поудалять:
.assembly extern XY.XYXYXYXYX.Checker
{
.publickeytoken = (DA 71 AC 67 D9 C4 6A 28 )
.ver 2:0:1:32873
}



Ранг: 2.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 04 июля 2007 10:52
· Личное сообщение · #12

Ура
Спасибо большое всем, кто помог
После того, как поставил ret в функции Dll - заработало
Для того, чтобы сама прога заработала - еще один exe-шник пересобрал с небольшими правками и все.
Будем посмотрим во время использования, может быть еще вылезет какая-нибудь хитрая защита




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 04 июля 2007 11:50
· Личное сообщение · #13

max_xxx

На будущее, если хочеш чтобы отладчик всплывал в нужном месте, во-первых - он должен быть установлен (идёт вместе со студией), во - вторых - при сборке, в нужном месте ставиш break, а потом компилиш.
пример:
ilasm test.il /exe /debug /resource=test.res /output=test.exe


 eXeL@B —› Программирование —› Подскажите пожалуйста, что не так делаю в il-кодах (нужно убрать вызов функции)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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