MBR (mbr) wrote,
MBR
mbr

Отучаем от hasp. Часть 2 - анализируем библиотеку.

Итак, в предыдущей части мы нашли точку входа в проверку наличия хаспа.

На выходе получаем такой листинг. Я сразу буду комментировать


.text:10008140 push 1 //передача параметра
.text:10008142 call isFeatureEnabled //проверка на тип лицензии
.text:10008147 add esp, 4 //возврат параметра через стек
.text:1000814A test al, al //проверка результата
.text:1000814C jnz short loc_100081B3 //лицензия подходит
.text:1000814E push 2
.text:10008150 call isFeatureEnabled
.text:10008155 add esp, 4
.text:10008158 test al, al
.text:1000815A jnz short loc_100081B3
.text:1000815C push 5
.text:1000815E call isFeatureEnabled
.text:10008163 add esp, 4
.text:10008166 test al, al
.text:10008168 jnz short loc_100081B3
.text:1000816A push 6
.text:1000816C call isFeatureEnabled
.text:10008171 add esp, 4
.text:10008174 test al, al
.text:10008176 jnz short loc_100081B3
.text:10008178 push 7
.text:1000817A call isFeatureEnabled
.text:1000817F add esp, 4
.text:10008182 test al, al
.text:10008184 jnz short loc_100081B3
.text:10008186 push 8
.text:10008188 call isFeatureEnabled
.text:1000818D add esp, 4
.text:10008190 test al, al
.text:10008192 jnz short loc_100081B3
//если ничего не подходит, выводим в лог и выходим
.text:10008194 mov eax, ?log@icCommon@@2PAVCLogger@@A ; CLogger * icCommon::log
.text:10008199 test eax, eax
.text:1000819B jz short loc_100081AB
.text:1000819D push offset aIccommonDongle ; icCommon: Dongle not found. Exiting.;
.text:100081A2 push eax
.text:100081A3 call ?LogError@CLogger@@QAAXPADZZ ; CLogger::LogError(char *,...)
.text:100081A8 add esp, 8
.text:100081AB
.text:100081AB loc_100081AB:
.text:100081AB push 0 ; int
.text:100081AD call ds:exit
.text:100081B3 ; ---------------------------------------------------------------------------
.text:100081B3
.text:100081B3 loc_100081B3:
.text:100081B3
.text:100081B3 call checkVersionMatch //проверка версии лицензии или хаспа.
.text:100081B8 test al, al
.text:100081BA jnz short loc_100081C4 //если возвращает не 0, то все ок.
.text:100081BC push 0 ; int
.text:100081BE call ds:exit
.text:100081C4 ; ---------------------------------------------------------------------------
.text:100081C4
//все в порядке, стартуем
.text:100081C4 loc_100081C4:
.text:100081C4 mov eax, ?log@icCommon@@2PAVCLogger@@A ; CLogger * icCommon::log
.text:100081C9 test eax, eax
.text:100081CB jz short loc_100081E1
.text:100081CD mov ecx, [esp+ 228 h+var_218]
.text:100081D1 push ecx
.text:100081D2 push esi
.text:100081D3 push offset aStartingSS ; --------- Starting %s - %s ----------
.text:100081D8 push eax
.text:100081D9 call ?LogDebug@CLogger@@QAAXPADZZ ; CLogger::LogDebug(char *,...)
.text:100081DE add esp, 10h

Т.е. нам осталось отпатчить функции isFeatureEnabled и checkVersionMatch, чтобы они всегда
возвращали TRUE. Какие тут обнаружены ошибки в защите?

Ошибка №3. Как бы не сложен был алгоритм защиты, никогда нельзя делать условное сравнение. Нужно
выносить часть бизнес-логики в железо - благо, хасп это позволяет. Если такой возможности нет -
побольше матана - умножать, возводить в степень, использовать вещественную логику. После этого
складывать в переменную и забывать про нее. А затем по прерыванию (а лучше эксепшну, как
эффективному способу борьбы с отладчиком) производить обработку.

Ошибка №4. Никакой читаемой отладочной информации. Тем более на входе и выходе критических функций
безопасности.
Subscribe

  • Победил битрикс

    Раньше рассказывал, как мы пытаемся битрикс внедрить. Сначала просто дал задачу вебщику подергать странички и собрать отчет по линкам. Ад. Там…

  • В поддержку FSF

    Как многие знают, сейчас в отношении Ричарда Столлмана развернулась травля относительно, якобы, имевших место некорректных его личных высказываний.…

  • А вот вам задачка

    Ну вдруг кто пропустил. Есть весы и сканер RFID. Подключены к ПК. Требуется на ПК. По приходу ID черeз RFID получить вес и добавить одну строчку к…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments