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

 eXeL@B —› Вопросы новичков —› Программа после распаковки(crc?)
Посл.ответ Сообщение

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

Создано: 05 ноября 2010 15:05 · Поправил: criogen
· Личное сообщение · #1

Доброе время суток. Программа была упакована ASProtect [2.4 build 11.20 Release]. Расспаковал используя скрип для OllyDBG by VolX, импорт востановил, программа запускаеться и работает как зарегистрированная. Но через какой-то промежуток времени она выдает сообщение о том что она была взломана и закрывается. При отладке в Олли он пишет что он не может обработать ошибку и EIP улетает непонятно куда. Программа показывает что-то типа MessageBox но закрывается даже до нажатия на нем. Строчек с этим сообщение найти не удалось, вероятно они в зашифрованном виде храняться. Пробывал ставить брекпоинты на GetSystemDate,GetSystemTime они не срабатывают. Помогите, пожалуйста, разобраться с этим, особенно каким способом вы до этого дошли если можно по подробней. Я даже не знаю чего начать чтобы это побороть. Еще один момент, программа написана на Делфи, используеться тяжеловесные компоненты от чего очень много в ней кода, размер EXE >25 мегабайт. При запросе регистрационных данных имя любое, код любые 16 символов( Например : 1234567890123456)
Распакованная версия: (6,5 МБ) ***залил упакованную RARом
http://www.multiupload.com/4D9VETJ1E1
Упакованная версия: (6,5 МБ)
http://www.multiupload.com/YWG3QKAI1X

Заранее благодарен за помощь.
P.S. если ли способ защиты Олли от этого antidebug метода ?




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 05 ноября 2010 16:04
· Личное сообщение · #2

criogen пишет:
Но через какой-то промежуток времени она выдает сообщение о том что она была взломана и закрывается.

А причём тут это
criogen пишет:
Пробывал ставить брекпоинты на GetSystemDate,GetSystemTime они не срабатывают.



criogen пишет:
P.S. если ли способ защиты Олли от этого antidebug метода ?

Попробуй плагины Phant0m или StrongOD.

-----
Лучше быть одиноким, но свободным © $me




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

Создано: 05 ноября 2010 16:22 · Поправил: criogen
· Личное сообщение · #3

BoRoV пишет:
А причём тут это

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




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 05 ноября 2010 16:24
· Личное сообщение · #4

там скорее всего проверка по размеру на распакованость

-----
Лучше быть одиноким, но свободным © $me




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

Создано: 05 ноября 2010 16:43
· Личное сообщение · #5

BoRoV пишет:
там скорее всего проверка по размеру на распакованость

Скореей всего так и есть, но я думаю будет достаточно пропатчить сообщение и выход из программы.
P.S. спасибо, "StrongOD" помог.



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

Создано: 05 ноября 2010 20:48 · Поправил: ELF_7719116
· Личное сообщение · #6

criogen пишет:
Распакованная версия: (25 МБ)

даже если и в делфях, то это явный перебор!! Явно в программе висит длинный хвост от протектора.
Ставь точки останова на чтение кода в секции данных и по местам где патчил переходы на регистрацию.

работает как зарегистрированная сама регистрация идет со стороны аспротекта или из самой программы ??




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

Создано: 05 ноября 2010 23:47
· Личное сообщение · #7

ELF_7719116 пишет:
Явно в программе висит длинный хвост от протектора.

Да ладно. Никакого хвоста там нет. Просто куча ресурсов в exe, вы посмотрите сколько Word весит, там вообще нет протектора.

criogen
Распакованый exe надо было в rar пожать, нахрена 20 метров лишние качать?

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





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

Создано: 06 ноября 2010 00:39
· Личное сообщение · #8

Очень интересная защита. Если ее писал автор этого софта, то снимаю шляпу. Хотя мне кажется это просто на заказ сделано. Там внутри лежит виртуальная длл antihack.dll программа ее сама размещает в памяти. Там длл выделяет память и копирует туда базонезависимый код. Код получает все нужные API функции напрямую читая их из системных библиотек. Причем использует он практически только ntdll Zw функции. Потом создает поток и там дергает ZwDelayExecution с продолжительным интервалом. Ну а дальше всё банально ZwCreateFile, ZwReadFile... MessageBoxA Если честно я даже не знаю как там патчить, наверное найти в базонезависимом коде нужную сигнатуру и поискать ее в файле.

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




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

