Патчим Hashcat Plus

При работе с хешами, я предпочитаю использовать Hashcat с мордой в виде HashcatGUI (md5decrypter). Однако, наступил 2014 год, и старая версия cudaHashcat-plus64 уже не обновляется, а для работы oclHashcat требуется Cuda SDK, который будет занимать лишнее место на диске. Поэтому было решено немного поправить исполняемый файл хешкэт-плюс. На данный момент при запуске выдаётся следующее сообщение:

Вышел срок действия

ERROR: this copy of cudaHashcat-plus is outdated. Get a more recent version.

Для продолжения потребуются:

  • Дизассемблер (желательно IDA)
  • HEX редактор

Загрузим исполняемый файл в IDA. Поискав строку: “this copy of“, видим два совпадения:

Результат поиска

Перейдя по метке loc_43335F, имеем следующий код:

.text:000000000043335F loc_43335F:   ; CODE XREF: sub_42B730+72j
.text:000000000043335F mov     rdx, cs:off_437D28
.text:0000000000433366 lea     rcx, aErrorThisCopyO ; "ERROR: this copy of %s is outdated. Get"...
.text:000000000043336D call    sub_406560
.text:0000000000433372 or      eax, 0FFFFFFFFh
.text:0000000000433375 jmp     loc_42B8F0

Посмотрим откуда происходит переход к данной метке (горячая клавиша “X”).

Вызов сообщения об ошибке
.text:000000000042B768  loc_42B768: ; CODE XREF: sub_42B730+DFEj
.text:000000000042B768  mov     rax, cs:_time64
.text:000000000042B76F  lea     rcx, [rsp+40h+arg_15018] ; __time64_t *
.text:000000000042B777  mov     [rsp+40h+arg_1B8], rax
.text:000000000042B77F  call    rax ; _time64
.text:000000000042B781  mov     rax, [rsp+40h+arg_15018]
.text:000000000042B789  lea     rcx, [rsp+40h+arg_15018] ; __time64_t *
.text:000000000042B791  mov     cs:qword_443C18, rax
.text:000000000042B798  call    cs:_localtime64
.text:000000000042B79E  cmp     dword ptr [rax+14h], 71h
.text:000000000042B7A2  jg      loc_43335F

Отчётлива видна процедура проверки даты. Сначала вызывается “cs:_localtime64“, затем происходит проверка даты, и, если период работы программы истек, выполняется jg loc_43335F (т.е. переход к процедуре вывода сообщения об ошибке).

Смещение и JG

 

Открываем страницу с описанием опкодов, затем в дело вступает HEX-редактор. Я использую WinHex, переходим к нужному смещению.

WinHex

Заменим инструкцию JG на JL, для этого поменяем байты 0F8F на 0F8C.

Проведена замена инструкции

Логика поменялась. Сохраняем файл под новым именем и проверяем на работоспособность.