Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
Mamont
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 3
1

Как убрать кусок кода

10.06.2009, 15:16. Просмотров 3113. Ответов 17
Метки нет (Все метки)

Всем, доброго времени суток!
Ситуация следующая. Наш программист, который писал нам под заказ, после завершения своей деятельности посадил нас на крючок, внедрив в программу Dll которая требует обновления каждый месяц. И за обновение, этот находчивый парень просит денег, не больших, но все же...
Я это все рассказываю чтобы сказать, что я не злоумышленник, а просто пытаюсь избавиться от гнета находчивых людей, т.к. за программу деньги заплачены и она является нашей собственностью.
Руководство дало комманду - разобраться!
Я предпринал следующие действия: Пр помощи VB Decompiler разобрал эту dll, нашел кусок кода, который изменился в сравнении со старой Dll. Я программирую на Delphi и не знаю языков низкого уровня, н все же предполагаю, что в этом куске кода есть проверочка на дату, которую просто меняют каждый раз. Теперь я хоч удалить этот кусок из программы...Установил IDA Pro..нашел этот код, вот он:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 .text:110204AF                 jz      loc_110205DA
 .text:110204B5                 mov     edi, ds:__vbaVarDup
 .text:110204BB                 mov     ebx, 8
 .text:110204C0                 lea     edx, [ebp-0C4h]
 .text:110204C6                 lea     ecx, [ebp-44h]
 .text:110204C9                 mov     dword ptr [ebp-0BCh], offset aDdMmmmYyyy ; "dd mmmm yyyy"
 .text:110204D3                 mov     [ebp-0C4h], ebx
 .text:110204D9                 call    edi ; __vbaVarDup
 .text:110204DB                 push    1
 .text:110204DD                 lea     eax, [ebp-44h]
 .text:110204E0                 push    1
 .text:110204E2                 lea     ecx, [ebp-34h]
 .text:110204E5                 push    eax
 .text:110204E6                 lea     edx, [ebp-54h]
 .text:110204E9                 push    ecx
 .text:110204EA                 push    edx
 .text:110204EB                 mov     [ebp-2Ch], esi
 .text:110204EE                 mov     dword ptr [ebp-28h], 40E389C0h
 .text:110204F5                 mov     dword ptr [ebp-34h], 7
 .text:110204FC                 call    ds:rtcVarFromFormatVar
 .text:11020502                 mov     ecx, 80020004h
 .text:11020507                 mov     eax, 0Ah
 .text:1102050C                 mov     [ebp-9Ch], ecx
 .text:11020512                 mov     [ebp-8Ch], ecx
 .text:11020518                 lea     edx, [ebp-0F4h]
 .text:1102051E                 lea     ecx, [ebp-84h]
 .text:11020524                 mov     [ebp-0A4h], eax
 .text:1102052A                 mov     [ebp-94h], eax
 .text:11020530                 mov     dword ptr [ebp-0ECh], offset dword_1100B9A8
 .text:1102053A                 mov     [ebp-0F4h], ebx
 .text:11020540                 call    edi ; __vbaVarDup
 .text:11020542                 lea     eax, [ebp-0A4h]
 .text:11020548                 mov     esi, ds:__vbaVarCat
 .text:1102054E                 lea     ecx, [ebp-94h]
 .text:11020554                 push    eax
 .text:11020555                 lea     edx, [ebp-84h]
 .text:1102055B                 push    ecx
 .text:1102055C                 push    edx
 .text:1102055D                 lea     eax, [ebp-0D4h]
 .text:11020563                 push    40h
 .text:11020565                 lea     ecx, [ebp-54h]
 .text:11020568                 push    eax
 .text:11020569                 lea     edx, [ebp-64h]
 .text:1102056C                 push    ecx
 .text:1102056D                 push    edx
 .text:1102056E                 mov     dword ptr [ebp-0CCh], offset dword_1100BA88
 .text:11020578                 mov     [ebp-0D4h], ebx
 .text:1102057E                 mov     dword ptr [ebp-0DCh], offset asc_1100B998 ; " "
 .text:11020588                 mov     [ebp-0E4h], ebx
 .text:1102058E                 call    esi ; __vbaVarCat
 .text:11020590                 push    eax
 .text:11020591                 lea     eax, [ebp-0E4h]
 .text:11020597                 lea     ecx, [ebp-74h]
 .text:1102059A                 push    eax
 .text:1102059B                 push    ecx
 .text:1102059C                 call    esi ; __vbaVarCat
 .text:1102059E                 push    eax
 .text:1102059F                 call    ds:rtcMsgBox
 .text:110205A5                 lea     edx, [ebp-0A4h]
 .text:110205AB                 lea     eax, [ebp-94h]
 .text:110205B1                 push    edx
 .text:110205B2                 lea     ecx, [ebp-84h]
 .text:110205B8                 push    eax
 .text:110205B9                 lea     edx, [ebp-74h]
 .text:110205BC                 push    ecx
 .text:110205BD                 lea     eax, [ebp-64h]
 .text:110205C0                 push    edx
 .text:110205C1                 lea     ecx, [ebp-54h]
 .text:110205C4                 push    eax
 .text:110205C5                 lea     edx, [ebp-44h]
 .text:110205C8                 push    ecx
 .text:110205C9                 lea     eax, [ebp-34h]
 .text:110205CC                 push    edx
 .text:110205CD                 push    eax
 .text:110205CE                 push    ebx
 .text:110205CF                 call    ds:__vbaFreeVarList
 .text:110205D5                 add     esp, 24h
 .text:110205D8                 jmp     short loc_1102064F
 .text:110205DA ; ---------------------------------------------------------------------------
 .text:110205DA
 .text:110205DA loc_110205DA:                           ; CODE XREF: .text:110204AF j

