Themida IAT rebuilder script

IAT Redirection

Themida to exe-protektor, który posiada opcję ukrywania tabeli importów aplikacji poprzez ukrycie faktycznych adresów funkcji w bibliotekach DLL.

Działa to na tej zasadzie, że w zabezpieczonej aplikacji, po jej uruchomieniu, adresy funkcji w tabeli importów, które normalnie wskazuja na jakieś funkcje, np. na ExitProcess(), sa zamienione adresami kodu, który w końcu wykona skok do przykładowego ExitProcess().

Technika ta ma nazwę API Redirectingu lub inaczej – IAT Redirection, Import table redirection (w obiegu jest kilka nazw).

Celem tej techniki zabezpieczeń jest uniemożliwienie odtworzenia struktury pliku wykonywalnego z pamięci, praktycznie każdy nowoczesny protektor wykrzystuje jakąś formę tej ochrony.

Tablica importów

Struktura tabeli importów w bardzo dużym skrócie przedstawia się następująco (dla bardziej zaciekawionych polecam poszukać IMAGE_IMPORT_DESCRIPTOR):

Tablica importów pliku PE

Tak wygląda ona w niezabezpieczonym pliku, czyli mamy bloki odpowiadające kolejnym bibliotekom, z których korzysta nasza aplikacja, w każdym bloku znajdziemy adresy tych funkcji (po załadowaniu aplikacji, wskazują na bezpośredni kod np w KERNEL32.dll).

Po potraktowaniu pliku protektorem Themida, po jego załadowaniu do pamięci, struktura będzie wyglądać następująco:

IAT Redirection

Przykładowa funkcja ExitProcess() ma taki kod:

KERNEL32.ExitProcess

Widać, że po zabezpieczniu, oryginalne instrukcje z funkcji zostały pomieszane z kodem zaciemniającym.

Jak działa redirecting w Themida

Proces redirectingu wygląda następująco:

  • Themida tworzy tymczasowy bufor pamięci na kod redirectora
  • oryginalna funkcja ExitProcess() poddana jest procesowi deasemblacji
  • w kodzie redirectora umieszczane są bloki i instrukcje zaciemniające działanie (nie robiące nic, taki syf po prostu)
  • początkowe instrukcje z funkcji ExitProcess() poddane są mutacji (jedna instrukcja jest rozbijana na równoważny zestaw innych instrukcji)
  • kod zmutowanych instrukcji oryginalnej funkcji jest pomieszany z kodem zaciemniającym
  • na samym końcu kodu redirectora, umieszczony jest skok do pozostałego fragmentu funkcji ExitProcess()

Całość sprawia, że wywołanie funkcji ExitProcess() z poziomu aplikacji przebiega dokładnie tak samo, jak to ma miejsce w niezabezpieczonej aplikacji.

Jak odtworzyć tak zabezpieczoną tablicę importów?

Publiczne narzędzia jak np. ImpRec posiadają wtyczki potrafiące poradzić sobie z różnymi zabezpieczeniami tabel importów, jednak akurat mój przypadek był taki, że musiałem skorzystać ze skryptu ODbgScript, który służy do sterowania debuggerem OllyDbg.

Jak działa mój skrypt

Kilka słów o działaniu mojego skryptu, kolejne etapy przedstawiają się tak:

Skanowanie obszaru tabeli importów

Aplikacja po załadowaniu do debuggera i dojściu do OEP jest zatrzymywana po czym skrypt skanuje ręcznie wybrany obszar wskazujący na tabelę importów (na tabelę wskaźników do funkcji).

Na tym etapie odrzucane są błędne wskaźniki oraz funkcje, które nie zostały  poddane procesowi zabezpieczenia, są to np. adresy funkcji, które nie są funkcjami, a np. wskaźnikami na dane w bibliotece DLL, przykład to funkcja _acmdln() z rodziny bibliotek MSVCRT.dll).

Odbudowa kodu redirectora

Jeśli znaleziony zostanie kod redirectora dla kolejnej funkcji, poddawany jest on takim procesom jak:

  • optymalizacja mająca na celu usunięcie śmieci z kodu redirectora (tzw. junki)
  • przebudowa adresów docelowych instrukcji jxx (branche), które podczas zabezpieczenia kodu funkcji były rozwinięte do form długich (jxx near), oraz ich skrócenie do form krótkich (jxx short)
  • demutacja rozbitych instrukcji na oryginalne formy, Themida stosuje niewielki zestaw kilku mutacji dla najpopularniejszych instrukcji
  • ponowna optymalizacja kodu, poprawienie branchów, usunięcie śmieci powstałych z demutacji

Tworzenie patternów

Odbudowany kod redirectora po takim procesie będzie w 99% wierną kopią zredirectowanych początkowych instrukcji zabezpieczonej funkcji.

Teraz, mając fragment oryginalnej funkcji, tworzony jest z niej wzorzec binarny (z maskowaniem adresów niektórych instrukcji, np. „E9????????”).

Taki wzorzec jest następnie poszukiwany w pamięci bibliotek DLL aplikacji i jeśli zostanie znaleziony jest to równoznaczne ze znalezieniem poprawnej funkcji, której adres może być umieszczony w pamięci tabeli importów i tym razem bezproblemowo można skorzystać z narzędzi typu ImpRec do odbudowy tabeli importów i symbolicznych nazw wykorzystanych funkcji.

Wady, zalety i efekty uboczne

Do wad skryptu należy to, że w 1% przypadków odbudowany kod niekoniecznie będzie idealnie taki jak kod ze zredirectowanej funkcji i tym samym nie będzie możliwe po jego wzorcu znalezienie tej owej oryginalnej funkcji (zostaje ręczna robota przy tym).

