Авторские статьи Исследование Dekart Private Disk

Discussion in 'Статьи' started by hidden, 3 Oct 2006.

  1. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Исследование Dekart Private Disk v.2.09 (Последняя версия)

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

    Исследование я начал с появившегося MessageBox’a, тапа у меня осталось 30 дней, я сразу же, аттачнул его олькай(ollydbg) search for => name in all modules => messageboxa, дальше follow import in disassembler, а так как в XP эта функция вызывает функцию MessageBoxExA, я поставил бряк(beak point/точку останова) после MessageBoxExA и нажал F9(run). Согласился с сообшением и это привело к остановке на том бряке, я вышел из функции по F7(step into/шаг внутрь) и попал в модуль dkar.dll, выполнил search for => all intermodular calls и мне в глаза сразу бросилась функция versnum.VerifySerialNumberEx, дальше я открыл её в идее(IDA/Interactive Disassembler) и долго пытался разобраться в способе сравнения ключа, хотеорсь сделать keygen...
    Спустя несколько часов, мне это надоело и я решил патчить. Я заметил что достаточно чтоб, функция VerifySerialNumberEx вернула значение отличное от нуля, тогда программа считает сабя загереной. Я сразу поставил jmp(прыжок) с начала функции, на первый же ret(учитывая стек) и программа стала считать себя зарегеной, но после того как я внёс изменения в саму versnum.dll, вылетел MessageBoxExA, с ошибкой загрузки versnum.dll, оказалось она проверяет целостность versnum.dll. Тогда я вышел из этой функции, на месте её вызова выполнил find references to => address constant, оказалось, она вызывается из нескольких мест, а также она не импортировалась, а подгружалась библиотекой dkar.dll, о чём свидетельствовала строка
    Code:
    MOV DWORD PTR DS:[9159DC],EAX
    Я перешел на место подгруздки функций и решил добавить к полученному адресу функции, значение, соответствующее отступлению команды ret от начала функции, но функция add eax, 0x65 занимает 3 байта, а пожертвовать я мог только командой test eax, eax которая занимает 2 байта.
    Code:
    008FAD3C     68 E8D79000          PUSH 0090D7E8                           ; ASCII "VerifySerialNumber38"
    008FAD41     FF37                 PUSH DWORD PTR DS:[EDI]
    008FAD43     FFD6                 CALL ESI
    008FAD45     85C0                 TEST EAX,EAX
    008FAD47     A3 D4599100          MOV DWORD PTR DS:[9159D4],EAX
    008FAD4C     74 63                JE SHORT 008FADB1
    008FAD4E     68 D0D79000          PUSH 0090D7D0                           ; ASCII "VerifySerialNumberEx"
    008FAD53     FF37                 PUSH DWORD PTR DS:[EDI]
    008FAD55     FFD6                 CALL ESI
    008FAD57     85C0                 TEST EAX,EAX
    008FAD59     A3 DC599100          MOV DWORD PTR DS:[9159DC],EAX
    008FAD5E     74 51                JE SHORT 008FADB1
    как вариант было переместить mov ниже, на затереть ей инструкцию je, но тогда бы пришлось править таблицу исправлений адресации(что мне делать не хотелось), просто при паче dll’ек лучше не использовать прямых адресов, и не изменять инструкции с прямыми адресами(слишком много гемора).
    Решение оказалось проще, перед получением этой функции, запрашивается другая, которая отстоит от того ret на расстоянии 139 байт, в той же библиотеке, так что я просто заменил
    Code:
    008FAD53     FF37                 PUSH DWORD PTR DS:[EDI]
    008FAD55     FFD6                 CALL ESI
    008FAD57     85C0                 TEST EAX,EAX
    на
    Code:
    008FAD53     59                   POP ECX ; компенсирует предыдущую инструкцию
    008FAD54     05 8B000000          ADD EAX,8B ; Наращивает на 139
    Для полноты процесса, можно ещё и контрольную сумму поправить, но это не обязательно.

    Резутьтат:
    Code:
    dkar.dll
    0000AD53: FF 59
    0000AD54: 37 05
    0000AD55: FF 8B
    0000AD56: D6 00
    0000AD57: 85 00
    0000AD58: C0 00
    Ссылки:
    ОффСайт - ввв[dot]private-disk[dot]net - Отсюда можно скачать.
    Зеркало версии 2.09 на случай, если обновят ввв[dot]4shared[dot]com[slash]file[slash]6622030[slash]65852128[slash]MyPeronalPhotos.html
    Пароль: CR@CK

    ЗЫ Вот и сэкономили $45.00 :D
     
    #1 hidden, 3 Oct 2006
    Last edited: 29 Nov 2006
    6 people like this.
  2. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    nice try
    продолжай в том же дуХе ;)
     
    1 person likes this.
  3. taha

    taha Elder - Старейшина

    Joined:
    20 Aug 2006
    Messages:
    399
    Likes Received:
    330
    Reputations:
    251
    Дааааа. Читаю и понимаю, что без практики постепенно превращаюсь в теоретика.
    Молодец!