И собственно вопрос....Как это удалить? Выгрызть? Откустить? Изнечтожит? Чтобы dll не делал проверку на дату...

Заранее благодарен..!!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2009, 15:16
Ответы с готовыми решениями:

Перевести на асемблер кусок кода
while ( val1 <= val2 ) { Printf (“итерация: %d”, ++val1-val1) }

Поясните представленный кусок кода
Здравствуйте, появилась пара вопросов в процессе изучения: 1) читаю документы...

McAfee не видит кусок файла
Мне нужно малость отредактировать один экзешник. Читаю его в Иде, нахожу офсет...

Как убрать мусор до строки
Здравствуйте! Я только начала изучать ассемблер, использую компилятор Tasm...

Как убрать кусок текста
Как убрать кусок текста...

17
Evg
Эксперт CАвтор FAQ
19638 / 7330 / 551
Регистрация: 30.03.2009
Сообщений: 20,502
Записей в блоге: 30
10.06.2009, 15:24 2
В самое начало этого блока поставить операцию перехода на конец этого блока. И чтобы размер файла при этом не менялся. Либо весь этот фрагмент забить нулями (вроде бы так на intel'е nop'ы делаются)
0
Mamont
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 3
10.06.2009, 15:27  [ТС] 3
А как это в IDA сделать? Не редактируется ничего...Может там волшебная кнопка есть или команда?
И еще...А как выглядит это переход в конец блока? Яж чайник в этом деле )))
0
Evg
Эксперт CАвтор FAQ
19638 / 7330 / 551
Регистрация: 30.03.2009
Сообщений: 20,502
Записей в блоге: 30
10.06.2009, 15:33 4
Это я уже сказать не могу. Я ни черта не понимаю во всех этих виндовых программах (в линухе я бы в обычном 16-ричном редакторе сделал). И слабо себе представляю интеловскую систему команд. Но в твоём случае занулено должно быть то, что соотвествует адресам в этом дампе от 110204AF (этот адрес включается) до 110205DA (этот адрес НЕ включается)

С другой стороны, я смотрю, что самая первая операция этого блока - jz (видимо jump if zero). Т.е. надо прямо поверх этой операции влепить безусловный переход вроде бы j). Либо отмотать чуть выше, перед этим должна быть операция сравнения, можно её подхачить
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
10.06.2009, 15:51 5
А можно jz заменить на jnz )))
По поводу редактирования, то можешь скачать HEXDUMP, он это умеет...
Кстати, в IDA вроде тоже есть эта возможность, но точно не помню

Добавлено через 6 минут 49 секунд
Кстати, в IDA есть меню Edit, там есть Code... Наверно, это то самое, что нужно
0
Evg
Эксперт CАвтор FAQ
19638 / 7330 / 551
Регистрация: 30.03.2009
Сообщений: 20,502
Записей в блоге: 30
10.06.2009, 16:06 6
Цитата Сообщение от Haster Посмотреть сообщение
А можно jz заменить на jnz )))
Сейчас оно срабатывает раз в 30 дней, а тогда будет срабатывать 29 раз в 30 дней

Цитата Сообщение от Haster Посмотреть сообщение
По поводу редактирования, то можешь скачать HEXDUMP, он это умеет...
Проблема ведь не в том, чтобы отредакторировать, а в том, чтобы найти место в файле, где редактировать. Адреса, которые тебе печатаются - скорее всего адреса в коде, но не в файле
1
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
10.06.2009, 16:16 7
А ну да, тогда проще действительно безусловный переход вколотить.
Ну в IDA можно понять по какому адресу размещена та или иная команда, ну а далее искать ее в HEXDUMP
0
Evg
Эксперт CАвтор FAQ
19638 / 7330 / 551
Регистрация: 30.03.2009
Сообщений: 20,502
Записей в блоге: 30
10.06.2009, 16:53 8
Цитата Сообщение от Haster Посмотреть сообщение
А ну да, тогда проще действительно безусловный переход вколотить.
Только опкод для этого нужно знать
Если не знаешь - проше весь блок нулями пробить

