R0 CREW

Hasp Envelope 3.25

Подскажите пожалуйста, как все таки вручную восстановить IAT при снятии конверта Hasp Envelope 3.25? ImcRec восстанавливает не все функции. Вот здесь человек пишет, что можно поймать момент, когда таблица импорта корректна, но подробностей, увы нет. В вот тут в п.4 упоминается неведомый JE в секции .protected, по этому моменту нет инфы? Может кто сталкивался? п.с. мучаюсь не один день, все доступные туторы читал и смотрел, гугл тоже юзал.

Это называется найти magic jump (волшебный/магический переход), читай эту статью:
Введение в крэкинг с нуля, используя OllyDbg - Глава 37

Спасибо! Эти статьи как раз уже и затер до дыр. Дохожу до того что на скрине:

по адресу 401BF8 та функция которую пытаюсь разгадать.

Опа, нашел…&KERNEL32.TlsGetValue …просто погуглил D8604000, а почему так? и на всех осях будет так же? О, все заработало, чудо - не иначе! :slight_smile:

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

Так, вообщем вопрос я этот не бросил. С тестовой прогой, где было всего-ничего api вызовов разобрался, а теперь взялся за зверя посерьезней. ImpRec определил, что вызовов всего 179 штук, из них 50 распознались как “invalid”, пришлось разбираться и переписывать скрипт “iat fixer” великого Sc0py, отсюда. В итоге распозналось еще 46 функций, осталось 4-ре. Я так понял hasp несколько функций эмулирует; трассировал вручную, вроде бы как получается, что это функи (GetACP, GetVersion, GetCurrentProcessId и GetCurrentProcess), однако, уверенности нет, особенно смущает GetACP. Да и когда я их подставил в ImpRec и фиксанул дамп он не запустился и падает по адресу 78с00003, т.е. где то в kernel32. Вообщем, вопрос, как мне проверить правильно я определил API или нет?

Победил и этот момент, вот как : открыл дамп программы в IDA и затем посмотрел места вызовов искомых функций (их нашел, благодаря статье выше) на предмет наличия характерных особенностей (количество принимаемых параметров, количество возвращаемых параметров и так далее), Kernel32.GetCurrentProcess, Kernel32.GetProcAdress, Kernel32.GetStartupInfoA ,Kernel32.GetCurrentProcessID были идентифицированы. дамп заработал - аллилуйя :slight_smile: