Вы имеете в виду восстановление базы с сохранением сообщений?
Файл sms.db представляет собой стандартную БД SQLite. В ней, если не ошибаюсь, 6 таблиц: в одной лежат тексты сообщений, во второй - метаданные (номер отправителя/адресата, признак входящего/исходящего, время хранения т.п.), в третьей - информация о состоянии сообщения: принято, прочитано и т.п. Она называется как-то вроде "sms_status" или "cmd_status". Вот в ней-то обычно и возникает проблема: в неё записывается строка с информацией о поступившем сообщении, а данные в соответствующие строки двух других упомянутых таблиц записаться не успевают (например, если модем был не вовремя отключен от порта, сделан сброс или произошёл сбой). В результате, морда, при выборе соответствующего раздела меню, начинает искать эти данные, не находит их и "висит".
На практике, нужно просмотреть (можно в консоли, используя клиент sqlite) эти таблицы и найти несоответствие между их содержимым. Скорее всего, как я уже написал, это будет строка в таблице статуса со ссылкой на несуществующий индекс сообщения. Если эту строку удалить, то всё заработает, как положено. Конечно, то, последнее сообщение, которое вызвало проблему, не восстановится "из ниоткуда": его содержимое было утеряно раньше - в момент, когда возникла сама проблема.