Цитата Сообщение от Haster Посмотреть сообщение
Ну в IDA можно понять по какому адресу размещена та или иная команда, ну а далее искать ее в HEXDUMP
Я эту прогу никогда не видел - не знаю. Но если можно, значит в IDA выяснить смещение в файде, а в Hexdump'е забить это пространство нулями
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
10.06.2009, 16:59 9
Ну если команда jz равна jmp (т.е. равно по кол-ву байт), то нет смысла забивать все остальное нулями, просто останется подправить несколько бит....
Ну а опкод команды можно узнать в том же IDA... там приводится машинный код, а рядом ассемблерная мнемоника...
0
Evg
Эксперт CАвтор FAQ
19638 / 7330 / 551
Регистрация: 30.03.2009
Сообщений: 20,502
Записей в блоге: 30
10.06.2009, 17:10 10
Цитата Сообщение от Haster Посмотреть сообщение
Ну если команда jz равна jmp (т.е. равно по кол-ву байт), то нет смысла забивать все остальное нулями, просто останется подправить несколько бит....
Ну а опкод команды можно узнать в том же IDA... там приводится машинный код, а рядом ассемблерная мнемоника...
Если можно написать мнемоникой - то какая разница, равно оно по количеству байт или нет. Если больше - значит затрёт часть следующей команды - она же всё равно не нужна. Другое дело, если где-то есть переход вовнутрь этого блока, в этом случае заливание нулями выглядит надёжнее. Хотя если код писался на языке, то наверное такого не будет
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
10.06.2009, 17:13 11
Мнемоникой как-раз писать не получится... мне так кажется... Нужно править непосредственно машинный код. Просто IDA предоставляет эту самую мнемонику, как, в принципе, и большинство других дебаггеров
0
Evg
Эксперт CАвтор FAQ
19638 / 7330 / 551
Регистрация: 30.03.2009
Сообщений: 20,502
Записей в блоге: 30
10.06.2009, 17:15 12
Цитата Сообщение от Haster Посмотреть сообщение
Нужно править непосредственно машинный код.
Значит нужно знать, что конкретно править Товарищ уже сказал, что в этом не разбирается
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
10.06.2009, 17:21 13
Примерно такая последовательность действий:
В IDA ищется мнемоника команды jmp, смотрится соответствующий машинный код, запоминается..
Далее открывается нужный кусок кода (который нужно подправить), выписывается несколько машинных команд до jz, сама команда jz и несколько команд после нее (это нужно, чтобы в HEXDAMP в каше кода найти нужный кусок)... Затем открывается файл в HEXDUMPе, поиском ищется машинный код нужной команды JZ, после чего благополучно меняется на команду JMP
0
Evg
Эксперт CАвтор FAQ
19638 / 7330 / 551
Регистрация: 30.03.2009
Сообщений: 20,502
Записей в блоге: 30
10.06.2009, 18:04 14
> В IDA ищется мнемоника команды jmp, смотрится соответствующий машинный код, запоминается..

Только надознать, что из этих байтов относится к опкоду команды перехода, а что к адресу (смещению). Или на интеле всё делается по границам байтов?
0
Delphin_KKC
UNIX-way
710 / 494 / 49
Регистрация: 15.01.2009
Сообщений: 1,721
10.06.2009, 18:28 15
Цитата Сообщение от Evg Посмотреть сообщение
...весь этот фрагмент забить нулями (вроде бы так на intel'е nop'ы делаются)
В х86 нопы имеют код 90h. Во вложении скрин одной прожки из моей контрольной по асму, запущенной под отладчиком AFD Pro.
0
Миниатюры
Как убрать кусок кода  
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
10.06.2009, 19:17 16
Ну у команды jmp опкод 0xE9, далее идет относительный адрес перехода (для 32-разрядных машин это 4 байта).
Для JZ опкод 0x74, а далее тот же адрес перехода.
Получается, нужно поменять только 1 байт опкода: с 0x74 на 0xE9
0
Mamont
0 / 0 / 0
Регистрация: 10.06.2009
Сообщений: 3
11.06.2009, 15:50  [ТС] 17
А HEXDUMP под винду есть? Или я что-то не то ищу?
0
Haster
инженер-системотехник
111 / 110 / 5
Регистрация: 10.03.2009
Сообщений: 533
11.06.2009, 17:38 18
Скачивай любой HEX-редактор, например WinHEX, или HEX Editor.
0
11.06.2009, 17:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2009, 17:38

Как зациклить кусок кода?
как его зациклить чтобы он выполнялся постоянно private void...

Как вырезать из DLL кусок кода
DLL написана на Visual C++ | native C++. Открыл dll рефлектором: ...

Как создать этот кусок кода
Public Function LabDarbs_2(x) S = 0 i = 1 Lbl: S = S + cos(x^i) i = i + 1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru