|
|
|
|
"low level" Systemzugriffe |
Compuholic
knows where he wants to go tomorrow
Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München
|
|
Für den BIOS Zugriff benötigst Du auf jeden Fall Assembler. Ich weiß ja nicht welchen Compiler Du benutzt, aber die meisten C-Compiler haben auch einen Inline-Assembler integriert.
Um auf die Interrupt-Tabelle zugrifen zu können benötigt man zumindest einen ASM-Befehl. Das größere Problem wird sein, das Du (wie auch beim BIOS) ring0 Zugriff haben mußt. (Oder zu löst das ganze unter DOS).
Bei den Sektoren bin ich mir nicht sicher. Ist wahrscheinlich OS abhängig. Vielleicht haben manche Betriebssysteme ein API für so etwas, aber afaik brauchst Du dafür ebenfalls ASM.
|
|
15.03.2003 23:28 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
zu C: doch, es ist eine ziemlich hardwarenahe Sprache - es gibt sogar einen C-Compiler für Gameboy (damit kann man aus Gameboy ne Messstation basteln).Jedenfalls kann man damit Bytemanipulationen usw vornehmen.
zum ring: es gibt verschiedene Privelegstufen auf einem System - seit dem 386 unterstützen die CPUs eine Aufteilung in verschiedene Privilegstufen: läuft ein Programm unter ring0-stufe, kann es alles machen, es hat einen direktzugriff auf Hardware, im ring1 Modus schon weniger, ring2 noch weniger und ring3 gar net.Aktuelle OS wie win2k,XP,Linux benutzen nur 2 davon: ring0 für Kernel uns Systemtreiber und ring3 für Anwendersoftware(bessere Erklärung hier: )
http://www.linux-community.de/Neues/story?storyid=6820
Um bestimmten Code mit ring0 Privilegien auszuführen, muss man die erst "freischlaten", zumindest ab win2k ist dafür ein Treiber nötig.Das ist auch gut so: es gab nen Virus für win 9.x,welches das BIOS überschrieb - das ist ab win 2k nicht mehr so einfach.
Zu deinem Vorhaben: hm, das ist aber ein hardreset, ob das dem rechner gut bekommt? du kannst dafür besser die WinAPI nutzen - jedoch wird es unter win2k/NT/XP etwas komplex, da man tokiens braucht usw.Auf meiner HP kannst du neben nem Shutdownprogramm auch den Quellcode(kommentiert) downloaden... obwohl das in ASM ist, sollte es sich leicht in C umsetzen lassen, da in dem Programm praktisch nur die APIs benutzt werden.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von CDW: 16.03.2003 14:33.
|
|
16.03.2003 14:28 |
|
|
scr!pTk!d
Member
Dabei seit: 10.11.2002
Beiträge: 276
Themenstarter
|
|
für ring0 zugriff unter win2k hab ich jetzt einen assembler source(s.u.) allerdings werde ich nicht schlau daraus. wie könnte ich das denn mit c (oder von mir aus auch in pascal
) umsetzen??
Zitat: |
.386p
.MODEL FLAT,STDCALL
locals
jumps
UNICODE=0
include w32.inc
Extrn SetUnhandledExceptionFilter : PROC
Interrupt equ 5 ;interrupt number which we will use
;if you use Int 1h or 3h, it will be
;more harder debugg your program
.DATA
msg1 db "Switch to Ring0 by IDT",0
msg2 db "Ring0 activated",0
.CODE
Start:
push edx
sidt [esp-2] ;read IDT to stack
pop edx ;address of Interrupt table
add edx,(Interrupt*8)+4
;Interrupt table base+Int number+size for
;Int in Interrupt table=Int vector address
mov ebx,[edx]
mov bx,word ptr [edx-4]
;read old address our interrupt (INT 5h)
lea edi,InterruptHandler
mov [edx-4],di
ror edi,16 ;set our new interrupt handler
mov [edx+2],di
push ds ;save registers
push es
int Interrupt ;jump to Ring0 (our int 5h handler)
pop es ;restore registers
pop ds
mov [edx-4],bx ;set old int 5h handler
ror ebx,16
mov [edx+2],bx
call MessageBoxA,0, offset msg2, offset msg1,0
call ExitProcess, -1
|
__________________ ceterum censeo carthaginem esse delendam
|
|
16.03.2003 16:19 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
scheint tasm zu sein oder nasm, hab den soweit nach MASM portiert, aber da scheint was zu fehlen... ich kenne mciht mit nasm nicht so genau aus.Könntest du vielleicht eventuell den Link posten?... ich weiß aber nicht, ob, wenn man daraus eine DLL macht, der ganze Prozess unter ring0 läuft... muss beschämd eingestehen, dass ich keine Peilung hab, was der Code so macht (mit interrupts usw.kenn ich micht nicht so aus), naja, außerdem ist fremden Asmcode zu lesen immer schwer - ich komme ja nicht mal bei meinem so ganz mit *g*
|
|
16.03.2003 20:55 |
|
|
Compuholic
knows where he wants to go tomorrow
Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München
|
|
Ich kann glaube ich grob sagen, was der Code macht.
Es wird das "interrupt descriptor table Register" (IDTR) ins edx ausgelesen, das die physikalische Speicheradresse des "interrupt descriptor table" (IDT) enthält. Dann werden einige Additionen durchgeführt, so das edx auf den Pointer zur Speicheradresse des Interrupt-Handlers (Das Unterprogramm, das aufgerufen wird, wenn der entsprechende Interrupt eintritt) zeigt. Diese Adresse wird nun mit der Adresse des eigenen Interrupt-Handlers überschrieben.
Wenn jetzt der Interrupt aufgerufen wird, muß durch ein Interrupt-Gate in ring0 geschaltet werden und es wird der im IDT angegebene Code ausgeführt (den wir ja mit unserer Speicheradresse überschrieben haben).
@CDW: Was an diesem Programm noch fehlt ist die Implementation des Interrupt Handlers.
Was ich noch nicht ganz gerafft habe: Ich dachte immer, daß der Speicherbereich des IDT gegen den Zugriff von ring3 geschützt ist. Ganz davon zu schweigen, das ring3 keinen Zugriff auf Interrupts hat. Außerdem: mit "lea" wird ja die effektive Adresse des Interrupt Handlers geladen. Aber es wird doch die effektive Adresse den virtuellen Adressraums geladen. Dieser hat doch aber keine Gültigkeit in einem anderen Task, oder findet kein Task-Switch statt?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Compuholic: 16.03.2003 23:31.
|
|
16.03.2003 23:29 |
|
|
scr!pTk!d
Member
Dabei seit: 10.11.2002
Beiträge: 276
Themenstarter
|
|
|
|
Zitat: |
(.........)
I think Assembler example is better for read than this C example.
Switch to Ring0 by IDT (Interupt Descriptor Table) aka EliCZ's method:
-------------------------------------------------
Next method is the best know. I saw it firts when used it my
friend EliCZ. After some days there was CIH virus which used
this method.
Most of programms which use Ring0 switching, use this method.
Some of anti-anti-debugg cracker's tools can detect it (Frog-Ice,
IceDump).
Example:
========================================
.386p
.MODEL FLAT,STDCALL
locals
jumps
UNICODE=0
include w32.inc
Extrn SetUnhandledExceptionFilter : PROC
Interrupt equ 5 ;interrupt number which we will use
;if you use Int 1h or 3h, it will be
;more harder debugg your program
.DATA
msg1 db "Switch to Ring0 by IDT",0
msg2 db "Ring0 activated",0
.CODE
Start:
push edx
sidt [esp-2] ;read IDT to stack
pop edx ;address of Interrupt table
add edx,(Interrupt*8)+4
;Interrupt table base+Int number+size for
;Int in Interrupt table=Int vector address
mov ebx,[edx]
mov bx,word ptr [edx-4]
;read old address our interrupt (INT 5h)
lea edi,InterruptHandler
mov [edx-4],di
ror edi,16 ;set our new interrupt handler
mov [edx+2],di
push ds ;save registers
push es
int Interrupt ;jump to Ring0 (our int 5h handler)
pop es ;restore registers
pop ds
mov [edx-4],bx ;set old int 5h handler
ror ebx,16
mov [edx+2],bx
call MessageBoxA,0, offset msg2, offset msg1,0
call ExitProcess, -1
;--------------------------------------------------------------------------
---
;OUR NEW INT 5h HANDLER (it run in Ring0)
;--------------------------------------------------------------------------
---
InterruptHandler:
mov eax,dr7 ;test for Ring0
iretd ;jump back to Ring3
ends
end Start
========================================
There are some other methods. But they weren't use in any
program. I write about them in secret area. There are
two other methods for Win9x (two very good methods)
and one method for WinNT and Win2k.
|
das ganze stammt von
http://www.anticracking.sk/Articles/Ring0.txt
__________________ ceterum censeo carthaginem esse delendam
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LX: 01.08.2004 16:53.
|
|
17.03.2003 13:34 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
hm, ich hab win2k SP3 und beim zugriff auf IDT bekomm ich Accessviolation... war wohl nix, aber irgendwo auf der Platte müsste ich noch was funktionierendes haben, schau mal nach...
|
|
17.03.2003 19:13 |
|
|
scr!pTk!d
Member
Dabei seit: 10.11.2002
Beiträge: 276
Themenstarter
|
|
merkwürdig... wäre cool, wenn du was finden würdest
__________________ ceterum censeo carthaginem esse delendam
|
|
17.03.2003 21:16 |
|
|
scr!pTk!d
Member
Dabei seit: 10.11.2002
Beiträge: 276
Themenstarter
|
|
cool, vielen dank
ich werde mich bei gelegenheit revanchieren
__________________ ceterum censeo carthaginem esse delendam
|
|
18.03.2003 19:55 |
|
|
|
|
|
|