Sporą wadą, chociaż bardziej efektem ubocznym jest też czas wykonywania skryptu w OllyDbg, który może sięgać 5 minut dla zabezpieczonych aplikacji.

Zaletą jest natomiast cała reszta, która pozwala w prosty sposób odbudować tabele importów oraz dokonać błyskawicznych zmian, biorąc poprawki na jakieś wyjątkowe warunki w kodzie.

Kod skryptu

Kod skryptu do ściągnięcia – themida_iat_rebuilder.zip (6 kB)

Wszelkie uwagi mile widziane.

Software Press chce mnie pozwać!

Magazyn Hakin9 mnie nie lubi

Software Press to wydawca takich magazynów jak m.in.:

Chcą mnie pozwać za artykuł o magazynie Hakin9, w którym obnażyłem metody i sposoby rekrutacji ludzi piszących artykuły oraz ogólne zachowanie się redaktorów tego wydawnictwa w sferze Internetu (masowe spamowanie choćby na GoldenLine). Właśnie dostałem pismo od ich radcy prawnego.

Pismo od radcy prawnego Hakin9

Całość pisma od ich radcy prawnego, którym jest Izabela Grotowska <[email protected]> (wizytówka jej firmy), wersja PDF:

naruszenie dóbr osobistych Haking Media Sp. z o.o. SK.pdf (77 kB)

krótki fragment:

Wskazuję, że w sposób całkowicie bezprawny naruszyli Państwo dobra osobiste Hakin9 Media Sp. z o.o. Sp. k. poprzez naruszenie zasad współżycia społecznego w zakresie krytyki wydawanego przez Spółkę czasopisma Hakin9 Magazine, z użyciem wulgaryzmów i jednostronnych ocen, obrażając przy tym współpracowników Spółki, których nazwali Państwo „jeleniami”, tylko dlatego, że chcą publikować swoje teksty na łamach czasopisma Hakin9.

Zamieszczony przez Państwa tekst nie mieści się w żaden sposób w granicach uzasadnionej krytyki. Dokonaliście Państwo linczu magazynu Hakin9 stwarzając przy tym wrażenie, jakoby Państwa zdanie pokrywało się z powszechnymi odczuciami. Wykazaliście się Państwo zupełną ignorancją zasad przygotowywania tekstu prasowego, gdyż tekst ten, poza informacją, iż na rynku istnieje pismo Hakin9, zawiera tylko nieprawdziwe twierdzenia.

Szczególnie ciekawy jest fragment zawierający tekst opisujący „bezkosztowe pozyskiwanie tekstów od młodych autorów”, polecam całość żeby nie było niedomówień 😉

Działania redakcji Hakin9, a mój artykuł

Jak im odpisałem, skorygowałem artykuł (nieszczęsne jelenie), natomiast całą resztę swoich słów jestem w stanie udowodnić, od spamowania skrzynek pocztowych, przez zaległości z wypłatami (jak jeszcze były), po masowe spamowanie GoldenLine w poszukiwaniu autorów.

Najlepszym przykładem na nierzetelność tegoż wydawnictwa jest ostatnia wpadka z opublikowaniem specjalnie spreparowanego, fałszywego artykułu, który opublikowali bez mrugnięcia okiem, a później również grozili prawnikami

Hakin9 Magazine’s Nmap issue successfully trolled by security researchers!

http://seclists.org/nmap-dev/2012/q3/1050

Gdzie również możecie przeczytać o spamowaniu zagranicznych autorów ciągłymi prośbami o darmowe artykuły.

Dla czytelników Software Press

Jeśli jesteś czytelnikiem tych magazynów:

  • zastanów się czy chcesz wspierać wydawnictwo, które działa w taki bezczelny sposób i jeszcze chce kneblować usta ludziom, którzy o tym piszą
  • jeśli znasz przypadki spamowania przez pracowników Software Press, dopisz się do komentarzy

Dla firm reklamujących się w Hakin9 i innych magazynach Software Press

Pytania:

  • czy opłacalne jest współpracowanie z wydawnictwem, które kompromituje się publikacją fałszywych artykułów (wspomniany nmap)
  • czy etyczne jest współpracowanie z wydawnictwem, które niepochlebne opinie chce cenzurować sięgając po działa prawnicze

Na te pytania musicie odpowiedzieć sobie sami, kolejny raz gdy będziecie sięgali po cokolwiek pod czym podpisane jest Software Press.

PS. 
Jeśli jakiś prawnik miałby coś do powiedzenia w tej kwestii, chętnie wysłucham wszelkich opinii.

Do kogo słać pytania

Jeśli chcecie kogoś zapytać o zaistniałą sytuację to jest nią pani Ewa Dudzic:

[email protected]

Jest ona, zgodnie z tym co sama napisała chief editor of hakin9 i możecie jej zadać pytanie jak ma się atak na wolne media do idei hackingu, który teoretycznie reprezentują tworząc magazyn o hackingu – Hakin9. A może to tylko dla kasy? 😉

Ciekawe linki

http://www.digininja.org/blog/hakin9_spam_kings.php

http://niebezpiecznik.pl/post/przekomiczny-fail-magazynu-hakin9/

Wykop ten wykop

http://www.wykop.pl/link/1283563/hakin9-chce-pozwac-polskiego-bloggera/

Dekompilator dla Code Virtualizera

Na blogu GDTR pojawił się projekt dekompilatora Code Virtualizer, wprawdzie zaprzyjaźnione z serwisem źródła skomentowały to tak – „maszyna stosowa, nie widzę rewelacji, dekompilatorem też to troszkę trudno nazwać”, jednak warto zajrzeć:

https://gdtr.wordpress.com/2012/10/03/decv-a-decompiler-for-code-virtualizer-by-oreans/