Nieudana podmiana jądra systemu

0

Witajcie. Skończyłem właśnie DLL'kę, którą chce zastąpić w systemie (WinXP) bibliotekę kernel32. Oryginalnej DLL'ce zmieniłem nazwę na rkernel32, aby funkcje przechodziły przez moją bibliotekę, a ona dopiero wywoływała je u rkernel32. Po podmienieniu tejże biblioteki (przy użyciu Ubuntu), system wywalał się w momencie, kiedy normalnie pojawiał się ekran "Zapraszamy". I teraz moje pytanie, co zrobiłem źle ? O czym powinienem był pamiętać tworząc taką bibliotekę ?

PS. Możliwe,że nie które funkcje się nie zagadzają - mam na myśli to, że wyeksportowane są pod innym argumentami niż pod tymi pod którymi rzeczywiście są w DLL, choć wątpię by był to jedyny o ile w ogóle istniejący problem. Będę jeszcze sprawdzał zgodność tych funkcji, lecz wolałem zapytać na forum by dowiedzieć się czy to może być jedyny problem.

Dołączam jako załącznik pliki z DLL (rozszerzenie txt, bo cpp,h,zip,rar nie chciało mi przyjąć).

Pozdrawiam.

0

może system wykonuje sprawdzanie sygnatury dll ?

0
hmmm napisał(a)

może system wykonuje sprawdzanie sygnatury dll ?

Masz na myśli hash'a ? A skąd mam wiedzieć jaki typ oni użyli ?

Tak w ogóle spróbowałem (nie zmieniając nic w kodzie) przed chwilą ponownie skompilować DLL i kompilator wywalił :

  multiple definition of `GetAtomNameA@12' 
  first defined here
  multiple definition of `FindAtomA@4' 
  first defined here 
  multiple definition of `AddAtomA@4' 
  first defined here 
  ld returned 1 exit status 

Przypuszczam, że jakimś cudem Dev-Cpp przepuścił nie dobrze przygotowany kod i biblioteka nie była w takim stanie w jakim powinna być przez co system się wywalił.Zastanawia mnie czemu akurat te 3 funkcje, sprawdziłem je dokładnie i wszystko jest z nimi w porządku.Co radzicie ?

Pozdrawiam.

1

user image
Tyle tematów, że Dev-C++ to zuo, a ty jeszcze z niego korzystasz?
Weź coś lepszego ściągnij.

0

Przypuszczam, że jakimś cudem Dev-Cpp (...). Co radzicie ?

Zmienić IDE.

Windows na pewno sprawdza sumy kontrolne najważniejszych bibliotek przy starcie, chociaż nie wiem czy akurat kernel32 się pod 'najważniejsze biblioteki' łapie.

0

Słuchaj, g**no wiesz, skończ się ośmieszać. Co spieprzyłeś? Wszystko. Nawet nie potrafisz dynamicznie pobranych funkcji wywoływać, nie wiesz co to konwencje wywołania. Kernel32 to nie jądro systemu i nigdy nim nie był. Ile jeszcze miesięcy będziesz takie cyrki odstawiał zanim postanowisz nauczyć się podstaw?

0
expert napisał(a)

Słuchaj, g**no wiesz, skończ się ośmieszać. Co spieprzyłeś? Wszystko. Nawet nie potrafisz dynamicznie pobranych funkcji wywoływać, nie wiesz co to konwencje wywołania. Kernel32 to nie jądro systemu i nigdy nim nie był. Ile jeszcze miesięcy będziesz takie cyrki odstawiał zanim postanowisz nauczyć się podstaw?

Po co tyle agresji?

Kernel32.dll is the 32-bit dynamic link library found in the Windows operating system kernel.

Czyli jest czescia jadra

0
expert napisał(a)

Słuchaj, g**no wiesz, skończ się ośmieszać. Co spieprzyłeś? Wszystko. Nawet nie potrafisz dynamicznie pobranych funkcji wywoływać, nie wiesz co to konwencje wywołania. Kernel32 to nie jądro systemu i nigdy nim nie był. Ile jeszcze miesięcy będziesz takie cyrki odstawiał zanim postanowisz nauczyć się podstaw?

Spokojnie człowieku, założyłem ten temat, żeby się czegoś nauczyć/dowiedzieć i to dlatego, że nie wiem wszystkiego w przeciwieństwie do Ciebie. Wracając do tematu, zmienię IDE i zobaczę co z tego wyniknie.

1

Nie, nie jest. NT posiada mikrojądro (moduł "nt" w wielu wersjach), kernel32.dll to zwykła biblioteka trybu użytkownika, równie blisko związana z jądrem systemu co np. biblioteki Qt. Kernel32 to jest "jądro" ale klienckich dllek podsystemu win32. Definicje bierzesz chyba z tego samego miejsca co autor wątku pomysły. Monitor API poprzez podmianę plików systemowych, rotfl.

0

O ile dobrze kojarzę, to jądro "siedzi" w pliku ntoskrnl.exe/ntkrnlmp.exe. Tak było przynajmniej w XP/NT/2000, w nowszych nie wiem.

0

Dobrze, macie racje, źle nazwałem temat. Kierowałem się po prostu nazwą biblioteki.

0

@othello, nowsze to też NT. Kompilacje są cztery, nie dwie: ntoskrnl.exe, ntkrnlmp.exe, ntkrnlpa.exe i ntkrpamp.exe, ładowane zależnie od sprzętu i konfiguracji, widziane wewnętrznie jako "nt", w celu unifikacji nazw.

Dowiemy się, ale konkretnie, po co chcesz podmieniać kernel32? Takie narzędzia jak http://www.rohitab.com/apimonitor czy http://technet.microsoft.com/en-us/sysinternals/bb896645 nie podmieniają plików systemowych, ciekawe dlaczego?

0

Nie chcąc używać hook'ów, postanowiłem podmienić tą bibliotekę, po co dokładnie ? A po to, żeby podmienić funkcje systemowe związane z kompresją i dekompresją plików.

0

Które funkcje i którą kompresją? W jakim celu?

0

To jakiś żart ? Wypytujesz mnie o wszystko jakbym był na przesłuchaniu ... jakby mogło to pomóc. Chodzi mi o te funkcje, które zawiera lz32.dll, lecz one odwołują się do kernel32.dll. Tak więc przy np. otwieraniu pliku, nic mi to nie daje, bo jak mi się wydaje (żebym znowu nie został posądzony o herezje) system wywołuje je bezpośrednio z kernela. Tylko nieliczne aplikacji z tego korzystają np. Install Wizard czy jakoś tak.

1

Jeśli szukałeś informacji w internecie to wiesz, że nikt takich "metod" nie stosuje, to bardzo dziwne jeżeli mają jakikolwiek sens. Hooków nie możesz użyć ponieważ? W jakich sytuacjach i po co masz potrzebujesz się do tych funkcji dobrać? Chcesz dalej bawić się w mrzonki, których nigdy nie będziesz w stanie zrealizować? W takim razie nie odpowiadaj.

0

Ok, dzięki wszystkim za pomoc, jeśli twierdzicie, że to niezbyt dobry pomysł z podmianą DLL, załatwię to hookami.

1 użytkowników online, w tym zalogowanych: 0, gości: 1