Распаковка и восстановление файлов упакованых tElock 0.98 О защите: Полиморфный упаковщик, как обычно с антидебаговыми примочками, поганит импорт, секции в файле обзывает именами других упаковщиков. Вот так :( Инструменты: Softice, IceDump, Imprec. Как найти OEP: bpx GetModulehandleA, потом /tracex imagebase xxxxxx, где xxxxxx число примерно пониже базы распаковщика. А вот с импортом не все так просто. Взяв Imprec будет сразу видно что 2 секции никак не востанавливаются. И элементы этих секций указывают на какие-то разные области памяти, даже не в области упаковщика. Если глянуть в эти области, то нас постигает огромный облом... Некоторые элементы указывают в пустые куски памяти (те что с ?? ?? ...), а остальные указывают на вызовы процедур из библиотек через полиморфные куски кода!!! Хана... Это ж даже не подизасмишь. Но выход есть! Берем к примеру первый не найденый элемент к примеру 5b140 ссылается на 700000. Смотрим на код по адресу 700000. Он имеет вид: 0167:00700000 JMP 00700005 0167:00700002 JMP EBX 0167:00700004 INVALID 0167:00700006 NOP 0167:00700007 PUSH ES 0167:00700008 JO 0070000A 0167:0070000A INC EAX 0167:0070000B PUSH DWORD PTR [EAX] 0167:0070000D RET Делаем u 00700005 и видим: 0167:00700005 MOV EAX,00700690 0167:0070000A INC EAX 0167:0070000B PUSH DWORD PTR [EAX] 0167:0070000D RET теперь делаем d 00700690+1 (+1 тошо inc eax). Видим: 0167:00700691 D1 AB F8 BF A3 B9 F7 BF-7E B9 F7 BF 9F 42 F8 BF ........~....B.. 0167:007006A1 B9 41 F8 BF E7 FF F7 BF-D4 49 F7 BF B8 48 F7 BF .A.......I...H.. 0167:007006B1 D7 13 F8 BF 65 43 F7 BF-3C 43 F7 BF 1A 06 FA BF ....eC..<С...... 0167:007006C1 A3 7D F7 BF 85 7D F7 BF-AD 73 F7 BF 36 73 F7 BF .}...}...s..6s.. 0167:007006D1 ED 12 F9 BF 59 EA F9 BF-B1 77 F7 BF AC 6D F7 BF ....Y....w...m.. 0167:007006E1 1A 77 F7 BF FB 76 F7 BF-B4 20 F8 BF E2 50 F8 BF .w...v... ...P.. 0167:007006F1 AC C5 F8 BF A0 E0 F8 BF-5B 7B F7 BF C4 64 F7 BF ........[{...d.. 0167:00700701 CA D4 F8 BF D5 6F F7 BF-DC D6 F9 BF 3F 71 F7 BF .....o......?q.. 0167:00700711 A0 C3 F9 BF 5F 83 F8 BF-3D 70 F7 BF 83 06 FA BF ...._...=p...... 0167:00700721 74 57 F7 BF B5 6F F7 BF-85 58 F7 BF DF 7A F7 BF tW...o...X...z.. 0167:00700731 64 E0 F7 BF 00 00 00 00-00 00 00 00 00 00 00 00 d............... Это кусок импорта! Теперь делаем хитрую вещь... /dump 700691 a4 c:\1.dmp и /load 45b140 a4 c:\1.dmp Я подменил кусок таблицы импорта на реальные адреса апи функций. Прога на этот момент запущена. И прекрасно работает ничего не заметив. Так мы поборем полиморфные вызовы. Остаются вызовы которые ведут в никуда. В никуда они вести не могут. Поэтому нужно просто глянуть на эти места когда EIP=OEP :) И действительно! В момент когда прога тока собирается запустится, все наместе и можно дописать оставшиеся куски. Там тоже будут полиморфы. Еще останется несколько вызовов процедур типа: 0167:00700338 MOV EAX,0046C48D 0167:0070033D NOP 0167:0070033E PUSH DWORD PTR [EAX] 0167:00700340 RET Причем по адресу 46C48D или ноль идет или пустота... Поэтому ячейки которые указывают на такие процедуры нужно просто отсекать (cut thunks). Итак нужно просто остановить прогу на OEP скопировать правильные адреса в таблицу импорта, а потом дать проге запуститься и дальше уже в Imprec завершить "косметику" :) ======================================================================= TEAM-53 TUTORiALs \\ www.BSUiR.com \\ #team-53 , IRC.By, IRC.BYNETS.ORG =======================================================================