easyswoole - 基于swoole扩展实现的一款高性能php框架

實(shí)現(xiàn)原理

  • 在拓展層實(shí)現(xiàn)代碼加密,生成新代碼
  • 在拓展層解密代碼
    • hook校驗(yàn)
    • opcode混淆
  • 在拓展層執(zhí)行解密后代碼

知識(shí)儲(chǔ)備

首先,對(duì)于一個(gè)php文件的執(zhí)行,我們需要知道其大概的步驟:

  • 基礎(chǔ)環(huán)境初始化
  • 調(diào)用zend_compile_file解析文件生成opcode
  • 調(diào)用zend_execute執(zhí)行生成的opcode

相關(guān)函數(shù)

static zend_op_array *(*zend_compile_string)(zval *source_string, char *filename TSRMLS_DC);
static zend_op_array *(*zend_compile_string)(zval *source_string, char *filename TSRMLS_DC);
static void zend_execute(zend_op_array *op_array,zval *return_value);

替換PHP默認(rèn)方法

PHP_MINIT_FUNCTION(decrypt_code)
{
    zend_compile_file = decrypt_compile_file;
    orig_compile_string = zend_compile_string;
    zend_compile_string = decrypt_compile_string;
    return SUCCESS;
}

PHP_MSHUTDOWN_FUNCTION(myShut)
{
    zend_compile_string = orig_compile_string;
    return SUCCESS;
}

我們?cè)趐hp加載拓展的時(shí)候,替換了php默認(rèn)的 zend_compile_fileorig_compile_string。當(dāng)然,在Easyswoole中實(shí)現(xiàn)的執(zhí)行代碼的方式, 不會(huì)被這兩個(gè)函數(shù)hook,這個(gè)兩個(gè)可以用來(lái)破解純php層的混淆加密。相關(guān)安全問(wèn)題在注意事項(xiàng)章節(jié)講解。

定義加密方法

PHP_FUNCTION(easy_compiler_encrypt) {
    unsigned char *raw_string;
    size_t *raw_string_len;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &raw_string, &raw_string_len) == FAILURE) {
        RETURN_NULL();
    }
    unsigned char *pkcs7 = (unsigned char *)malloc(sizeof(unsigned char*)*PKCS7_MAX_LEN);
    memcpy(pkcs7,raw_string,raw_string_len);
    size_t after_padding_len = PKCS7Padding(pkcs7,raw_string_len);

    struct AES_ctx ctx;
    AES_init_ctx_iv(&ctx, AES_KEY, AES_IV_KEY);
    AES_CBC_encrypt_buffer(&ctx,pkcs7,after_padding_len);
    zend_string *zend_encode_string = zend_string_init(pkcs7,after_padding_len,0);
    zend_string *base64;
    base64 = php_base64_encode((const unsigned char*)ZSTR_VAL(zend_encode_string),ZSTR_LEN(zend_encode_string));
    char *res = ZSTR_VAL(base64);
    zend_string_release(base64);
    zend_string_release(zend_encode_string);
    free(pkcs7);
    RETURN_STRING(res);
};

定義解密方法

PHP_FUNCTION(easy_compiler_decrypt) {
    unsigned char *base64;
    size_t *base64_len;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &base64, &base64_len) == FAILURE) {
        RETURN_NULL();
    }
    zend_string *encrypt_z_str;
    encrypt_z_str = php_base64_decode(base64,base64_len);
    size_t encrypt_len = NULL;
    encrypt_len = ZSTR_LEN(encrypt_z_str);
    unsigned char *pkcs7 = (unsigned char *)malloc(sizeof(unsigned char*)*PKCS7_MAX_LEN);
    memcpy(pkcs7,(const char*)ZSTR_VAL(encrypt_z_str),encrypt_len);
    struct AES_ctx ctx;
    AES_init_ctx_iv(&ctx, AES_KEY, AES_IV_KEY);
    AES_CBC_decrypt_buffer(&ctx,pkcs7,encrypt_len);
    encrypt_len = PKCS7Cutting(pkcs7,encrypt_len);
    zend_string *eval_string = zend_string_init(pkcs7,encrypt_len,0);
    zval z_str;
    ZVAL_STR(&z_str,eval_string);
    zend_op_array *new_op_array;
    char *filename = zend_get_executed_filename(TSRMLS_C);
    new_op_array =  easy_compiler_compile_string(&z_str, filename TSRMLS_C);
    if(new_op_array){
        zend_try {
            zend_execute(new_op_array,return_value);
        } zend_catch {

        } zend_end_try();
        destroy_op_array(new_op_array);
        efree(new_op_array);
    }
    zend_string_release(encrypt_z_str);
    zend_string_release(eval_string);
    zval_ptr_dtor(&z_str);
    free(pkcs7);
};

就是在這一步解析加密后的代碼,并執(zhí)行對(duì)應(yīng)的opcode

