Zend エンジンを変更して PHP ソース コード暗号化を実装する原則と実践
1. 基本原則
PHP がソース ファイルを読み取るためのインターフェイスをインターセプトすることを検討します。最初は、Apache と PHP の間のインターフェイスを扱うことを考えました。Apache の src/modules/php4/mod_php4.c (これは、PHP が静的に Apache にコンパイルして install するファイルです) を参照し、send_php() でファイル ポインタがインターセプトされます。関数内では一時ファイルの方法を使用しており、復号化後にファイルポインタが置き換えられます。この方法はテストされ、実行可能であることが証明されています。ただし、2 つのファイル操作を使用する必要があるため、非効率的であり、DSO には使用できません。 Shuangyuan Nursing Home
そこで、PHP の読み取りファイルをインターセプトしてキャッシュにロードするプロセスを再検討したところ、zend-scanner.c が Zend エンジンでこれを実行していることがわかりました。このファイルの変更を開始します。照明プロジェクト
2. 実装方法
暗号化モジュールとして libmcrypt を使用し、現在 DES メソッド ECB モード暗号化を使用しています。
以下はファイル暗号化のソース コードです:
C++ コード
/* ecb.c-- - -----ここをカット----------*/
/* php ソース コード バージョン 0.99 ベータ版の暗号化
暗号化には libmcrypt を使用していますコードを
最初にインストールしてください
コマンドラインをコンパイルしてください:
gcc -O6 -lmcrypt -lm -o encryptphp ecb.c
GNU copyleft、wangsu 、 miweicong によって設計されました */
#define PHP_CACHESIZE >
#include < math.h > ; sys/types.h >
#include < fcntl.h >
main(int argc, char** argv) i ,j,inputfilesize,filelength;
charファイル名[12];
int readfd;
void *block_buffer;
int realbufsize=0;
struct stat *filestat;
if(argc == 3) {
strcpy(password,argv[1]); ;
} else if(argc == 4 && !strcmp(argv[1],"-d")){
strcpy(filename,argv[3]); = 1;
printf("デコードモードに入ります...n");
printf("使用法: encryptphp [-d] パスワードファイル名");
}
keysize= mcrypt_get_key_size (DES);
key=calloc(1, mcrypt_get_key_size(DES));
gen_key_sha1( key, NULL, 0, keysize, パスワード, strlen(password));
if((readfd=open(filename,O_RDONLY,S_IRUSR|S_IWUSR|S_IRGRP))==-1){
printf("致命的: ファイルを開けて読み取ることができません")
exit(3);
filestat=malloc(sizeof(stat));
fstat(readfd,filestat);
inputfilesize=filestat- >st_size;
filelength=inputfilesize; inputfilesize =((int)(floor(inputfilesize/PHP_CACHESIZE))+1)*PHP_CACHESIZE;
if((file_buffer=malloc(inputfilesize))==NULL){
printf("致命的: ファイル バッファーを malloc できません。 n ");
}
if((block_buffer=malloc(PHP_CACHESIZE))==NULL){
printf("致命的: 暗号化ブロックバッファ.n を malloc できません");
}
while(realbufsize=read (readfd,block_buffer, PHP_CACHESIZE)){
if(!decode){
if(realbufsize< PHP_CACHESIZE); ( i=realbufsize;i< PHP_CACHESIZE;i++){
((char *)block_buffer)[i]=' ';
}
mcrypt_ecb (td, block_buffer, PHP_CACHESIZE)} else {
mdecrypt_ecb (td, block_buffer , realbufsize);
memcpy(file_buffer+j*PHP_CACHESIZE,block_buffer,PHP_CACHESIZE);
}
close(readfd);
if((ifp=fopen(filename,"wb")); = NULL){
printf("致命的: ファイル アクセス エラー。n");
exit(3)
fwrite ( file_buffer, inputfilesize, 1, ifp); ;
free(filestat);
fclose(ifp);
return 0;
}
/*--- ecb.c の終わり- ------------------------*/
ECB モードはブロック長が決められたブロック暗号化であるため、ここにはいくつかの null 文字が埋められます。国際展示会
次に、php コード内の Zend/zend-scanner.c を次のように変更します:
(私の php バージョンは 4.01pl2、SUNsparc/solaris 2.7、gcc 2.95;)
ファイルの前に追加します:
#define MCRYPT_BACKWARDS_COMPATIBLE 1
#include < mcrypt.h >
次に、3510行目あたりのYY_INPUTの定義をコメントアウトします。
次に、 yy_get_next_buffer() 関数を 5150 行目あたりに変更します。
void *tempbuf;
char debugstr[255];
int x,y; という定義を追加します。 ;
FILE *fp;
次に、文
YY_INPUT((&yy_current_buffer->yy_ch_buf[number_to_move]),
yy_n_chars, num_to_read ); をコメントアウトします。
次のように変更します:
tempbuf=malloc(num_to_read);
if((yy_n_chars=fread(tempbuf,1,num_to_read,yyin))!=0){
/*decode*/
#デバッグ 0
keysize=mcrypt_get_key_size(DES);
key=calloc(1, mcrypt_get_key_size(DES));
gen_key_sha1( キー、NULL、0、キーサイズ、パスワード、strlen(パスワード)); 、キー、キーサイズ);
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);
次に、libtool に慣れていないため、静的メソッドを選択し、- を追加しました。 mcrypt を使用すると、Makefile ケーブル トレイを手動で変更する必要がなくなります
3. テストと結果
php と apache をコンパイルした後、ecb.c によってコンパイルされた encryptphp を使用して、1K 未満のいくつかのファイルを暗号化しました。 10K+ および 40K+ では、40K サイズのファイルを処理するときにエラーが発生しますが、その他のファイルは正常です。プラスチックの床

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 実装フレームワーク: ZendFramework 入門チュートリアル ZendFramework は、PHP によって開発されたオープン ソースの Web サイト フレームワークであり、現在 ZendTechnologies によって保守されています。ZendFramework は、MVC デザイン パターンを採用し、Web2.0 アプリケーションと Web サーブの実装に役立つ一連の再利用可能なコード ライブラリを提供します。 。 ZendFramework は PHP 開発者に非常に人気があり、尊敬されており、幅広い機能を備えています。

Zend Framework でのアクセス許可制御に ACL (AccessControlList) を使用する方法 はじめに: Web アプリケーションでは、アクセス許可制御は重要な機能です。これにより、ユーザーはアクセスを許可されたページと機能にのみアクセスできるようになり、不正アクセスが防止されます。 Zend フレームワークは、ACL (AccessControlList) コンポーネントを使用してアクセス許可制御を実装する便利な方法を提供します。この記事では、Zend Framework で ACL を使用する方法を紹介します。

Redmiは本日、新しいRedmi GPro 2024が3月4日に正式にリリースされることを正式に発表しました。つまり、来週にはこのエキサイティングな新製品がリリースされることになります。 RedmiGPro2024は、eスポーツのフラッグシップとして完全デビューし、携帯電話業界の能力をノートブックビジネスに深く統合し、210Wのスーパーパフォーマンスリリースを提示し、Redmiパフォーマンスが新たな最高値に達します。 i9-14900HX プロセッサーと RTX4060 グラフィックス カードを搭載し、e スポーツとクリエーションを完璧に組み合わせ、二重の進化を実現します。この観点から見ると、この新製品の性能は再び向上しており、実際の効果は興味深いものです。公式ウォームアップでは、新しいRedmi G Pro 2024には暴力的なエンジンのPCバージョンが搭載されていると述べられました。携帯電話技術の強化、3 つの主要な要因が牽引

『サイバーパンク2077』で黄学者が作った知性あるNPCはすでに中国語を話せる? Qubit を実際に体験して、NPC が中国語と英語で流暢に会話し、自然な表情と動き、口の形を一致させているのを目の当たりにする...目の前にスクリーンがなかったら、本当にその場にいるような気分になるでしょう。今年の CES 展示会で、Nvidia はインテリジェント エンジン Avatar Cloud Engine (ACE) を使用してゲームの NPC を「生きた」ものにし、大きな衝撃を与えました。 △CESに展示されるインテリジェントなNPCにはACEが採用されており、事前にスクリプトを用意することなく、ゲーム内のキャラクターが生き生きとした表情や体の動きを見せながら、プレイヤーとリアルな音声会話を行うことができます。デビュー当時はUbisoft、Tencent、NetEase、MiHoYoなどが存在しました。

リアルタイム グローバル イルミネーション (リアルタイム GI) は、常にコンピュータ グラフィックスの聖杯でした。長年にわたり、業界はこの問題を解決するためにさまざまな方法を提案してきました。一般的な方法には、静的ジオメトリ、大まかなシーン表現、または大まかなプローブの追跡などの特定の仮定を利用して問題領域を制約すること、および 2 つの間の照明を補間することが含まれます。 Unreal Engine のグローバル イルミネーションおよび反射システム Lumen テクノロジーは、Krzysztof Narkowicz と Daniel Wright によって共同設立されました。目標は、均一な照明と焼き付けたような照明品質を実現できる、以前のものとは異なるソリューションを構築することでした。最近、SIGGRAPH 2022 でクシシュトフ・ナルコ氏が

10月8日のニュースによると、米国の自動車市場は水面下で変化を遂げており、これまで親しまれてきた6気筒や8気筒エンジンが徐々にその優位性を失い、3気筒エンジンが台頭しつつあるという。 10月8日のニュースは、米国の自動車市場が水面下で変化を遂げていることを示した。かつて愛された6気筒や8気筒エンジンは徐々にその優位性を失い、3気筒エンジンが台頭し始めているが、アメリカ人の多くの心の中には大排気量モデルが大好きで「アメリカンビッグV8」というイメージがある。常にアメリカ車の代名詞であり続けています。しかし、最近海外メディアが発表したデータによると、米国の自動車市場の状況は大きく変化しており、水面下での争いは激化している。 2019 年以前は、米国が

インターネット技術の継続的な発展に伴い、Web テンプレート エンジンは Web サイト開発に不可欠な部分になりました。 PHP Web ページ テンプレート エンジンは、一般的に使用される Web ページ テンプレート エンジンの 1 つです。この記事では、PHP Web テンプレート エンジンの使用方法とよくある質問への回答を紹介します。 1. PHP Web テンプレート エンジンとは何ですか? PHP Web テンプレート エンジンは、Web デザインをビジネス ロジックから分離するテクノロジーです。テンプレート エンジンを使用すると、Web ページの表示と論理処理を分離できるため、コードがクリーンで明確になり、保守が容易になります。 PHP Webテンプレートエンジンとオリジナル

SAS が Oracle データベースに接続するときにエンジンの問題を解決するには、特定のコード例が必要です。SAS ソフトウェアをデータ分析に使用する場合、多くの場合、分析と処理のためのデータを取得するためにデータベースに接続する必要があります。その中でも、Oracle データベースへの接続は比較的一般的な操作です。ただし、Oracle データベースに接続するときにエンジンの問題が発生し、接続が失敗したり、正常に動作しなくなる場合があります。この記事では、SAS ソフトウェアで Oracle データベースに接続する際のエンジンの問題を解決する方法と、具体的なコードを紹介します。
