<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲综合无码一区二区| 亚洲性日韩精品一区二区三区| 亚洲va无码手机在线电影| 一级特级aaaa毛片免费观看| 亚洲日本韩国在线| 国产人成网在线播放VA免费| 亚洲中文字幕无码一区| 日韩精品无码免费专区午夜| 亚洲国产一区在线| 日本人的色道免费网站| 99999久久久久久亚洲| 天天摸天天碰成人免费视频| 国产99久久亚洲综合精品| 久久亚洲色一区二区三区| 免费无码又爽又刺激高潮软件| 亚洲精品视频在线| 欧美好看的免费电影在线观看| 亚洲精品123区在线观看| 国产一精品一aⅴ一免费| 在线免费观看h片| 亚洲日韩乱码中文无码蜜桃臀| 成年女人午夜毛片免费看| 丁香六月婷婷精品免费观看| 国产亚洲婷婷香蕉久久精品| 国产又大又粗又长免费视频| 亚洲男人的天堂网站| 久久国产成人亚洲精品影院| 最近中文字幕大全中文字幕免费| 中文字幕乱码亚洲无线三区 | 国产亚洲精品美女久久久| 免费观看黄色的网站| 国产AV日韩A∨亚洲AV电影| 亚洲第一AAAAA片| 天天摸天天操免费播放小视频| 国产三级在线免费观看| 亚洲人成电影网站| 三上悠亚亚洲一区高清| 久久久久久久免费视频| 三年片免费高清版 | 亚洲国产精品久久久久| 国产精品免费综合一区视频|