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

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

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

Создано: 15 июля 2013 15:52 · Поправил: Sn
· Личное сообщение · #1

Сабж. Киньте ссылок, пожалуйста!
Прога на борланд с++, скорее всего ехе использует собственную проверку md5 хеша...




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 июля 2013 15:59
· Личное сообщение · #2

учебник по ассемблеру почитайте
ссылок в гугле полно




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

Создано: 15 июля 2013 16:01 · Поправил: DenCoder
· Личное сообщение · #3

На вскидку
1) VirtualProtect на патченном участке, запрещаем чтение этого участка + свой обработчик exception, который подсовывает старые данные/код
2) На случай проверки через ReadProcessMemory(GetCurrentProcess(), ....) перехватываем ReadProcessMemory и подсовываем старые данные/код

-----
IZ.RU




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

Создано: 15 июля 2013 16:34 · Поправил: Sn
· Личное сообщение · #4

reversecode, ога, смешно! спасибо

DenCoder, первый вариант не используется точно.
Если патчить в olly и f9 - работает. А вот если изменить незначительно в любом месте строчку когда и Copy to executable и попробовать запустить ехе - уже отказывается работать (запускается, но не коннектится к серверу, выплевывает в общее окно текста: что версия устарела, текст весь этот в открытом виде не хранится)




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

Создано: 15 июля 2013 16:37
· Личное сообщение · #5

Sn пишет:
первый вариант не используется точно.

это варианты обхода

-----
IZ.RU


| Сообщение посчитали полезным: Sn

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

Создано: 15 июля 2013 16:42 · Поправил: Sn
· Личное сообщение · #6

DenCoder пишет:
это варианты обхода

Меня интересует как найти то место, где проверяется целостность ехе файла, и попробовать отключить ее. Патчить отдельно ехе в памяти уже - не интересно




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 июля 2013 16:43 · Поправил: reversecode
· Личное сообщение · #7

Sn а по русски писать не хотите?
потому что если где то то как то понятно почему оно да и раз и не работает если после запуска




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

Создано: 15 июля 2013 16:48
· Личное сообщение · #8

Sn пишет:
Меня интересует как найти то место

Нууу, VirtualProtect тебя и выведет на место, когда сработает exception. Если проверка идёт через ReadProcessMemory с хендлом текущего процесса (-1)(проверить легко бряком на функу), то также если бряк сработает, стек вызовов выведет на место проверки

-----
IZ.RU




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

Создано: 15 июля 2013 16:52 · Поправил: Sn
· Личное сообщение · #9

reversecode, хочу! Если, что-то некорректно обьяснил - извиняюсь.
В общем, если, программу загрузить в олли и, например, занопить незначительную строчку кода, нажать f9 - то программа запустится и полностью будет функционировать.

Но если сохранить данные изменения в файл и пробовать ехешник запустить - работать отказывается должным образом.

DenCoder, благодарю за совет! Теперь понял. Буду пробовать предложенные Вами способы...




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

Создано: 15 июля 2013 16:59 · Поправил: DenCoder
· Личное сообщение · #10

Sn пишет:
Но если сохранить данные изменения в файл и пробовать ехешник запустить - работать отказывается должным образом

А что именно патчили? Адреса патчились? Если да, то на запуске возможно по релокам будет нестыковка, если они есть. И, к примеру, была команда mov eax, [SomeAddr] или push SomeAddr, вы её занопили, лоадер добавил базу образа к 0x90909090 по тому месту и могло получиться так, что появился jmp в непредсказуемое место

-----
IZ.RU





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 июля 2013 17:01 · Поправил: reversecode
· Личное сообщение · #11

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

| Сообщение посчитали полезным: Sn

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

Создано: 15 июля 2013 17:35 · Поправил: Sn
· Личное сообщение · #12

DenCoder, адреса не патчились! Незначительные инструкции, к примеру, занопил инструкцию bound сразу после оеп. скрин: http://rghost.ru/47438249 (или такой пример, взял редактор ресурсов и внес изменения - всё, программа будет выплевывать при старте, что версия устарела)

Попробовал поставить BP на VirtualProtect и ReadProcessMemory, запустил - программа не остановилась...



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

Создано: 15 июля 2013 17:55
· Личное сообщение · #13

Хорошо, попробую по другому.
Какие API могут использоваться компонентом TJvRichEdit для вставки текста?



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 15 июля 2013 17:57 · Поправил: ELF_7719116
· Личное сообщение · #14

Один я не увидел ссылку на target-софт?? Сколько телепатов на форуме водится Может проблема вовсе не в мифической проверке.
Если речь зашла об MD5, то не лишним упомянуть:
Code:
  1.   HMODULE hLib = LoadLibrary(TEXT("Cryptdll.dll"));
  2.   MD5Init = PMD5Init ( GetProcAddress(hLib, "MD5Init") );
  3.   MD5Update = PMD5Update( GetProcAddress(hLib, "MD5Update") );
  4.   MD5Final = PMD5Final ( GetProcAddress(hLib, "MD5Final") );

и соответственно WinAPI MapViewOfFile/UnmapViewOfFile
Sn пишет:
Какие API могут использоваться компонентом TJvRichEdit для вставки текста?

Если действительно RichEdit, то SendMessage. Вообще такие вещи в MSDN смотрят.

| Сообщение посчитали полезным: Sn


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

Создано: 15 июля 2013 18:04 · Поправил: DenCoder
· Личное сообщение · #15

Sn пишет:
Попробовал поставить BP на VirtualProtect

