Heim php教程 PHP开发 Das Prinzip und die Praxis der Modifizierung der Zend-Engine zur Implementierung der PHP-Quellcode-Verschlüsselung

Das Prinzip und die Praxis der Modifizierung der Zend-Engine zur Implementierung der PHP-Quellcode-Verschlüsselung

Dec 14, 2016 am 11:46 AM

1. Grundprinzipien
Erwägen Sie das Abfangen der Schnittstelle für PHP, um Quelldateien zu lesen. Zuerst habe ich darüber nachgedacht, mich mit der Schnittstelle zwischen Apache und PHP zu befassen, siehe Apaches src/modules/php4/mod_php4.c (dies ist die Datei, die PHP statisch in Apache kompiliert, make install), in send_php() Der Dateizeiger wird abgefangen Verwenden Sie in der Funktion die Methode der temporären Datei, und der Dateizeiger wird nach der Entschlüsselung ersetzt. Diese Methode wurde getestet und hat sich als machbar erwiesen. Es müssen jedoch zwei Dateioperationen verwendet werden, was ineffizient ist und die DSO-Methode nicht verwendet werden kann. Shuangyuan Nursing Home
Daher habe ich den Prozess des Abfangens von PHP-Lesedateien und des Ladens in den Cache überdacht. Nach intensiver Suche habe ich festgestellt, dass zend-scanner.c in der Zend-Engine dies tut. Beginnen Sie mit der Änderung dieser Datei. Beleuchtungsprojekt

2. Implementierungsmethode

Verwenden Sie libmcrypt als Verschlüsselungsmodul und verwenden Sie nun die DES-Methode zur ECB-Modus-Verschlüsselung

Das Folgende ist der Quellcode für die Dateiverschlüsselung :

C++-Code
/* ecb.c-----hier ausschneiden-----------* /
/* encrypt für PHP-Quellcode Version 0.99 Beta
wir verwenden libmcrypt, um Codes zu verschlüsseln, bitte
installieren Sie es zuerst
Kompilierungsbefehlszeile:
gcc -O6 -lmcrypt -lm -o encryptphp ecb.c
bitte LD_LIBRARY_PATH vor der Verwendung festlegen
GNU copyleft, entworfen von wangsu, miweicong */

#define MCRYPT_BACKWARDS_COMPATIBLE 1
#define PHP_CACHESIZE 8192
#include < mcrypt.h > sys/types.h >
#include < sys/stat.h >


main(int argc, char**) argv)

int td, i,j,inputfilesize,filelength;

char passwort[12]; >int readfd;

char *key;
void *file_buffer;
int realbufsize=0; struct stat *filestat;


