Entwickler-Ecke

Off Topic - Computerbild-Kindersicherung


Chrischuh - Sa 31.07.10 12:52
Titel: Computerbild-Kindersicherung
Hallo,

ich soll für meine Oma ihren Pc aufräumen. Merkwürdigerweise ist dort die Computerbild-Kindersicherung installiert.
Zwar ist keine Zeitbeschränkung aktiviert, aber es startet mit jedem Systemstart mit.
Wie kann ich ohne das Passwort (was bei der Installation der Kindersicherung eingestellt wurde) die Sicherung deinstallieren?? oder einfach nur aus dem Autostart nehmen?

Chrischuh

PS: Bitte schriebt jetzt nicht: "Tolle Ausrede, du willst ja nur die Sicherung umgehen." so wie ich es schon in anderen Foren gelesen habe, auf der Suche nach einer Lösung.


glotzer - Sa 31.07.10 13:11

möglichkeit A: Komandozeile aufrufen und format C eintipen dann neues windows drauf.
möglichkeit B: Passwort knacken und dann löschen(hierfür gibt es sicher auf so einigen bösen seiten tools dafür)
möglichkeit C: Sie einfach lassen wie es ist, stört doch nicht wirklich oder?


Jakob_Ullmann - Sa 31.07.10 13:21

Du könntest versuchen, den Un-Installer so zu bearbeiten:

http://www.michael-puff.de/Artikel/KopierschutzCracken.shtml


Chrischuh - Sa 31.07.10 13:32

Also gibt es keine "einfache" möglickeit.
Ich nehme dann möglichkeit C, denn user profile iconglotzer hat recht. es stört nicht so sehr, dass sich dieser aufwand lohnen würde.

Trotzdem danke für die Vorschläge.


Delete - Sa 31.07.10 14:32

Stören vielleicht nicht, aber es belegt unnötig Ressourcen, wenn es nicht gebraucht wird. Eventuell hilft es, wenn man klärt, wie das Programm auf den Rechner gekommen ist. Irgendwer muss es ja installiert haben.


matze - Sa 31.07.10 16:06

hast du schon mal alle Standard-Passwörter durchprobiert?


FinnO - Sa 31.07.10 16:49

Hey,

kann man das Programm nicht ansonsten irgendwie Manuell entfernen - via Linux o.Ä.? Kann man es auch als Admin nicht löschen, notfalls irgendwie über einen 2ten Admin-Acc.? Das wäre ja schon ein starkes Stück...

MFG


IsNull - Sa 31.07.10 17:20

Ich hab es mal kurz angeschaut, sollte über ne Live Distro schnell wegzubekommen sein (bez. über nen Live Registry bearbeitungs Tool), evtl. geht es sogar direkt am laufenden System, wenn man Admin ist:

Prozesse die das Tool hinzufügt: (sind 64bit Pfade!)
C:\Windows\SysWOW64\cc32\webtmr.exe
C:\Windows\tray\wintmr.exe
C:\Windows\SysWOW64\cchservice.exe


Autostart Verewigungen:
O4 - HKLM\..\Run: [ChicoSys] C:\Windows\SysWOW64\cc32\webtmr.exe
O4 - HKCU\..\Run: [CCWinTray] C:\Windows\Tray\wintmr.exe
O4 - HKUS\S-1-5-18\..\Run: [CCWinTray] C:\Windows\Tray\wintmr.exe (User 'SYSTEM')
O4 - HKUS\.DEFAULT\..\Run: [CCWinTray] C:\Windows\Tray\wintmr.exe (User 'Default user')
O23 - Service: File-/Update Service (ksupmgr) - Unknown owner - C:\Windows\SysWOW64\ksupmgr.exe


gruss


Edit: Bei der Deinstallation macht es folgendes:


O4 - HKLM\..\RunOnce: [UIKISI_1] cmd /c del C:\Program Files (x86)\Common Files\System Shared\chico.sda
O4 - HKLM\..\RunOnce: [UIKISI_2] cmd /c del C:\Program Files (x86)\Common Files\System Shared\chico.sda
O4 - HKLM\..\RunOnce: [UIKISI_3] cmd /c del C:\Windows\SysWOW64\wdrvhook.dll
O4 - HKLM\..\RunOnce: [UIKISI_4] command /c del C:\Windows\SysWOW64\ccsync.exe

Wie fies :D


Chrischuh - So 01.08.10 13:11

Ja, echt fieses Programm.
Ich bekomme es nicht weg... stellt sich alles immer wieder selbst her.

Heute fahre ich nun wieder nach hause. Wenn ich das nächste mal hier bin, versuch ich es weiter.

Danke.

Chrischuh


Jakob_Ullmann - So 01.08.10 15:10

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Eventuell hilft es, wenn man klärt, wie das Programm auf den Rechner gekommen ist. Irgendwer muss es ja installiert haben.


Ja, ein Computer-Bild Leser, der eine CD-Ausgabe hatte, wo neben 9E99 genialen Optimierungstools auch eine Kindersicherung drauf war, die er/ sie unbedingt ausprobieren wollte. So nach dem Motto "mal installieren kann ja nichts schaden".

Mal im Ernst, dass "unerfahrene Nutzer" häufig jeden *Sch*** installieren, ist doch nichts besonderes. Deshalb gibt es ja die CD zur Computerbild. :P


Trashkid2000 - So 01.08.10 16:26

Also, habe mal ein bisschen mit der Kindersicherung rumgespielt.
Hoffe, Du hast auch die 2010-er Version.

Ich weiss nun, wo das Passwort gespeichert wird, und wie man es ändern kann.

Also, im Root von C:\ liegt eine Date, die nennt sich "net.ini".

In der ist das Passwort unter dem Zweig

"[CHICOMAIN]" im Schlüssel
"SID" gespeichert.

Das Passwort auslesen ist schwierig, da unbekanntes Encoding bzw. Verschlüsselung, aber neu setzen geht. Und auch, wenn die Kindersicherung im Hintergrund läuft.

Ersetze einfach den Schlüssel "SID=......." durch "SID=wNbkeN1JJ14=", und dann kannst Du mit dem Passwort "11111" (5 Einsen) in die Einstellungenn gehen und von dort aus deinstallieren.

Viel Erfolg dabei,

Marko


FrEaKY - Mo 02.08.10 08:55

lol. Was Leute sich nur fürn Scheiß installieren. :roll:


IsNull - Mo 02.08.10 11:28

Zitat:

Ersetze einfach den Schlüssel "SID=......." durch "SID=wNbkeN1JJ14=", und dann kannst Du mit dem Passwort "11111" (5 Einsen) in die Einstellungenn gehen und von dort aus deinstallieren.

owned

Meine Güte, dass die Software nicht all zuviel taugt war ja klar, aber dass sowas möglich ist, schon fast traurig.


Gausi - Mo 02.08.10 11:34

Naja, irgendwo muss das Passwort (oder ein Hash davon) ja gespeichert werden. Ob das nun in einer Datei im Stammverzeichnis passiert, oder irgendwo tief in der Registry ist für die Sicherheit prinzipiell egal. Da das "Kind" für diese Datei keine Schreibrechte hat, ist das doch in Ordnung so. ;-)


Jakob_Ullmann - Mo 02.08.10 18:16

Also ich hätte eigentlich gedacht, dass dich eine Kindersicherung vor Spielchen mit der Registry schützt. :P


uall@ogc - Mo 02.08.10 19:47

Wie heißt denn das Programm geanu? und gibts einen DL-link?


Trashkid2000 - Mo 02.08.10 20:33

Das Programm, um das es hier geht, heißt "Salfeld Kindersicherung 2010".

Zu finden bei Computerbild unter
http://www.computerbild.de/download/Kindersicherung-2010-2533415.html?dl=1

@Gausi
Du habt Recht, wenn das Kind denn einen eigenen Benutzeraccount hat, wird das mit dem Überschreiben des Passwortes wegen der benötigten Berechtigungen nicht gehen. Hat mich aber trotzdem gewundert, dass das so leicht zu ändern war. Die Lösung wäre vielleicht, ein Lock auf die Datei zu setzen, solange das Programm läuft.

Aber in diesem speziellen Fall hier hat die Oma das Programm wohl als Admin installiert, oder? Also geht der Tip.
Es ging ja nur darum, das Proggie wieder runter von der Festplatte zu kriegen.

Schönen Abend noch,
Marko


Delete - Di 03.08.10 00:25

Warum unnötig kompliziert machen, wenn ich als Administrator doch an die Datei komme? Und wenn ich so was auf einen PC einrichte, möchte ich schon noch als Administrator die Gewalt über meinen Rechner haben. Und wie schon gesagt, wenn die Person ein Administratoren Konto hat, kann ich mir die Software auch sparen.


IsNull - Di 03.08.10 18:07

Man kann von diesen Informationen eine Prüfsumme bilden, welche durch Veränderungen der Daten korrumpiert wird. Damit schützt man häuftig Lizenzierungsinformationen oder kann auch Privilege-Escalation verhindern.
Das schützt natürlich nicht gegen das zerstören/löschen der Daten -man kann einzig sagen, ob man etwaigen vorhandenen Daten trauen kann.


Boldar - Di 03.08.10 18:39

user profile iconIsNull hat folgendes geschrieben Zum zitierten Posting springen:
Man kann von diesen Informationen eine Prüfsumme bilden

Die man aber auch fälschen kann.


Trashkid2000 - Di 03.08.10 20:16

Kommen wir zu dem Schluss, dass sowieso nichts sicher ist. Als Programmierer muss man immer daran denken, dass es eigentlich immer möglich ist, irgendwas zu knacken! Man muss halt nur genug Zeit reinstecken und die richtigen Techniken anwenden.

Bitte korrigiert mich, wenn ich falsch liege!

Und mit .NET und dem IL-Code wird das Ganze nicht besser, da war es schon schwieriger, "normale" PE- Programme zu cracken. Da musste man sich noch mit Assembler auskennen. Ich weiss, dass es auch für .NET Fuscatoren gibt. Aber ob das was nützt?

Ist halt immer ein Wettbewerb zwischen Programmierern und Crackern. Deshalb sollte, so finde ich, jeder Programmierer auch wissen, wie Cracker vorgehen, wenn sie sich an dem Programm vergehen. Erst dann kann man wissen, wie man das Programm (halbwegs) sicher bekommt. Mit dem Wissen, dass ja wie schon gesagt nichts sicher ist.

Aber man kann es Crackern schwerer machen. So dass Cracker vielleicht die Lust verlieren.

Ist vielleicht Off-Topic, aber wollte ich mal los werden.

MfG, Marko


uall@ogc - Di 03.08.10 21:20

Die ganzen Salfeld sind nicht wirklich gut. Ich hatte mit mal das "Exe Password" Programm vor 2 Jahren angeschaut. Die eigentliche geschützte Exe steckt nach dem verschlüssseln einfach hinter der Entschlüsselungs Exe. Mit nem Hexeditor kann man das rauskopieren. Nicht mal das Password war mit MD5 etc. verschlüsselt sondern durch irgend ne einfache XOR Methode...

Die damalige PW Generierung für ExePassword:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function Encode(s: string): Integer;
var
  a: Integer;
  b: Integer;
  i: Integer;
begin
  s := s + #0;
  a := 0;
  for i := 2 to length(s) do begin
    b := Ord(s[i]) + a * $25;
    a := b;
  end;
  Result := a;
end;


Der Code um das zu umgehen (also Exe entpacken bzw. Key auslesen):


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
program decodefly;
{$APPTYPE CONSOLE}
uses
  windows,
  tlHelp32,
  classes,
  sysutils,
  messages;
// the Password encode code

function Encode(s: string): Integer;
var
  a: Integer;
  b: Integer;
  i: Integer;
begin
  s := s + #0;
  a := 0;
  for i := 2 to length(s) do begin
    b := Ord(s[i]) + a * $25;
    a := b;
  end;
  Result := a;
end;
var
  r: string =
    'abcdefghijklmnopqrstuvwxyz' +
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +
    '01234567890' +
    '!"§$%&/()=?' +
    'ÖÄÜöüä' +
    '+*~#-_.:,;<>@€';

