[+]Topic: Paper
[+]Von: silentz
[+]Return: Paper

[Paper] Entry Point Obscurity (German)
written by silentz

=============
== Vorwort ==
=============
Hi, herzlich willkommen zu dem kleinen Paper von mir zu EPO (Entry Point Obscurity).
Ich habe dieses Paper geschrieben, weil ich nix über EPO in Deutsch gefunden hab, auf jedenfall kein Paper
oder Tutorial. Ich schreibe Viren in Perl und bin darin selbst noch Anfänger und naja deshalb hab ich mich entschlossen
dieses Paper zu schreiben, um es euch näher zu bringen und um es selbst besser zu verstehen.
Naja da Appender und Prepender in Perl genauso wie Overwriter kein Problem sind, hab ich mich dann also zu diesem Paper entschlossen.

So also dann fangen wir mal an...

==================
== Was ist EPO? ==
==================
Also es gibt verschiedene Infektionsmöglichkeiten bei Viren, die da wären:

-Overwriter (sehr einfach aber auch sehr schlecht)
-Appender (auch ziemlich einfach, allerdings schon besser weil man die "Wirtdatei" am leben lässt) Appender werden hinten angehängt
-Prepender (genauso wie appender allerdings werden sie vor der Wirtsdatei geschrieben)
-EPO (Hat einen dynamischen Eintrittspunkt und befindet sich meistens irgendwo in der "Wirtsdatei" allerdings nicht am anfang oder ende.

Also EPO ist die wohl schwierigste Art einer Infektion, vor allem da man Versuchen sollte den EP dynamisch zu hinterlegen.
Das heisst, das der EP von File zu File unterschiedlich sein sollte, damit AVs es nichtmehr so leicht haben ;).


=================================
== Wie soll das Funktionieren? ==
=================================
Dazu hab ich mir schon ein paar gedanken gemacht, steh allerdings zu diesem Zeitpunkt noch nicht vor etwas vollkommenem.
Meine Idee ist es auszulesen wieviele "Calls" (&blabla;) es gibt und dann die Anzahl durch 2 zu teilen, kommt eine kommazahl raus, 
kann es sich nur um *,5 handeln, also addieren wir 0,5 hinzu und haben dann eine volle zahl, so den inhalt dieses Calls schreiben
wir dann in eine Variable nennen wir sie mal "$oldcall = $line[*];" So also haben wir schonmal den alten Call gespeichert und 
können ihn jetzt z.B. zu "&myvirii;" ändern, damit unser Virus an dieser stelle aufgerufen wird.
Soweit nun mit dem dynamischen Call-austausch, nun müssen wir noch wissen wie wir dynamisch einen "Wohnort" für den 
Virus finden.
Das machen wir fast genauso, wir zählen wieviele subs es gibt und schreiben dann bei der hälfte den virus rein, also genau wie bei dem Prinzip 
für den call. So damit das allerdings nicht auffällt schreiben wir am ende des Virus noch einen call befehl, zu dem sub der eig aufgerufen werden soll,
also den, den wir ja bereits in "$oldcall" gespeichert haben.
Nun haben wir wohl eine Idee um die ganze sache dynamisch zu machen :)...


============================================
== Wie den eigenen "Virus-body" auslesen? ==
============================================
So das Problem hat mich am Anfang auch beschäftigt, es gibt lösungen wie z.B. das der Virus in einer bestimmten zeile anfangen soll, problem ist
hier aber das es nicht wirklich dynamisch ist, dann gibt es noch eine Lösung wie ein kommentar zu setzen, allerdings ist das auch nich toll aus 
dem einfachen Grund, das es AVs ein erkennungsmuster liefert. Naja ich werde es wohl genauso machen wie auch die Infektionsmarke zu setzen,
Wir schreiben hinter jede zeile des Viruses z.B. 30 Leerzeichen also ("                    ") ohne die " natürlich.
das ist unsichtbar, und wir können ganz einfach auslesen welche zeilen zum Virusbody gehören etwa so:

open(ME, "$0");
@mebig = ;
close(ME);

foreach $line (@me){
if ($line =~ /                              /){ #Virusbody hat 30 Leerzeichen (min)
push (@mybody, "$line\n");
}}

So und schon haben wir den ganzen Virus in einem Array (hier: @mybody) gespeichert.


=====================================================
== Wie eine bereits vorhandene Infektion erkennen? ==
=====================================================
Zu diesem Problem ist mir was ganz einfaches, und wie ich finde gutes zu Ohren gekommen:
Man schreibt in die erste zeile (z.B. #!/usr/bin/perl) einfach 5 leerzeichen also "#!/usr/bin/perl     ".
Also muss man nur das File auslesen und z.B. so gucken ob es schon infiziert ist:

open(FILE, "testfile.pl");
@file = ;
close(FILE);

#  ---JETZ DIE üBERPRüFUNG---
if ($file[0] !~ /     /){&infect;}

So also wie man sieht wir das File infiziert wenn in der ersten zeile KEINE 5 leerzeichen gefunden werden.


=================
== Schlusswort ==
=================
Also das wars schon von meinem Paper, ich hoffe es hat euch geholfen, und vllt dem ein oder anderen Tipps gegeben die einem das Leben
erleichtern. Ich selbst bin Anfänger im Virencoden, und auch Anfänger in Perl, aber ich hoffe trotzdem das es euch geholfen hat EPO ein bisschen
besser zu verstehen. Naja ich hoffe die Idee mit der Dynamik gefällt auch ein paar von euch.

mfg silentz