Создано: 11 ноября 2010 18:52 · Поправил: criogen
· Личное сообщение · #9

Ничего не получается я её и так и сяк... Кстати файл с цифровой подписью, она её проверяет при загрузке? Очень нужна ваша помощь и советы.



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

Создано: 12 ноября 2010 11:19 · Поправил: ELF_7719116
· Личное сообщение · #10

PE_Kill пишет:
вы посмотрите сколько Word весит, там вообще нет протектора

У меня winword.exe чуть больше 300 кбайт занимает. Сложно не согласиться, что протекторами там все таки нету
PE_Kill пишет:
всё банально ZwCreateFile, ZwReadFile

А что мешает положить оригинальный EXE в туже папку, внедрить X-Code injection - пропатчить ZwCreateFile, чтобы он указывал путь на оригинал и пусть защита его проверяет на здоровье (как с protect.dll) ?
1: Мне просто после SecuRom'а 7 неинтересно чего-то более в отладчик загружать
Кстати файл с цифровой подписью, она её проверяет при загрузке?
Я думаю она поступает проще-проверяет контрольную сумму. Хотя...смотреть над, но GOTO 1:




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

Создано: 12 ноября 2010 13:06
· Личное сообщение · #11

ELF_7719116 пишет:
У меня winword.exe чуть больше 300 кбайт

Спутал. EXCEL.EXE - почти 18 мегабайт.

ELF_7719116 пишет:
А что мешает положить оригинальный EXE в туже папку, внедрить X-Code injection

Ничто не мешает, лично я так не делаю, т.к. это слишком уныло. Как сделает автор - ему решать.

ELF_7719116 пишет:
Хотя...смотреть над, но GOTO 1:

Если ты прот то его там нет, всё банально.

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




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

Создано: 12 ноября 2010 19:25 · Поправил: criogen
· Личное сообщение · #12

Я поковырял её и вот какие вопросы возникли:
1. В програме для ZwCreateFile передаеться ссылка на него UNICODE "\Device\HarddiskVolume1\cah\Manager.exe". Для этого вызываеться ZwQueryVirtualMemory. Как можно подменить строчку? есть ли какой-то готовый лоадер который может её перехватить и заменить на другую?

2. Выделяется VirtualAlloc 200h памяти 2 блока, в один из них идет чтение из файла. Я прикрепил содержание то что в один заполняется. Такой последовательности байтов в распакованном вообще, а в запакованом есть, я думаю что это всетаки цифровая подпись потому что чуть дальше идет VeriSign Time Stamping Services Signer .... и это все находиться в конце файла. Можно как-то подписать распакованый файл?



cb24_12.11.2010_CRACKLAB.rU.tgz - dump1.txt



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

Создано: 16 ноября 2010 12:50 · Поправил: criogen
· Личное сообщение · #13

ELF_7719116 пишет:
А что мешает положить оригинальный EXE в туже папку, внедрить X-Code injection - пропатчить ZwCreateFile, чтобы он указывал путь на оригинал и пусть защита его проверяет на здоровье (как с protect.dll) ?

А можно ссылку? Я не нашел информации об этом. Если будет с примером будет вообще отлично!



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

Создано: 16 ноября 2010 13:36 · Поправил: ELF_7719116
· Личное сообщение · #14

PE_Kill не будем вдаваться в тонкости!

criogen
По существу! Собственно "как подменить строчку", т.е. заинжектить ZwCreateFile !
Рабочего варианта на ассемблере я не смог у себя найти, поэтому сшил на VС++ на скорую руку.
Идея вообщем-то проста: структура процедуры ZwCreateFile и остальных ей подобных обверток в ntdll имеет вид:
Code:
  1. 7C82743F    B8 8D000000     MOV EAX,8D                                   ;ID вызываемой низкоуровневой функции
  2. 7C827444    BA 0003FE7F     MOV EDX,7FFE0300                         ; указатель на ntdll.KiFastSystemCall
  3. 7C827449    FF12            CALL DWORD PTR DS:[EDX]                  ; ntdll.KiFastSystemCall
  4. 7C82744B    C2 1800         RETN 18

Есть несколько вариантов, но в данной ситуации лучшим будет пропатчить операнд по адресу 7C827444h, который укажет на наш лоадер, осуществим перестановку аргумента, а после из лоадера прыгнем в KiFastSystemCall.
Учитвая, что наш "лоадер" будет ловить все вызовы ZwCreateFile, то логично поставить фильтр, который подменяет строку только в требуемом нами случае. Чтобы не париться со сравнением строк, пойдем в обход - сравним адрес возврата, если вызов не из системной библиотеки, "лоадер" приходит к несложному выводу, что это защтный механизм! Самое время послать его куда надо.
Сишный код будет выглядить следующем образом (заранее извиняюсь, если есть косяки, но в конечном случае вы обработаете его напильником для себя; требуется конечную строку перегнать в юникод; не забудьте что переменные НЕ должны размещаеться стеке!):
Code:
  1.          TCHAR CurrentDirectory[255];
  2.          TCHAR Original_File_Name[] = "\ORIGINAL_FILE.EXE"; //собственно целевой оригинальный файл
  3.          TCHAR Prefix[] = "\\??\"; //префикс для Zw: \\??\
  4.          FARPROC KiFastSysRet_Address;
  5.          DWORD Our_Sattelite_Operand; //адрес нашего "лоадера"
  6.          LPDWORD Our_UNICOODE_Retail_String; //указатель на окончательную строку
  7.  
  8. HINSTANCE         GMH = GetModuleHandle("NTDLL");
  9. DWORD OldProt = 0x60000020; // маска READ_EXECUTE для секции
  10.  
  11.  
  12.  
  13.          GetCurrentDirectory(255,CurrentDirectory);
  14.          strcat(CurrentDirectory,Original_File_Name);
  15.          strcat (Prefix,CurrentDirectory);
  16.  
  17.          __asm
  18.          {
  19.                  ADD GMH, 0x1000 //НАЧАЛО СЕКЦИИ .text в NTDLL
  20.          }
  21.   VirtualProtect(GMH,0x27000,PAGE_EXECUTE_READWRITE,&OldProt); //Доступ на запись в секцию кода
  22.          __asm
  23.          {
  24.                  SUB GMH, 0x1000 //ОБРАТНО В HINSTANCE
  25.          }
  26.   GetProcAddress(GMH,"ZwCreateFile");
  27.   __asm
  28.   {
  29.            ADD EAX, 0x6 //СМЕЩАЕМСЯ НА АДРЕС ОПЕРАНДА ДЛЯ KiFastSystemCall (5 байт первая инструкция + 1 байт-идентефикатор следующей)
  30.            MOV EDI, DWORD PTR DS:[EAX] //СЧИТЫВАЕМ DУКАЗАТЕЛЬ ОПЕРАНД
  31.            MOV EDI, DWORD PTR DS:[EDI] //ПОЛУЧАЕМ НЕПОСРАДЕТСВЕННО АДРЕС KiFastSystemCall
  32.            MOV KiFastSysRet_Address, EDI//СОХРАНЯЕМ ЕГО У СЕБЯ
  33.            LEA EDI, Our_Sattelite      //ПОЛУЧИМ СМЕЩЕНИЕ ДЛЯ НАШЕГО ЛОАДЕРА
  34.            MOV Our_Sattelite_Operand, EDI //ПОРТИМ В РЕГИСТР
  35.            LEA EDI, Our_Sattelite_Operand //ПОЛУЧАЕМ СМЕЩЕНИЕ ДЛЯ УКАЗАТЕЛЯ, ЧТОБ ПРОИГРАТЬ CALL DWORD ... В NTDLL
  36.            MOV DWORD PTR DS:[EAX], EDI //МЕНЯЕМ ОПЕРАНД
  37.            LEA EDI, Prefix //АДРЕС КОНЕЧНОЙ СФОРМИРОВАННОЙ СТРОКИ
  38.            MOV Our_UNICOODE_Retail_String, EDI
  39.            JMP Exit_
  40. Our_Sattelite: //ЕСЛИ Я ПРАВИЛЬНО ПОНЯЛ, ТО ЗАЩИТНЫЙ МЕХАНИЗМ ОБИТАЕТ В АЛЛОЧНОЙ ПАМЯТИ И ВЫЗЫВАЕТ NativeAPI НАПРЯМУЮ, ТОГДА В ФИЛЬТРЕ МОЖНО ЗАДАТЬ НИЖНЕЕ ЗНАЧЕНИЕ С КОТОРОГО ИДУТ СИСТЕМНЫЕ БИБЛИОТЕКИ
  41.            MOV EDI, DWORD PTR DS:[ESP+4] // ВЫТАСКИВАЕМ АДРЕС ВОВЗРАТА
  42.            CMP EDI, 0x7000000 //ФИЛЬТРУЕМ ВЫЗОВЫ, НАЧАЛО АДРЕСНОГО ПРОСТРАНСТВА С СИСТЕМНЫМИ БИБЛИОТЕКАМИ
  43.            JL Less_CALL //ЕЕСЛИ АДРЕС ВОЗВРАТА ЛЕЖИТ НИЖЕ, ТО ВЕРОЯТНО ЭТО И ЕСТЬ НАШ КЛИЕНТ
  44.             MOV EDI, DWORD PTR DS:[KiFastSysRet_Address] //СТАНДАРТНОЕ ИСПОЛНЕНИЕ
  45.            JMP EDI //ПЕРЕХОД KiFastSystemRet
  46. Less_CALL: //MOV EDI, DWORD PTR DS:[ESP+0x8] //ЕСЛИ МНЕ ПАМЯТЬ НЕ ИЗМЕНЯЕТ, ВТОРОЙ АРГУМЕНТ ZwCreateFile ЭТО LPDWORD НА ПУТЬ
  47.                     MOV EDI, Our_UNICOODE_Retail_String
  48.                     MOV DWORD PTR DS:[ESP+0x8], EDI //ПОДМЕНА ВТОРОГО АРГУМЕНТА
  49.                     MOV EDI, DWORD PTR DS:[KiFastSysRet_Address]
  50.                     JMP EDI //ПЕРЕХОД KiFastSystemRet
  51. Exit_:
  52.   }
  53.   





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 17 ноября 2010 00:01
· Личное сообщение · #15

Парни, одумайтесь

http://rghost.ru/3278944

-----
Research For Food




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

Создано: 17 ноября 2010 14:51 · Поправил: criogen
· Личное сообщение · #16

daFix пишет:
Парни, одумайтесь

Ну так намного проще! У меня только несколько вопросов.

1. Как ты нашел это место, где пропатчил:
Code:
  1. 012313B7                 xor     eax, eax
  2. 012313B9                 push    ebp
  3. 012313BA                 push    offset unk_12315B4
  4. 012313BF                 push    dword ptr fs:[eax]
  5. 012313C2                 mov     fs:[eax], esp
  6. 012313C5                 mov     eax, ds:off_12C780C
  7.  
  8. 012313CA                 mov     byte ptr [eax], 1
  9. 012313CD                 nop
  10. 012313CE                 nop
  11. 012313CF                 mov     eax, ds:off_12CA80C
  12. 012313D4                 cmp     byte ptr [eax], 0


2. После подключение к базе вылетает сообщение об ошибке и идет выход из программы.
Вот такое сообщение:
---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Runtime Error!
Program: C:\temp1\Managerfixed.exe
R6030
- CRT not initialized


Пробывал на двух компьютерах, она выскакивает. У меня вопрос, это только у меня такая ошибка может быть на обоих WinXP SP3? Причем на одном к компьютере когда подключаеться к одной базе нормально, к остальным эта ошибка вылазит.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 17 ноября 2010 16:17
· Личное сообщение · #17

criogen
Ошибка только на моём выскакивает?

-----
Research For Food




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

Создано: 17 ноября 2010 16:33 · Поправил: criogen
· Личное сообщение · #18

daFix пишет:
criogen
Ошибка только на моём выскакивает?

Да. На распакованном и не патченом не вылазет. Если убрать эти патчи, тогда её тоже нет.
1931736: B0 55
1931737: 01 8B
1931738: C3 EC
1931790: B0 FF
1931791: 01 50
1931792: 90 0C

Я посмотрел в Олли, эта функция вызывается 3 раза.
Ей в стек передаються :
12FF3C
12FD54
12FB90



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

Создано: 17 ноября 2010 19:36
· Личное сообщение · #19

daFix
Одумались
Однако я думал, что существует проблема патчинга непосредственно кода защиты. Поэтому и предложил самое мощное решение.




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 18 ноября 2010 00:24
· Личное сообщение · #20

criogen
Ну попробуй так. Если сработает, считай что повезло
rghost.ru/3291426

-----
Research For Food




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

Создано: 18 ноября 2010 01:22
· Личное сообщение · #21

daFix пишет:
Ну попробуй так. Если сработает, считай что повезло

несработало




Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 18 ноября 2010 05:03
· Личное сообщение · #22

criogen
Опиши на пальцах, как довести дело до ошибки? А то гадание на кофейной гущще - не айс

-----
Research For Food




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

Создано: 18 ноября 2010 11:14
· Личное сообщение · #23

criogen пишет:
2. После подключение к базе вылетает сообщение об ошибке и идет выход из программы.Вот такое сообщение:

Просто подключиться к базе на MS Sql Server.



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

Создано: 18 ноября 2010 11:34 · Поправил: criogen
· Личное сообщение · #24

Вот что в стеке:
Code:
  1. 0012EFFC   0239173A  RETURN to 0239173A from 0239645F
  2. 0012F000   0000001E
  3. 0012F004   05222D40
  4. 0012F008   00000001
  5. 0012F00C   02888F00
  6. 0012F010  /0012F030
  7. 0012F014  |023B2370  RETURN to 023B2370 from 0239170B
  8. 0012F018  |00000440
  9. 0012F01C  |00404E6C  RETURN to MsManage.00404E6C from MsManage.00404EC8
  10. 0012F020  |00000001
  11. 0012F024  |00405252  RETURN to MsManage.00405252
  12. 0012F028  |05222D40
  13. 0012F02C  |02888F00
  14. 0012F030  ]0012F050
  15. 0012F034  |007D0DA5  RETURN to MsManage.007D0DA5
  16. 0012F038  |0012F058  Pointer to next SEH record
  17. 0012F03C  |00405271  SE handler
  18. 0012F040  |0012F050
  19. 0012F044  |02888F00
  20. 0012F048  |051FBB50
  21. 0012F04C  |00000001
  22. 0012F050  ]0012F074
  23. 0012F054  |007FD213  RETURN to MsManage.007FD213 from MsManage.007D0D74
  24. 0012F058  |0012F07C  Pointer to next SEH record
  25. 0012F05C  |00405271  SE handler
  26. 0012F060  |0012F074
  27. 0012F064  |05222D40
  28. 0012F068  |00426554  MsManage.00426554
  29. 0012F06C  |05213170
  30. 0012F070  |028C1680


А вот откуда оно вызывается:

Code:
  1. 0239171F    8B3D 08E03B02   MOV     EDI, DWORD PTR DS:[23BE008]      ; ntdll.RtlAllocateHeap
  2. 02391725    833D 30A03C02 0>CMP     DWORD PTR DS:[23CA030], 0
  3. 0239172C    75 18           JNZ     SHORT 02391746
  4. 0239172E    E8 D74E0000     CALL    0239660A
  5. 02391733    6A 1E           PUSH    1E
  6. 02391735    E8 254D0000     CALL    0239645F
  7. 0239173A    68 FF000000     PUSH    0FF
  8. 0239173F    E8 8C4A0000     CALL    023961D0
  9. 02391744    59              POP     ECX
  10. 02391745    59              POP     ECX
  11. 02391746    A1 70A83C02     MOV     EAX, DWORD PTR DS:[23CA870]


Если поменять jump то оно базу откроет, хоть и с двумя ошибка по чтению памяти. Если не править ту функцию то в [23CA030] находиться указатель на область памяти размером 4000h Access=RW.


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


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