if(argc == 3) {
strcpy(password,argv[1]);
strcpy(filename,argv[2]); >} else if(argc == 4 && !strcmp(argv[1],"-d")){
strcpy(password,argv[2]); ;
decode=1;
printf("Dekodierungsmodus aufrufen ... n"); else {
printf("Verwendung: encryptphp [-d] Passwortdateinamen"); >exit (1);
}


keysize=mcrypt_get_key_size(DES);

key=calloc(1, mcrypt_get_key_size(DES));


gen_key_sha1( key , NULL , 0, Schlüsselgröße, Passwort, strlen(Passwort));
td=init_mcrypt_ecb(DES, Schlüssel, Schlüsselgröße);

if((readfd=open(filename,O_RDONLY,S_IRUSR|S_IWUSR| S_IRGRP) )==-1){
printf("FATAL: Datei kann nicht zum Lesen geöffnet werden");
exit(3);

filestat=malloc(sizeof (stat ));

fstat(readfd,filestat);
inputfilesize=filestat-
printf("filesize is %d n",inputfilesize); ;

inputfilesize=((int)(floor(inputfilesize/PHP_CACHESIZE)))+1)*PHP_CACHESIZE;

if((file_buffer=malloc(inputfilesize))==NULL){

printf ("FATAL: malloc file buffer.n");

exit(2);
}

if((block_buffer=malloc(PHP_CACHESIZE))==NULL){

printf( „FATAL: kann den Blockpuffer nicht verschlüsseln“); ,block_buffer, PHP_CACHESIZE)){
printf(".");
if(!decode){
if(realbufsize< PHP_CACHESIZE){

for(i=realbufsize;i< PHP_CACHESIZE;i++ ){

((char *)block_buffer)[i]='

}

mcrypt_ecb (td, block_buffer,
} else {
mdecrypt_ecb ( td, block_buffer , realbufsize);
memcpy(file_buffer+j*PHP_CACHESIZE,block_buffer,PHP_CACHESIZE);

j++;

if((ifp=fopen(filename,"wb"))==NULL){

printf("FATAL: file access error.n"

exit(3);
fwrite ( file_buffer, inputfilesize, 1, ifp);
free(file_buffer);
fclose; 🎜>printf ("n");

return 0;

}

/*--- end of ecb.c ------------ --- -------*/

Da es sich im ECB-Modus um eine Blockverschlüsselung mit einer bestimmten Blocklänge handelt, werden hier einige Nullzeichen ausgefüllt. Internationale Ausstellung

Dann ändern Sie Zend/zend-scanner.c im PHP-Code wie folgt:

(Meine PHP-Version ist 4.01pl2, SUNsparc/solaris 2.7, gcc 2.95;)

Fügen Sie vor der Datei hinzu:

#define MCRYPT_BACKWARDS_COMPATIBLE 1
#include < mcrypt.h >

Kommentieren Sie dann die Definition von YY_INPUT um Zeile 3510 aus.

Dann ändern Sie die Funktion yy_get_next_buffer() um Zeile 5150:
Fügen Sie eine Definition zum Funktionsheader hinzu:
void *tempbuf;
char debugstr[255]; >int td,keysize;
int x,y;
FILE *fp; );
Dieser Satz.
Geändert in:

tempbuf=malloc(num_to_read);
if((yy_n_chars=fread(tempbuf,1,num_to_read,yyin))!=0){
/*decode* /
#define passwort "PHPphp111222"

#define debug 0


keysize=mcrypt_get_key_size(DES);
key=calloc(1, mcrypt_get_key_size(DES));
gen_key_sha1( key, NULL, 0, keysize, strlen(password));
td=init_mcrypt_ecb(DES, key, keysize);

memcpy((&yy_current_buffer- >yy_ch_buf[number_to_move]),tempbuf,yy_n_chars);

if(debug){
fp=fopen("/tmp/logs","wb"); ,1,fp);
fwrite(tempbuf,1,yy_n_chars,fp);
fclose(fp); >}
free(tempbuf);

Dann kompilieren Sie PHP und installieren es gemäß der normalen Methode. Da ich mit libtool nicht vertraut bin, habe ich bei der Konfiguration die statische Methode gewählt -mcrypt, damit ich die Makefile-Kabelablage nicht manuell ändern muss

3. Tests und Ergebnisse

Nach dem Kompilieren von PHP und Apache habe ich mehrere Dateien mit encryptphp verschlüsselt, das aus ecb.c kompiliert wurde , bzw. Dies liegt daran, dass die ECB-Verschlüsselungsmethode des Blocks bestimmt, dass Blöcke mit fester Länge verwendet werden müssen. Bitte geben Sie mir daher einige Ratschläge, welche Stream-Verschlüsselungsmethode verwendet werden kann, um die Cache-Verarbeitungsmethode des Zend zu berücksichtigen Jedes Mal 8192 Bytes. (Die von Zend jedes Mal gelesene Blocklänge kann auf anderen Plattformen unterschiedlich sein)

Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Motorenlandschaft verändert sich: Dreizylindermotoren fordern die Dominanz von Sechs- und Achtzylindern heraus Motorenlandschaft verändert sich: Dreizylindermotoren fordern die Dominanz von Sechs- und Achtzylindern heraus Oct 08, 2023 pm 10:57 PM

Laut Nachrichten vom 8. Oktober erlebt der US-Automobilmarkt einen Wandel unter der Haube. Die bisher beliebten Sechszylinder- und Achtzylindermotoren verlieren allmählich ihre Dominanz, während Dreizylindermotoren auf dem Vormarsch sind. Die Nachrichten vom 8. Oktober zeigten, dass sich der US-amerikanische Automobilmarkt unter der Haube verändert. Die in der Vergangenheit beliebten Sechszylinder- und Achtzylindermotoren verlieren allmählich ihre Dominanz und der Dreizylindermotor beginnt sich durchzusetzen. In den Köpfen der meisten Menschen lieben Amerikaner Modelle mit großem Hubraum und den „amerikanischen großen V8“. war schon immer das Synonym für amerikanische Autos. Doch laut kürzlich von ausländischen Medien veröffentlichten Daten durchläuft die Landschaft des US-amerikanischen Automobilmarkts enorme Veränderungen und der Kampf unter der Motorhaube verschärft sich. Es wird davon ausgegangen, dass die Vereinigten Staaten vor 2019

So verwenden Sie ACL (Access Control List) zur Berechtigungskontrolle im Zend Framework So verwenden Sie ACL (Access Control List) zur Berechtigungskontrolle im Zend Framework Jul 29, 2023 am 09:24 AM

So verwenden Sie ACL (AccessControlList) zur Berechtigungskontrolle im Zend Framework. Einführung: In einer Webanwendung ist die Berechtigungskontrolle eine entscheidende Funktion. Es stellt sicher, dass Benutzer nur auf die Seiten und Funktionen zugreifen können, für die sie eine Zugriffsberechtigung haben, und verhindert unbefugten Zugriff. Das Zend-Framework bietet eine praktische Möglichkeit, die Berechtigungskontrolle mithilfe der ACL-Komponente (AccessControlList) zu implementieren. In diesem Artikel wird die Verwendung von ACL im Zend Framework vorgestellt

PHP-Implementierungs-Framework: Zend Framework-Erste-Schritte-Tutorial PHP-Implementierungs-Framework: Zend Framework-Erste-Schritte-Tutorial Jun 19, 2023 am 08:09 AM

PHP-Implementierungsframework: ZendFramework-Einführungs-Tutorial ZendFramework ist ein von PHP entwickeltes und derzeit von ZendTechnologies verwaltetes Open-Source-Website-Framework, das das MVC-Designmuster übernimmt und eine Reihe wiederverwendbarer Codebibliotheken zur Implementierung von Web2.0-Anwendungen und Web Serve bereitstellt. ZendFramework ist bei PHP-Entwicklern sehr beliebt und geschätzt und bietet eine große Auswahl an

Aktueller Test der NVIDIA AI-Game-Engine: Echtzeit-Chat mit NPC, Chinesisch ist fließend Aktueller Test der NVIDIA AI-Game-Engine: Echtzeit-Chat mit NPC, Chinesisch ist fließend Mar 04, 2024 am 09:40 AM

Der intelligente NPC, den Akademiker Huang in „Cyberpunk 2077“ erschaffen hat, kann bereits Chinesisch sprechen? Qubits Erfahrung aus erster Hand, Zeuge zu werden, wie sich NPCs fließend auf Chinesisch und Englisch unterhalten, mit natürlichen Ausdrücken und Bewegungen und passenden Mundformen ... Wenn es keinen Bildschirm vor mir gäbe, würde es sich wirklich so anfühlen, als wäre ich dort. Auf der diesjährigen CES nutzte Nvidia seine intelligente Engine Avatar Cloud Engine (ACE), um Spiel-NPCs „lebendig“ zu machen, was für einen ziemlichen Schock sorgte. △Der auf der CES gezeigte intelligente NPC verwendet ACE. Die Charaktere im Spiel können realistische Sprachgespräche mit Spielern führen und dabei lebendige Ausdrücke und Körperbewegungen zeigen, ohne dass im Voraus ein Skript vorbereitet werden muss. Zum Zeitpunkt des Debüts gab es Ubisoft, Tencent, NetEase, MiHoYo und andere Länder.

Super realistische Darstellung! Der Technologieexperte von Unreal Engine erklärt das globale Beleuchtungssystem Lumen Super realistische Darstellung! Der Technologieexperte von Unreal Engine erklärt das globale Beleuchtungssystem Lumen Apr 08, 2023 pm 10:21 PM

Globale Beleuchtung in Echtzeit (Echtzeit-GI) war schon immer der heilige Gral der Computergrafik. Im Laufe der Jahre hat die Industrie verschiedene Methoden zur Lösung dieses Problems vorgeschlagen. Zu den gängigen Methoden gehört die Einschränkung des Problembereichs durch die Verwendung bestimmter Annahmen, wie z. B. statische Geometrie, eine grobe Szenendarstellung oder die Verfolgung grober Sonden, und die Interpolation der Beleuchtung zwischen beiden. In der Unreal Engine wurde das globale Beleuchtungs- und Reflexionssystem Lumen Technology von Krzysztof Narkowicz und Daniel Wright mitbegründet. Das Ziel bestand darin, eine Lösung zu entwickeln, die sich von ihren Vorgängern unterschied und eine gleichmäßige Beleuchtung und eine backenähnliche Lichtqualität erreichen konnte. Kürzlich, bei SIGGRAPH 2022, Krzysztof Narko

Redmi G Pro 2024 Wir sehen uns am 4. März, mit Eiskühlung und Unterstützung für die PC-Version der heftigen Engine Redmi G Pro 2024 Wir sehen uns am 4. März, mit Eiskühlung und Unterstützung für die PC-Version der heftigen Engine Mar 02, 2024 pm 12:19 PM

Redmi gab heute offiziell bekannt, dass das neue Redmi GPro 2024 am 4. März offiziell veröffentlicht wird. Mit anderen Worten: Nächste Woche wird dieses aufregende neue Produkt auf den Markt kommen. RedmiGPro2024 gibt sein komplettes Debüt als E-Sport-Flaggschiff, indem es die Fähigkeiten der Mobiltelefonindustrie tief in das Notebook-Geschäft integriert, eine 210-W-Superleistungsversion vorstellt und die Redmi-Leistung einen neuen Höchststand erreicht. Ausgestattet mit einem i9-14900HX-Prozessor und einer RTX4060-Grafikkarte kombiniert es E-Sport und Kreation perfekt, um eine doppelte Evolution zu erreichen. Unter diesem Gesichtspunkt wird die Leistung dieses neuen Produkts noch einmal verbessert, und die tatsächliche Wirkung ist spannend. Im offiziellen Warm-up wurde erwähnt, dass das neue Redmi G Pro 2024 die PC-Version der heftigen Engine mitbringt. Drei Hauptfaktoren führen zur Stärkung der Mobiltelefontechnologie

PHP erkennt ZendOptimizer nicht, wie kann man das lösen? PHP erkennt ZendOptimizer nicht, wie kann man das lösen? Mar 19, 2024 pm 01:09 PM

PHP erkennt ZendOptimizer nicht, wie kann man das lösen? Bei der PHP-Entwicklung kann es manchmal vorkommen, dass PHP ZendOptimizer nicht erkennt, was dazu führt, dass einige PHP-Codes nicht ordnungsgemäß ausgeführt werden. In diesem Fall müssen wir einige Maßnahmen ergreifen, um das Problem zu lösen. Im Folgenden werden einige mögliche Problemumgehungen zusammen mit spezifischen Codebeispielen beschrieben. 1. Bestätigen Sie, ob ZendOptimizer korrekt installiert ist: Zuerst müssen wir bestätigen, dass ZendOptimizer

Lösen Sie Engine-Probleme, wenn SAS eine Verbindung zur Oracle-Datenbank herstellt Lösen Sie Engine-Probleme, wenn SAS eine Verbindung zur Oracle-Datenbank herstellt Mar 08, 2024 am 10:12 AM

Um Engine-Probleme zu lösen, wenn SAS eine Verbindung zur Oracle-Datenbank herstellt, sind spezifische Codebeispiele erforderlich. Bei der Verwendung von SAS-Software zur Datenanalyse ist es häufig erforderlich, eine Verbindung zur Datenbank herzustellen, um Daten zur Analyse und Verarbeitung zu erhalten. Unter diesen ist die Verbindung mit der Oracle-Datenbank ein relativ häufiger Vorgang. Beim Herstellen einer Verbindung mit der Oracle-Datenbank treten jedoch manchmal Engine-Probleme auf, die dazu führen, dass die Verbindung fehlschlägt oder nicht ordnungsgemäß funktioniert. In diesem Artikel wird erläutert, wie Engine-Probleme beim Herstellen einer Verbindung zur Oracle-Datenbank in der SAS-Software gelöst werden können, und es wird spezifischer Code bereitgestellt

See all articles