PHP 소스 코드 암호화를 구현하기 위해 Zend 엔진을 수정하는 원리와 실습
1. 기본 원칙
소스 파일을 읽기 위해 PHP 인터페이스를 가로채는 것을 고려해보세요. 처음에는 Apache와 PHP 사이의 인터페이스를 다루는 것을 고려했습니다. apache의 src/modules/php4/mod_php4.c(PHP가 정적으로 apache로 컴파일하여 설치하는 파일입니다.), send_php()에서 파일 포인터가 차단됩니다. 함수에서는 임시 파일 방식을 사용하며, 복호화 후 파일 포인터를 교체합니다. 이 방법은 테스트를 거쳐 실행 가능한 것으로 입증되었습니다. 그러나 두 개의 파일 작업을 사용해야 하므로 비효율적이며 DSO 방식을 사용할 수 없습니다. Shuangyuan Nursing Home
그래서 PHP가 파일을 읽는 것을 가로채서 캐시에 로드하는 과정을 다시 생각해 보았는데, 열심히 검색한 끝에 Zend 엔진의 zend-scanner.c가 이를 수행한다는 것을 발견했습니다. 이 파일 수정을 시작하세요. 조명 프로젝트
2. 구현 방법
libmcrypt를 암호화 모듈로 사용하고, 이제 DES 방식의 ECB 모드 암호화를 사용합니다.
다음은 파일 암호화 소스 코드입니다. :
C++ 코드
/* ecb.c------여기에서 잘라내기---------* /
/* PHP 소스 코드 버전 0.99 베타용 암호화
우리는 libmcrypt를 사용하여 코드를 암호화하고 있습니다.
먼저 이를 설치
컴파일 명령줄:
gcc -O6 -lmcrypt -lm -o encryptphp ecb.c
사용하기 전에 LD_LIBRARY_PATH를 설정하세요.
GNU copyleft, designs by wangsu , miweicong */
#define MCRYPT_BACKWARDS_COMPATIBLE 1
#define PHP_CACHESIZE 8192
#include
#include
#include
#include sys/types.h >
#include < sys/stat.h >
#include < fcntl.h >
main(int argc** argv)
{
char 파일 이름[255]
char 비밀번호[12]; >int readfd;
void *block_buffer;
int keysize;
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])
strcpy(filename,argv[3]) ;
printf("디코드 모드 시작 중...n");
} else {
printf("사용법: encryptphp [-d] 비밀번호 파일 이름"); >exit (1);
}
keysize=mcrypt_get_key_size(DES);
key=calloc(1, mcrypt_get_key_size(DES));
gen_key_sha1( 키 , NULL , 0, 키 크기, 비밀번호, strlen(비밀번호));
td=init_mcrypt_ecb(DES, 키, 키 크기);
if((readfd=open(filename,O_RDONLY,S_IRUSR|S_IWUSR| S_IRGRP) )==-1){
exit(3)
}
fstat(readfd,filestat);
printf("filesize는 %d n입니다.",inputfilesize); ;
inputfilesize=((int)(floor(inputfilesize/PHP_CACHESIZE)))+1)*PHP_CACHESIZE;
printf("치명적: 파일 buffer.n을 실행할 수 없습니다.");
exit(2)}
if((block_buffer=malloc(PHP_CACHESIZE))==NULL){
printf( "치명적: 블록 버퍼를 암호화할 수 없습니다.");
exit(2)
printf(".");
if(!decode){
if(realbufsizefor(i=realbufsize;i((char *)block_buffer)[i]=' ';
}
}
mcrypt_ecb (td, block_buffer, PHP_CACHESIZE)
mdecrypt_ecb( td, block_buffer , realbufsize)
}
memcpy(file_buffer+j*PHP_CACHESIZE,block_buffer,PHP_CACHESIZE);
j++;
close(readfd);
if((ifp=fopen(filename,"wb"))==NULL){
printf("치명적: 파일 액세스 오류.n")
exit(3);
fwrite( file_buffer, inputfilesize, 1, ifp);
free(block_buffer)
free(file_buffer)
fclose(ifp); 🎜>printf ("n");
/*--- ecb.c의 끝 ------------ --- ---------*/
ECB 모드는 블록 길이가 정해진 블록 암호화이기 때문에 여기에는 일부 null 문자가 채워집니다. 국제 전시회
그런 다음 PHP 코드에서 Zend/zend-scanner.c를 다음과 같이 수정합니다.
파일 앞에 추가:
#define MCRYPT_BACKWARDS_COMPATIBLE 1
#include < mcrypt.h >
그런 다음 3510행 주위에 YY_INPUT 정의를 주석 처리합니다.
그런 다음 5150행 주위에서 yy_get_next_buffer() 함수를 수정합니다.
함수 헤더에 정의를 추가합니다.
void *tempbuf;
char *key;
char debugstr[255]; >int td,keysize;
int x,y;
FILE *fp;
그런 다음 주석 처리하세요
YY_INPUT( (&yy_current_buffer- >yy_ch_buf[number_to_move]),
yy_n_chars, num_to_read );
이 문장입니다.
변경됨:
if((yy_n_chars=fread(tempbuf,1,num_to_read,yyin))!=0){
/*decode* /
#define 비밀번호 "PHPphp111222"
#define 디버그 0
key=calloc(1, mcrypt_get_key_size(DES))
gen_key_sha1( key, NULL, 0, keysize, strlen(password));
td=init_mcrypt_ecb(DES, key, keysize)
mdecrypt_ecb(td, tempbuf, yy_n_chars)
memcpy((&yy_current_buffer- >yy_ch_buf[number_to_move]),tempbuf,yy_n_chars);
if(debug){
fp=fopen("/tmp/logs","wb")
fwrite("nstartn",7 ,1,fp);
fwrite(tempbuf,1,yy_n_chars,fp)
fwrite("nenditn",7,1,fp)
fclose(fp); >}
free(tempbuf);
그런 다음 일반적인 방법에 따라 php를 컴파일하고 설치합니다. libtool에 익숙하지 않기 때문에 구성 시 --를 추가했습니다. -mcrypt이므로 Makefile 케이블 트레이를 수동으로 수정할 필요가 없습니다
더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











8일 뉴스에 따르면 미국 자동차 시장은 그동안 사랑받았던 6기통과 8기통 동력엔진이 점차 그 위세를 잃어가는 가운데 3기통 엔진이 등장하고 있다. 10월 8일자 뉴스에서는 미국 자동차 시장이 내부적으로 변화를 겪고 있다는 소식을 전했습니다. 과거에 사랑받았던 6기통과 8기통 동력엔진은 점차 그 지배력을 잃어가고 있으며, 대부분의 사람들의 마음 속에는 미국인들이 대용량 배기량 모델과 '미국의 대형 V8'을 좋아하기 시작하고 있습니다. 항상 미국 자동차와 동의어였습니다. 그러나 최근 외신이 공개한 자료에 따르면 미국 자동차 시장의 지형은 엄청난 변화를 겪고 있으며 내부 경쟁도 치열해지고 있다. 2019년 이전에는 미국이

'사이버펑크 2077'에서 황학자가 만든 지능형 NPC는 이미 중국어를 할 수 있다고요? 중국어와 영어로 유창하게 대화하는 NPC들의 자연스러운 표정과 움직임, 그리고 입 모양의 조화까지.. 눈앞에 스크린이 없었다면 정말 그곳에 있는 것 같은 느낌이 들었습니다. 올해 CES 전시회에서 엔비디아는 자사의 지능형 엔진인 아바타 클라우드 엔진(ACE)을 사용해 게임 NPC를 '살아있다'로 만들어 적잖은 충격을 안겼다. △CES에 전시된 지능형 NPC는 ACE를 사용한다. 게임 속 캐릭터는 미리 대본을 준비하지 않고도 생생한 표정과 신체 움직임을 보여주며 플레이어와 실감나는 음성 대화를 할 수 있다. 데뷔 당시 유비소프트, 텐센트, 넷이즈, 미호요 등이 있었다.

Zend Framework에서 권한 제어를 위해 ACL(AccessControlList)을 사용하는 방법 소개: 웹 애플리케이션에서 권한 제어는 중요한 기능입니다. 이는 사용자가 액세스 권한이 있는 페이지와 기능에만 액세스할 수 있도록 하고 무단 액세스를 방지합니다. Zend 프레임워크는 ACL(AccessControlList) 구성 요소를 사용하여 권한 제어를 구현하는 편리한 방법을 제공합니다. 이 기사에서는 Zend Framework에서 ACL을 사용하는 방법을 소개합니다.

PHP 구현 프레임워크: ZendFramework 입문 튜토리얼 ZendFramework는 PHP에서 개발하고 현재 ZendTechnologies에서 유지 관리하는 오픈 소스 웹 사이트 프레임워크입니다. ZendFramework는 MVC 디자인 패턴을 채택하고 Web2.0 애플리케이션 및 Web Serve 구현을 지원하기 위한 재사용 가능한 코드 라이브러리 시리즈를 제공합니다. ZendFramework는 PHP 개발자들에게 매우 인기 있고 존경받고 있으며 다양한 기능을 갖추고 있습니다.

실시간 전역 조명(Real-time GI)은 항상 컴퓨터 그래픽의 성배였습니다. 수년에 걸쳐 업계에서는 이 문제를 해결하기 위해 다양한 방법을 제안해 왔습니다. 일반적인 방법에는 정적 기하학, 대략적인 장면 표현 또는 대략적인 프로브 추적과 같은 특정 가정을 활용하고 둘 사이에 조명을 보간하여 문제 영역을 제한하는 것이 포함됩니다. 언리얼 엔진에서 전역 조명 및 반사 시스템인 Lumen 기술은 Krzysztof Narkowicz와 Daniel Wright가 공동 창립했습니다. 목표는 이전 제품과 달리 균일한 조명과 구워진 듯한 조명 품질이 가능한 솔루션을 구축하는 것이었습니다. 최근 SIGGRAPH 2022에서 Krzysztof Narko는

Redmi는 오늘 새로운 Redmi GPro 2024가 3월 4일에 공식 출시될 것이라고 공식 발표했습니다. 즉, 다음 주에 우리는 이 흥미로운 신제품을 출시하게 될 것입니다. RedmiGPro2024는 e-스포츠 플래그십으로 전면 데뷔하여 휴대폰 업계의 역량을 노트북 사업에 깊이 통합하고 210W 슈퍼 성능 출시를 선보이며 Redmi 성능이 새로운 최고치를 달성했습니다. i9-14900HX 프로세서와 RTX4060 그래픽 카드를 탑재해 e스포츠와 창작을 완벽하게 결합해 이중 진화를 이룬다. 이런 관점에서 볼 때 이번 신제품의 성능은 다시 한 번 향상될 것이며 실제 효과는 흥미롭다. 공식 워밍업에서 새로운 Redmi G Pro 2024가 강력한 엔진의 PC 버전을 제공한다고 언급되었습니다. 휴대폰 기술 강화, 세 가지 주요 요인이 주도

PHP가 ZendOptimizer를 인식하지 못합니다. 어떻게 해결합니까? PHP 개발 중에 PHP가 ZendOptimizer를 인식하지 못하는 상황이 발생할 수 있으며, 이로 인해 일부 PHP 코드가 제대로 실행되지 않을 수 있습니다. 이 경우 문제를 해결하기 위해 몇 가지 조치를 취해야 합니다. 아래에는 몇 가지 가능한 해결 방법과 특정 코드 예제가 설명되어 있습니다. 1. ZendOptimizer가 올바르게 설치되었는지 확인: 먼저 ZendOptimizer가 올바르게 설치되었는지 확인해야 합니다.

SAS가 Oracle 데이터베이스에 연결할 때 엔진 문제를 해결하려면 특정 코드 예제가 필요합니다. 데이터 분석을 위해 SAS 소프트웨어를 사용할 때 분석 및 처리를 위한 데이터를 얻기 위해 데이터베이스에 연결해야 하는 경우가 많습니다. 그중 Oracle 데이터베이스에 연결하는 것은 비교적 일반적인 작업입니다. 그러나 Oracle 데이터베이스에 연결할 때 엔진 문제가 발생하여 연결이 실패하거나 제대로 작동하지 않는 경우가 있습니다. 이 문서에서는 SAS 소프트웨어에서 Oracle 데이터베이스에 연결할 때 엔진 문제를 해결하는 방법을 소개하고 특정 코드를 제공합니다.
