<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-60  評論-35  文章-15  trackbacks-0
    解密ZEND加密后的PHP
    先下載http://pecl.php.net/get/vl...

    執行
    #tar -xzf vld-0.8.0.tgz //解壓
    #mv vld-0.8.0 vld //重命名
    #cd -R vld ../php-4.3.8/ext //拷貝vld目錄到php的解壓目錄下的ext中
    #cd php-4.3.8
    #rm configure //刪除configure,因為下面的buildconf會重新生成新的configure
    #./buildconf //如果出現錯誤,就按提示加上相應的參數.
    #./configure --with-mysql --with-apxs2=/usr/www/bin/apxs --enable-vld 重新檢查php
    #make 編譯
    #make install 安裝

    服務器必須先安裝ZendOptimizer
    運行Zend后的文件,查看源代碼就可以看到了.
    未測試
    下載地址 http://www.huanle.net/down...

    執行

    #tar -xzf vld-0.8.0.tgz //解壓
    #mv vld-0.8.0 vld //重命名
    #cd -R vld /php-4.3.8/ext //拷貝vld目錄到php的解壓目錄下的ext中
    #cd php-4.3.8
    #rm configure //刪除configure,因為下面的buildconf會重新生成新的configure
    #./buildconf //如果出現錯誤,就按提示加上相應的參數.
    #./configure --with-mysql --with-apxs2=/usr/www/bin/apxs --enable-vld 重新檢查php
    #make 編譯
    #make install 安裝


    服務器必須先安裝ZendOptimizer
    運行Zend后的文件,查看源代碼就可以看到了.


    方法二:
    只要你有linux主機,再裝一個程序,就能瀏覽源碼了.

    #ifdef HAVE_CONFIG_H
    #include "config.h"
    #endif

    #include "php.h"
    #include "php_ini.h"
    #include "ext/standard/info.h"
    #include "php_vld.h"
    #include "srm_oparray.h"

    static zend_op_array* (*old_compile_file)(zend_file_handle* file_handle, int type TSRMLS_DC);
    static zend_op_array* vld_compile_file(zend_file_handle*, int TSRMLS_DC);

    static void (*old_execute)(zend_op_array *op_array TSRMLS_DC);
    static void vld_execute(zend_op_array *op_array TSRMLS_DC);


    function_entry vld_functions[] = {
    {NULL, NULL, NULL}
    };


    zend_module_entry vld_module_entry = {
    #if ZEND_MODULE_API_NO >= 20010901
    STANDARD_MODULE_HEADER,
    #endif
    "vld",
    vld_functions,
    PHP_MINIT(vld),
    PHP_MSHUTDOWN(vld),
    PHP_RINIT(vld),
    PHP_RSHUTDOWN(vld),
    PHP_MINFO(vld),
    #if ZEND_MODULE_API_NO >= 20010901
    "0.8.0",
    #endif
    STANDARD_MODULE_PROPERTIES
    };


    #ifdef COMPILE_DL_VLD
    ZEND_GET_MODULE(vld)
    #endif

    ZEND_BEGIN_MODULE_GLOBALS(vld)
    int active;
    int skip_prepend;
    int skip_append;
    int execute;
    ZEND_END_MODULE_GLOBALS(vld)

    ZEND_DECLARE_MODULE_GLOBALS(vld)

    #ifdef ZTS
    #define VLD_G(v) TSRMG(vld_globals_id, zend_vld_globals *, v)
    #else
    #define VLD_G(v) (vld_globals.v)
    #endif

    PHP_INI_BEGIN()
    STD_PHP_INI_ENTRY("vld.active", "0", PHP_INI_SYSTEM, OnUpdateBool, active, zend_vld_globals, vld_globals)
    STD_PHP_INI_ENTRY("vld.skip_prepend", "0", PHP_INI_SYSTEM, OnUpdateBool, skip_prepend, zend_vld_globals, vld_globals)
    STD_PHP_INI_ENTRY("vld.skip_append", "0", PHP_INI_SYSTEM, OnUpdateBool, skip_append, zend_vld_globals, vld_globals)
    STD_PHP_INI_ENTRY("vld.execute", "1", PHP_INI_SYSTEM, OnUpdateBool, execute, zend_vld_globals, vld_globals)
    PHP_INI_END()

    static void vld_init_globals(zend_vld_globals *vld_globals)
    {
    vld_globals->active = 0;
    vld_globals->skip_prepend = 0;
    vld_globals->skip_append = 0;
    vld_globals->execute = 1;
    }


    PHP_MINIT_FUNCTION(vld)
    {
    ZEND_INIT_MODULE_GLOBALS(vld, vld_init_globals, NULL);
    REGISTER_INI_ENTRIES();
    old_compile_file = zend_compile_file;
    old_execute = zend_execute;

    return SUCCESS;
    }


    PHP_MSHUTDOWN_FUNCTION(vld)
    {
    UNREGISTER_INI_ENTRIES();

    zend_compile_file = old_compile_file;
    zend_execute = old_execute;

    return SUCCESS;
    }


    PHP_RINIT_FUNCTION(vld)
    {
    if (VLD_G(active)) {
    zend_compile_file = vld_compile_file;
    if (!VLD_G(execute)) {
    zend_execute = vld_execute;
    }
    }
    return SUCCESS;
    }


    PHP_RSHUTDOWN_FUNCTION(vld)
    {
    zend_compile_file = old_compile_file;
    zend_execute = old_execute;

    return SUCCESS;
    }


    PHP_MINFO_FUNCTION(vld)
    {
    php_info_print_table_start();
    php_info_print_table_header(2, "vld support", "enabled");
    php_info_print_table_end();

    }

    static int vld_check_fe (zend_op_array *fe, zend_bool *have_fe TSRMLS_DC)
    {
    if (fe->type == ZEND_USER_FUNCTION) {
    *have_fe = 1;
    }

    return 0;
    }

    static int vld_dump_fe (zend_op_array *fe TSRMLS_DC)
    {
    if (fe->type == ZEND_USER_FUNCTION) {
    fprintf(stderr, "Function %s:
    ", fe->function_name);
    vld_dump_oparray(fe);
    fprintf(stderr, "End of function %s.

    ", fe->function_name);
    }

    return ZEND_HASH_APPLY_KEEP;
    }

    #ifdef ZEND_ENGINE_2
    static int vld_dump_cle (zend_class_entry **class_entry TSRMLS_DC)
    #else
    static int vld_dump_cle (zend_class_entry *class_entry TSRMLS_DC)
    #endif
    {
    zend_class_entry *ce;
    zend_bool have_fe = 0;

    #ifdef ZEND_ENGINE_2
    ce = *class_entry;
    #else
    ce = class_entry;
    #endif

    if (ce->type != ZEND_INTERNAL_CLASS) {
    zend_hash_apply_with_argument(&ce->function_table, (apply_func_arg_t) vld_check_fe, (void *)&have_fe TSRMLS_CC);
    if (have_fe) {
    fprintf(stderr, "Class %s:
    ", ce->name);
    zend_hash_apply(&ce->function_table, (apply_func_t) vld_dump_fe TSRMLS_CC);
    fprintf(stderr, "End of class %s.

    ", ce->name);
    } else {
    fprintf(stderr, "Class %s: [no user functions]
    ", ce->name);
    }
    }

    return ZEND_HASH_APPLY_KEEP;
    }

    /* {{{ zend_op_array vld_compile_file (file_handle, type)
    * This function provides a hook for compilation */
    static zend_op_array *vld_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
    {
    zend_op_array *op_array;

    if (!VLD_G(execute) &&
    ((VLD_G(skip_prepend) && PG(auto_prepend_file) && PG(auto_prepend_file)[0] && PG(auto_prepend_file) == file_handle->filename)
    (VLD_G(skip_append) && PG(auto_append_file) && PG(auto_append_file)[0] && PG(auto_append_file) == file_handle->filename)))
    {
    zval nop;
    ZVAL_STRINGL(&nop, "RETURN ;", 8, 0);
    return compile_string(&nop, "NOP" TSRMLS_CC);;
    }

    op_array = old_compile_file (file_handle, type TSRMLS_CC);

    if (op_array) {
    vld_dump_oparray (op_array);
    }

    zend_hash_apply (CG(function_table), (apply_func_t) vld_dump_fe TSRMLS_CC);
    zend_hash_apply (CG(class_table), (apply_func_t) vld_dump_cle TSRMLS_CC);

    return op_array;
    }
    /* }}} */

    /* {{{ void vld_execute(zend_op_array *op_array TSRMLS_DC)
    * This function provides a hook for execution */
    static void vld_execute(zend_op_array *op_array TSRMLS_DC)
    {
    // nothing to do
    }
    /* }}} */
    posted on 2007-01-24 12:56 Q系列類、方法、變量…… 閱讀(2081) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲啪啪免费视频| 亚洲男人电影天堂| 亚洲国产日韩成人综合天堂| 四虎影视免费永久在线观看| 亚洲国产成人一区二区精品区 | 亚洲a无码综合a国产av中文| 全部在线播放免费毛片| 久久成人国产精品免费软件| 国产在线观看免费视频播放器| 久久亚洲国产欧洲精品一| 成人A片产无码免费视频在线观看| 2021精品国产品免费观看| 2048亚洲精品国产| 中文有码亚洲制服av片| 暖暖日本免费中文字幕| 浮力影院第一页小视频国产在线观看免费| 亚洲综合最新无码专区| 国产午夜成人免费看片无遮挡| 久久精品国产亚洲AV网站| 黄色免费网站在线看| 午夜网站免费版在线观看| 亚洲黄色高清视频| 久久久久久久久久久免费精品 | 亚洲AV无码一区二区三区国产| 亚洲成年人免费网站| 免费久久人人爽人人爽av| 久久久久久久亚洲Av无码| 精品国产福利尤物免费| 亚洲图片一区二区| 免费一级毛片无毒不卡| 怡红院亚洲怡红院首页| 精品国产亚洲AV麻豆| 亚洲熟妇无码八AV在线播放| 日韩在线观看免费完整版视频| 妞干网免费视频观看| 男女污污污超污视频免费在线看| 亚洲人成无码网站| 成人激情免费视频| 一本天堂ⅴ无码亚洲道久久| 成人免费一级毛片在线播放视频| 91在线精品亚洲一区二区|