更多細(xì)節(jié)源碼

EasySwoole Compiler

主站蜘蛛池模板: 混凝土布料机,隧道布料机,衬砌台车布料装置 - 河北聚力智能装备有限公司 | 深山工作室提供网络投票系统|微信公众号投票|微信公众号小程序|抖音小程序|百度小程序|微信公众号开发|企业网站建设 | 萍乡市康裕新能源科技有限公司| 浙江创洁卫生消杀有限公司-浙江杀虫公司,温州消杀公司,温州灭鼠公司,灭蟑螂,灭蚊蝇,灭跳蚤,灭书虱,灭臭虫,灭螨虫,白蚁防治,房间消毒除味等专业服务 | 网站建设|外贸网站建设|做网站公司-济南超越互联-推荐 | 欧洲_西班牙进口_燃木真火壁炉集成服务商_燃木壁炉官方网站.hergom | 重庆风机_风阀_风口-重庆仁龙风机有限公司| 食用油灌装机-油类食用油灌装设备-液体灌装机_青州市惠联灌装机械 | 喷雾干燥机价格|小型喷雾干燥机|实验室喷雾干燥机厂家-那艾 | 新高度,萍乡市场调查研究公司,萍乡市场调研公司,萍乡第三方评估机构,萍乡神秘顾客暗访公司 | 湖南实验台-防静电工作台-实验设备厂家-长沙实验室设备有限公司-湖南贝塔实验室设备有限公司 | 喷涂机器人|自动喷涂生产线|自动喷涂设备|自动化生产线-深圳市荣德机器人科技有限公司 | 河南新飞飞鸿实业有限公司| 郑州华特仪器设备有限公司-dlsb低温冷却液循环泵-SHZ-DIII循环水真空泵 | 品牌T恤零售/批发厂商/供应商_男女式T恤生产/设计-圣达信T恤 | 天力普电力科技有限公司 | 徐州护栏,围栏,锌铁丝网围栏安全设施专家徐州铜山区威峰金属护栏厂 | 斜管填料_斜板填料_纤维球_果壳活性炭_立体网状填料_纤维球厂家-巩义市德科净水材料有限公司 | 化工招聘网 化工人才网|化工英才网-化工企业招聘首选网站 | 精细筛-振动筛-滚筒筛-摇摆筛-平面回转筛-筛分机械设备-新乡德科筛分机械公司 | 王者荣耀/和平精英扫码上号登录器_微信安卓苹果扫码上号登录软件 - 上号宝扫码登录器 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 妙手网-圆心大药房-广东圆心恒金堂医药连锁有限公司-放心的网上药店_妙手医生旗下正规网上买药平台 | 太原万通汽车学校[官网]-太原好的汽修培训学校,学新能源汽车技术,学汽修,学汽车检测与维修技术 | 视频制作_产品宣传片拍摄_二维动画制作公司-深圳火牛传媒 | 郑州建网站,郑州做网站,郑州网站建设,郑州网站制作,郑州高端定制网站,郑州APP开发 | 新密耐火材料厂家价格-河南郑州荣盛窑炉耐火材料有限公司 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 灭菌洗箱机_周转箱清洗机_隧道式洗箱机 - 环速科技有限公司 | 山东腾达源金属材料官网-耐磨板nm400,nm400耐磨钢板,nm500耐磨钢板切割,耐候板批发,高强板现货【价格】 | 混凝土修补-清水混凝土保护剂-仿清水混凝土-混凝土装修-混凝土色差处理-混凝土色差修复剂-德州唐荣建筑装饰工程有限公司 | 联想南京总代理-联想服务器|联想电脑笔记本代理商|联想工作站|dell服务器|HP服务器|南京IBM代理商|IBM V5000存储总包销-南京宇宽科技有限公司 | 网带输送机_皮带_滚筒_链板输送机_不锈钢输送链条生产厂家-宁津县鸿昶机械设备有限公司 | 河间市天一密封材料有限公司-回转窑密封设备,除尘过滤袋 | 郑州四棉纺织有限公司-现代化纺织企业 | 紫铜箔(带)导电胶带定做,定做紫铜箔(带)导电胶带厂家[价格]-艾飞敏铜箔 | 吸附式干燥机|零气耗压缩热干燥机|无锡气净法工业技术有限公司【官网】 | 徐州户外广告,标识标牌,展陈空间,精神堡垒-徐州雅努思文化发展有限公司 | 洒水车厂家、消防车、污水处理车厂家-程力专用汽车股份有限公司 洒水车|冷藏车|LED广告车|油罐车|道路救援车|垃圾车|程力专用汽车股份有限公司销售九分公司 | 加药装置-排油烟装置-工业滤水器-连云港灵动 | 深圳蓝枫印刷_画册印刷_彩页印刷_宣传册印刷_包装盒印刷_彩盒印刷厂_不干胶印刷厂 |