


Das Prinzip und die Praxis der Modifizierung der Zend-Engine zur Implementierung der PHP-Quellcode-Verschlüsselung
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 *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);
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){
exit(2);
}
printf( „FATAL: kann den Blockpuffer nicht verschlüsseln“); ,block_buffer, PHP_CACHESIZE)){
printf(".");
if(!decode){
if(realbufsize< PHP_CACHESIZE){
((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);
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;
}
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"
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);
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)!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



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 (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-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

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.

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 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? 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

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