Да на VirtualProtect ставить bp не надо, вам надо выполнить на точке старта программы VirtualProtect, чтобы запретить чтение участков, которые патчились. Вот так:
Code:
  1. sub esp, 4
  2. push esp
  3. push 0x10; запрещаем чтение, оставляем только выполнение.
  4. push size; размер патча
  5. push Address; начало патча
  6. call VirtualProtect
  7. add esp, 4

Это для случая, если патчился код. После вызова функции VirtualProtect, если происходит проверка этого участка в составе подсчёта какой-то контрольной суммы, то сработает exception ACCESS_VIOLATION и в стеке будет инфа об адресе инструкции, которая пыталась обратиться по адресу патча.

Вопрос только в том, как без отладчика заставить прогу вызвать эту функцию - я уже устал это писать, в одном из ответов я уже писал. Например --> здесь <--
Но есть ещё способы, например изменить адрес OEP в PE-хедере, по изменённому адресу прописать код выше и не забыть jmp на OEP.

-----
IZ.RU




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

Создано: 15 июля 2013 18:38 · Поправил: Sn
· Личное сообщение · #16

ELF_7719116 пишет:
Один я не увидел ссылку на target-софт??

http://rghost.ru/47349716 2mb

DenCoder, да целостность проверяется всего файла, а не отдельных кусков в памяти.
Или я, скорее всего, не могу, просто, до конца понять Ваш способ, в силу своей неопытности...




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 июля 2013 19:03 · Поправил: reversecode
· Личное сообщение · #17

Sn пишет:
запускается, но не коннектится к серверу, выплевывает в общее окно текста: что версия устарела, текст весь этот в открытом виде не хранится

не вижу вообще такого сообщения

ищите где вываливается это сообщение, и по цепочке вверх идете и высматриваете свою проверку

а вообще у меня дежавю на эту тему, вчера вроде такое же спрашивали о проверке сервером ?



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

Создано: 15 июля 2013 19:50 · Поправил: Sn
· Личное сообщение · #18

reversecode пишет:
не вижу вообще такого сообщения

Потому что, выше приведен оригинальный ехе шник, не патченный!

А вот патченный http://rghost.ru/47441319 (изменена одна неиспользуемая! программой инструкция по адресу 004022BE, после чего начинаются требования обновить версию программы)

reversecode пишет:
ищите где вываливается это сообщение

Я понимаю, что нужно это искать, но в открытом виде данный текст не хранится и сообщения отдельного не вылазиет, а скидывается в общее окно программы (окно имеет класс TJvRichEdit). Поэтому - для меня это уже проблема...

Есть еще один вариант, когда тело не правлено - вылазиет окно с вводом логин пароль, а когда правлено - данное окно уже не появляется! Думаю попытаться оттолкнуться от этого места.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 июля 2013 20:09
· Личное сообщение · #19

в олли дебагере аттачитесь к программе и по списку окон ищете кто там и где берет это сообщение для вывода
предлагаю продолжить тему после того как вы найдете где находится это сообщение в екзешнике



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

Создано: 15 июля 2013 20:15 · Поправил: Sn
· Личное сообщение · #20

reversecode пишет:
в олли дебагере аттачитесь к программе и по списку окон ищете кто там и где берет это сообщение для выводапредлагаю продолжить тему после того как вы найдете где находится это сообщение в екзешнике

Принял, ушел искать. Благодарю.
Это ничего не дало, разве что узнал, что этих TJvRichEdit там штуки 3 еще есть невидимых на основной форме, виден в реале только один. Возможно, если хеш не совпадает - вместо одного показывается другой?
http://rghost.ru/47443255
http://rghost.ru/47443262



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 15 июля 2013 20:50
· Личное сообщение · #21

Sn пишет:
Принял, ушел искать.

Обратите внимание на CreateFileMapping, MapViewofFile и CreateFile(возможно даже DeviceIoControl). Можно попробовать потянуть за эту веревочку.



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

Создано: 15 июля 2013 21:32
· Личное сообщение · #22

Sn
Сама программа себя в памяти не проверяет, а проверяет сам файл.....




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 15 июля 2013 22:48 · Поправил: DimitarSerg
· Личное сообщение · #23

Не, ну что за "угадалки" от спецов

Code:
  1. 00496F99  |.  B8 EEFE8000   MOV EAX, 0080FEEE                        ; ASCII "/auth code "


Дальше формируется отсылаемая строка, если не поленится и сравнить, можно заметить одно отличие - хеш, да это мд5 исполняемого файла, мд5 оригинального файла 7BB9C957CB5B292E477F715E24317D4D, патченого A3B1F030B6C75C6314BEFB38EEE3B0D5.

Как подменять - решайте сами.

p.s. Я подменил - нормально запустилось (как оригинал, запросило авторизацию). Дерзайте.

-----
ds


| Сообщение посчитали полезным: Sn


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 15 июля 2013 22:54
· Личное сообщение · #24

раздел для новичков) зачем вы ламаете им весь кайф в учебе?
а если нужно что то за когото сделать то есть раздел в запросы или поиск спеца

| Сообщение посчитали полезным: Jaa, Evol, SReg, sendersu, 4kusNick, DenCoder, ELF_7719116

Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 16 июля 2013 08:04
· Личное сообщение · #25

А еще под кайфом были разработчики сего творения, например все тот же CreateFile
Code:
  1. 00459E0C  |.  E8 2BDD3900   |CALL <JMP.&KERNEL32.CreateFileA>        ; \KERNEL32.CreateFileA

вот тут FileName всегда пустой и все эт дело в цикле.

| Сообщение посчитали полезным: Sn
 eXeL@B —› Вопросы новичков —› Где почитать про обход проверки целостности программы
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати