Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(In)security allgemein Sicherheit, Anonymität im Netz. Schutz und Maßnahmen. Prävention und Konzepte. Sicherheitsarchitekturen allgemein und auf der Netzwerkebene.

Sicheres programmieren von Anwendungen

Diskussion: Sicheres programmieren von Anwendungen im Forum (In)security allgemein, in der Kategorie Security Area; Anzeige Hallo Leute, wie der Titel schon sagt möchte ich Anwendungen möglichst sicher vor Crackern machen. Ich hab schon einen ...

Antwort
Alt 10.08.08, 00:49   #1 (permalink)
 
Registriert seit: 28.05.08
the_uxreal Leistung: Facit NTK
Likes: 0
Standard Sicheres programmieren von Anwendungen

Anzeige

Hallo Leute,

wie der Titel schon sagt möchte ich Anwendungen möglichst sicher vor Crackern machen. Ich hab schon einen Thread erstellt, wo auch ein Teil der fragen beantwortet werden, jedoch nur der Schutz vor Dekompilieren Schutz vor dekompilieren von C#-Anwendungen bzw. von .NET .
Einer meine Fragen sind beispielsweise:

  • Wie kann ich mich davor schützen, dass man Strings nicht aus dem Arbeitsspeicher auslesen kann?
  • Wie kann man sich vor dem lesen von Assembler-Code schützen? Falls es möglich ist.
  • Welche Sprache ist am "sichersten"?
Was gibt es für Möglichkeiten sich davor zu schützen bzw. gibts Tricks o.ä.? Ideen oder Vorschläge sind auch erwünscht.

the_uxreal
the_uxreal ist offline   Mit Zitat antworten
Alt 10.08.08, 10:03   #2 (permalink)
01
 
Registriert seit: 16.05.06
01 Leistung: Facit NTK
Likes: 0
Standard

http://www.s-a-ve.de/faq/Anti-Cracking-Tips-1.txt
http://en.wikibooks.org/wiki/Reverse_Engineering
tsehp.cjb.net
cip-re.6x.to
reteam.org
reverse-engineering.net
reversing.be
absolutelock.de
exetools.com

1. Strings nicht direkt ablegen sondern erst zur Laufzeit zusammenbauen/dekodieren indem z.B. jeder Character wieder +1 den richtigen ergibt

2.Es gibt ein paar Codebrocken an denen sich die gängigen Disassembler/Debugger verschlucken bzw. die diese erkennen.

3.ASM denn da siehst du was du machst Eigentlich alles was nicht sehr gebräuchlich ist und wo die Disassembler nicht die Links zu den API Calls auflösen können

Ich will dir jetzt nicht den Spass verderben und es ist für Coder sehr gut sich mit Cracken bzw. Reversing zu beschäftigen aber du wirst deine Software nicht schützen können so eine gew. Verbreitung erreicht wurde. Ich würde die Zeit lieber in Verbesserungen investieren so dass mehr Leute sich darüber freuen und dich unterstützen wollen.

Generell, lass die Finger von Packern/Unpackern/Obfuscators machen Ärger und es gibt genügend 1-Klick Entpacker. Sei so wenig standard wie möglich, nutze in den kritischen Routinen nicht die Standart Funktionen sondern mache viel per Hand -> Sinn muss man durch tracen erst erschließen -> Zeit+Frust. Baue viel Müll ein. Gib harte Demoversionen raus also die die Funktionalität nicht enthalten (und auch nicht nachrüstbar sind).

All dass wird dich aber nicht vor einer Armee hochtallentierter Cracker retten die zur Höchstform auflaufen wenn es darum geht als erster dein Tool als Release rauszugeben
01 ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 13.08.08, 12:51   #3 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
@01 zu 3:
ASM ist vermutlich einer der 'unsichersten' Sprachen.

Egal in welcher Sprache man sein Programm schreibt, in die Maschinensprache kann man es zurückübersetzen. Bei manchen geht sogar der Transfer in die Hochsprache, z.B. Java oder C#/.Net, da hier nicht direkt Assembler genutzt wird sondern eine Zwischensprache.


Ansonsten kann man jede Sprache, die direkt ausführbare Programme erstellt, in Assembler zurückübersetzen. ASM ist da besonders unsicher, da man, wenn man den ASM Code selber noch verstehen will, ihn sauber schreiben muss, was dem Angreifer zugute kommt.
Ansonsten bist du mit C/C++ gut beraten, evt., wenn du gcc nutzt, noch Optimierung (-O3) einstellen.
Ansonsten gibts diverse Tools, die das reversee engineering erschweren, indem sie den Code unübersichtlich machen.
Elderan ist offline   Mit Zitat antworten
Alt 13.08.08, 17:53   #4 (permalink)
sw33tlull4by
Guest
 
Likes:
Standard

Was du auchnoch machen koenntest waeren Codebloecke die nur dem Schutz des Programmes dienen aber im Programm selbst keinen zweck erfuellen.
z.B. wird in C alles so angelegt wie du es schreibst.
Also koenntst du folgendes machen:

c = random%255
int wasauchimmer[c];
-<wichtiger codebereich>-

Dadurch wandert der Codebereich immer durch den Stack, was einen Angriff mittels z.b:Exploitstrings schwierig macht.
  Mit Zitat antworten
Alt 13.08.08, 18:28   #5 (permalink)
Senior Member
 
Registriert seit: 29.07.05
Heinzelotto Leistung: Facit NTK
Heinzelotto eine Nachricht über ICQ schicken
Likes: 0
Standard

Zitat:
Original von sw33tlull4by
c = random%255
int wasauchimmer[c];
-<wichtiger codebereich>-
das ist nicht möglich, da die größe eines arrays immer schon zur compilezeit bekannt sein muss. Eben aus dem grund, weil es nicht möglich ist, dass der codebereich im stack herumwandert.
Man könnte zwar int* c = new int[rand()]; machen, aber dann würde lediglich der pointer im stack abgelegt werden, der speicher würde im heap alloziiert werden.
Heinzelotto ist offline   Mit Zitat antworten
Alt 13.08.08, 19:16   #6 (permalink)
sw33tlull4by
Guest
 
Likes:
Standard

Verdammt.
Hast recht.
Sollte mal wieder ein bischen mehr Programmieren
Aber es geht definitiv mit malloc,
dann soltle man aber noch den Speicher freigeben also einen Pointer auf dem Begin von malloc bereithalten, und dann
free mallocpointer
mfg

sw33t
  Mit Zitat antworten
Alt 13.08.08, 19:38   #7 (permalink)
Senior Member
 
Registriert seit: 29.07.05
Heinzelotto Leistung: Facit NTK
Heinzelotto eine Nachricht über ICQ schicken
Likes: 0
Standard

meinst du so?

Code:
// ...
char* memory = malloc(rand() * sizeof(char));
<<codeblock>>
damit würde der wichtige codeblock aber nur um die größe eines pointers verschoben werden. Dieser Pointer zeigt dann auf irgendeinen abschnitt im speicher, den malloc vom OS zugeteilt bekomen hat. Dieser Abschnitt wird sich aber nicht vor den "<<codeblock>>" schieben.
Heinzelotto ist offline   Mit Zitat antworten
Alt 14.08.08, 17:20   #8 (permalink)
sw33tlull4by
Guest
 
Likes:
Standard

stimmt, allociert ja ganz woanders im speicher.
k
ich hab genung meiner,in einem Jahr gewachsensn unwissenheit weiter die bloesse zu geben.

waerst du vielleicht so freundlich mir einen Wink mit dem Zaunpfahl zu geben wie man das programmiert?
jetzt komplett ohne irgendwelche speziell dafuer vorgesehenen libaries?
mfg

sw33t
  Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Security Area » (In)security allgemein » Sicheres programmieren von Anwendungen
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Wie sieht sicheres Onlinebanking aus? enkore (In)security allgemein 23 13.10.09 18:43
Sicheres Löschen von Dateien? speedo (In)security allgemein 15 16.01.09 20:04
Sicheres Kryptosystem auf Grundlage von Hashfunktion? heinzelJacKy Cryptography & Encryption 5 16.09.06 20:33
Sicheres System alt-f4 Windows 12 06.08.04 17:26
Gibt es ein sicheres Windows-Betriebssystem? netforward (In)security allgemein 12 08.12.03 19:28


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