function GetPossible(a: int64; var b: int64): Boolean;
begin
  Result := False;
  while ((a mod $25) <> 0and (a < $25000000000do
    inc(a, $100000000);
  if (a < $25000000000then
    Result := True;
  b := (a div $25);
end;

function decodebrute(a: int64; var s: string; tiefe: integer; maxdepth: integer): Boolean;
var
  i: integer;
  b: int64;
begin
  if (a = 0then begin
    s := '';
    Result := True;
    Exit;
  end;
  if (a > $25and (a <= $FFand (Pos(Char(a), r) > 0then begin
    s := Char(a);
    Result := True;
    Exit;
  end;
  if (tiefe > maxdepth) then begin
    Result := False;
    Exit;
  end;
  i := 1;
  Result := False;
  while (i <= length(r)) and (not Result) do begin
    b := a - ord(r[i]);
    if (b > 0and (b mod $25 = 0then
      if decodebrute(b div $25, s, tiefe + 1, maxdepth) then begin
        s := s + char(r[i]);
        Result := True;
      end;
    inc(i);
  end;
end;

function decode(a: integer): string;
var
  s: string;
  b: int64;
begin
  if GetPossible(a, b) then
    if decodebrute(b, s, 06then
      Result := '?' + s;
end;

function GetEdit: HWND;
var
  wnd: HWND;
begin
  Result := 0;
  wnd := FindWindow('TForm1'nil);
  wnd := FindWindowEx(wnd, 0'TPanel'nil);
  wnd := FindWindowEx(wnd, 0'TPageControl'nil);
  wnd := FindWindowEx(wnd, 0'TTabSheet'nil);
  wnd := FindWindowEx(wnd, 0'TEdit'nil);
  if wnd <> 0 then
    Result := wnd;
end;

function GetExecutableFromPID(dwProcessID: DWord): stringstdcall;
var
  FSnapshotHandle: THandle;
  FModuleEntry32: TModuleEntry32;
begin
  Result := '';
  if (dwProcessID <> 0then begin
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessID);
    if (fSnapshotHandle <> 0then begin
      FModuleEntry32.dwSize := Sizeof(FModuleEntry32);
      Module32First(FSnapshotHandle, FModuleEntry32);
      Result := FModuleEntry32.szExePath;
      CloseHandle(FSnapshotHandle);
    end;
  end;
end;

function ExtractEncodedPassword(ExeName: string): integer;
var
  fm: TFileStream;
  f: string;
  i: integer;
  begx, endx: integer;
begin
  Result := 0;
  fm := TFileStream.Create(ExeName, fmOpenRead);
  SetLength(f, fm.Size);
  fm.Read(f[1], fm.size);
  fm.free;
  begx := 0;
  endx := 0;
  for i := 1 to length(f) do begin
    if Copy(f, i, length('!#0005H3X¶')) = '!#0005H3X¶' then
      begx := i + 10;
    if Copy(f, i, length('EO!#0005H3XSO')) = 'EO!#0005H3XSO' then
      endx := i;
  end;
  if (begx <> 0and (endx <> 0and (endx > begx) then
    Result := StrToIntDef(Copy(f, begx, endx - begx), 0)
end;

function TrySetEditText(): Boolean;
var
  pid: DWord;
  Name: string;
  pwencoded: integer;
  Edit: Dword;
  pwdecoded: string;
begin
  Result := False;
  Edit := GetEdit;
  if (edit <> 0then begin
    if GetWindowThreadProcessID(Edit, pid) <> 0 then begin
      Name := GetExecutableFromPID(pid);
      if (Name <> ''then begin
        pwencoded := ExtractEncodedPassword(Name);
        if (pwencoded <> 0then begin
          pwdecoded := decode(pwencoded);
          if (pwdecoded <> ''then begin
            SendMessage(Edit, WM_SETTEXT, 0, integer(PChar(pwdecoded)));
            Result := True;
          end;
        end;
      end;
    end;
  end;
end;

function unpack(fl: string): Boolean;
var
  fm: TFileStream;
  InFile: string;
  i: integer;
begin
  Result := False;
  fm := TFileStream.Create(fl, fmOpenRead);
  setLength(InFile, fm.size);
  fm.Read(inFile[1], fm.Size);
  fm.free;
  for i := 1 to Length(inFile) do begin
    if (Copy(Infile, i, 3) = 'AAA'and (Copy(Infile, i + 123) = 'MZP'then begin
      fm := TFileStream.Create((fl + ' extract.exe'), fmCreate);
      fm.Write(InFile[i + 12], Length(InFile) - i - 11);
      fm.free;
      Result := True;
    end;
  end;
end;

function ShowPw(fl: string): string;
var
  pwencoded: integer;
begin
  Result := '';
  pwencoded := ExtractEncodedPassword(fl);
  if (pwencoded <> 0then
    Result := decode(pwencoded);
end;

procedure main;
var
  pw: string;
begin
  Writeln('-----------------------------');
  Writeln(' Salfeld.de Exe Depassword ');
  Writeln(' 2007 by uall ');
  Writeln('-----------------------------');
  Writeln('');
  Writeln('(1) -up "ExeName": unpacks the original executable');
  Writeln('(2) -pw "ExeName": extracts a password for the executable');
  Writeln('(3) no param: searches for started program and inserts password');
  Writeln('');
  if (paramcount < 2then begin
    write('method (3) used: ');
    if TrySetEditText then
      writeln('successful')
    else
      writeln('failed');
  end else begin
    if (paramstr(1) = '-up'then begin
      write('method (1) used: ');
      if Fileexists(paramstr(2)) and unpack(paramstr(2)) then
        writeln('successful')
      else
        writeln('failed');
    end else if (paramstr(1) = '-pw'then begin
      write('method (2) used: ');
      if FileExists(paramstr(2)) then begin
        pw := showpw(paramstr(2));
        if (pw <> ''then
          writeln('successful pw: ' + pw)
        else
          writeln('failed');
      end else
        writeln('failed');
    end else
      writeln('unknown parameter used');
  end;
  ReadLn;
end;
begin
  Main;
end.


Edit: Funktioniert immer noch, habs mal auf Sprachversionen angepasst. Nett auch, dass noch nicht mal TForm1 umbenannt wurde ;)


Boldar - Di 03.08.10 21:40

user profile iconTrashkid2000 hat folgendes geschrieben Zum zitierten Posting springen:

Aber man kann es Crackern schwerer machen. So dass Cracker vielleicht die Lust verlieren.


Ein echter Cracker macht dann erst recht weiter, das ist erst die Motivation.

Ist vielleicht Off-Topic, aber wollte ich mal los werden.