A盾WEBSHELLDetectorBasedOnPH7郑瀚

1.技术方案2.识别PHPTAG代码区域3.MD5HASH匹配4.一句话WEBSHELL匹配5.字符串+正则规则匹配6.SSDEEP模糊化HASH匹配大马7.PH7(AnEmbeddedImplementationofPHP(CLibrary))8.基于危险函数Hook的恶意污点数据追踪:WEBSHELL检测9.待解决的问题

1.技术方案

1.抽取出PHPtag区域1)HTML文件中插入PHP代码2)JPG、PNG中插入PHP代码2.MD5恶意HASH库匹配3.如果sizeof(File)<80bytesthen直接进行一句话WEBSHELL正则匹配4.采取字符串+正则规则对文件进行强特征匹配(只抽取强特征)5.为了保证SSDEEP的检测效果,只有当待检测文件大于1024byte,则进行SSDEEP模糊化HASH匹配大马:检测相似度是否>判定阈值6.基于PH7(一个嵌入式PHP编译、执行引擎),在敏感函数、流程中Hook,检测是否包含外部传入的参数7.对$_SERVER、$_POST等超全局变量进行污点打标,在例如eval函数中,如果检测到当前传入的参数存在污点标记,则认定敏感函数执行了外部传入的参数,当前为一条危险路径//其中每一步都是在此前的所有步骤都检测失败(即判定为白)的前提下,才继续接下来的检测

2.识别PHPTAG代码区域

0x1:需要处理的情况

1.一个文件中包含有多个对2.一个文件中包含有多个对,同时最后一个tag是无">"结尾的3.HTML混编PHP4.无">"结尾5.PHPTAG包含在图片文件中6.整个文件中无任何PHPTAG0x2:CodeExample

voidextraPhpTag(string&phpTagBuf,string&inFileBuf,stringfeaturestr_start=""){stringparastr;//findthelocationsize_tloc_start=inFileBuf.find(featurestr_start);//ifnotfoundstarttag,thenit'snotavalidphpfileif(loc_start!=std::string::npos){size_tloc_end=inFileBuf.find(featurestr_end);//1.ifnotfoundphpclosetag,thensubstrtotheend(it'sok)if(loc_end==std::string::npos){parastr=inFileBuf.substr(loc_start,string::npos);}//2.substrfromstarttoend(it'saregularphpfile)else{parastr=inFileBuf.substr(loc_start,(loc_end-loc_start+featurestr_end.length()));}}else{//donothingparastr="";}phpTagBuf.append(parastr);return;}

3.MD5HASH匹配

和传统的AV杀毒一样,使用MD5HASH精确匹配会面临免杀、绕过的风险,但是在大规模集群环境下,基于大数据得出的AVHASH库就会发挥出相对较好的效果

0x1:可持续化运维方式

1.将Agent、Server的MD5恶意HASH库单独抽离出来2.人工确认是WEBSHELL后,通过自动化方式自动同步到Agent本地、Server上的MD5HASH库(文件)中

4.一句话WEBSHELL匹配

在实际的入侵攻防中我们会发现,由于批量工具以及攻击payload常常呈现变形程度梯度上升的趋势,简单形式的一句话占比较高,即

因此,我们可以在检测流程中,增加对一句话小文件的快速匹配,即

1.ifcount(file)<80bytes2.thenpattern:(eval|execute|assert)[^>]*(request|post|get|cookie|\\$_)//对小文件直接进行一句话正则匹配0x1:CodeExample

//simpleonesentencewebshell(like:eval($_POST['op']))intphpTagBufLength=phpTagBufMd5.length();//regularexpressionstd::regexpattern("(eval|execute|assert)[^>]*(request|post|get|cookie|\\$_)");//sameasstd::match_resultssmathArray;std::smatchsmathArray;if(phpTagBufLength<=80){std::regex_search(phpTagBuf,smathArray,pattern);if(smathArray.size()>0){setCheckMessage("thisisonesentencewebshell,thematcheswere:");for(unsignedi=0;i

5.字符串+正则规则匹配

0x1:Rule

//webshellcharacteristicsrulecheckintEvilWebshellRuleSize=(sizeof(EvilWebshellRule)/sizeof(EvilWebshellRule[0]));for(inti=0;i

6.SSDEEP模糊化HASH匹配大马

对于大马来说,使用特征字符串、ssdeep模糊化hash进行聚类分析,能得到较好的效果,并同时得到当前待检测样本的恶意webshell家族分类

0x1:匹配方案

1.对已知的大马样本进行SSDEEP预处理计算,得到不同分类的SSDEEPHASH,作为"黑库"2.将不同的SSDEEPHASH进行"病毒家族库"分类,分别标记为不同大马3.在进行模糊化Hash匹配前对文件大小进行判断,只有当文件字节数>4096字节时,才进行SSDEEP检测,这么做的目的是为了让一句话变形小马尽可能在词法分析环节被检测,而让大马尽可能在SSDEEP环节被检测4.将待检测样本和SSDEEPHASH黑库进行"逐一"SSDEEP计算,得到样本也黑库的"置信度数组"5.从置信度数组中挑选出置信度>85,且得分最高的聚类点,则对应聚类点的标签就是当前检测样本的"病毒种类"0x2:CodeExample

#include"fuzzy.h"..staticstd::mapEvilSsdeepHash;voidssdeepInitial(){EvilSsdeepHash.insert(std::pair("Eval_Post","3:7uiceNnx5Dn:ipsnx5Dn"));}..//ssdeephashcheck//1.ssdeepinitssdeepInitial();//2.getphpTagBuf'sssdeephashchar*phpTagBufHash=(char*)malloc(FUZZY_MAX_RESULT);fuzzy_hash_buf((unsignedchar*)phpTagBuf.c_str(),phpTagBuf.length(),phpTagBufHash);//3.hashcompareintresultScoreLast=0;intresultScoreThis=0;stringssdeepBlackListHashName;for(std::map::iteratorssdeepBlackListHashItem=EvilSsdeepHash.begin();ssdeepBlackListHashItem!=EvilSsdeepHash.end();ssdeepBlackListHashItem++){resultScoreThis=fuzzy_compare(phpTagBufHash,ssdeepBlackListHashItem->second.c_str());if(resultScoreThis>85&&resultScoreThis>=resultScoreLast){resultScoreLast=resultScoreThis;ssdeepBlackListHashName=ssdeepBlackListHashItem->first;}}std::wcout<<"ssdeepBlackListHashName:"<

7.PH7(AnEmbeddedImplementationofPHP(CLibrary))

PH7isain-processsoftwareClibrarywhichimplementsahighly-efficientembeddablebytecodecompilerandavirtualmachineforthePHPprogramminglanguage.Inotherwords,PH7isaPHPenginewhichallowthehostapplicationtocompileandexecutePHPscriptsin-processPH7是一个进程中的开发包(SDK),实现了高效的嵌入式的字节码编译器和一个PHP编程语言的虚拟机。换一种说法:PH7是一个轻量级的PHP引擎,可让你的C/C++应用程序直接编译并执行PHP脚本,需要注意的是,PH7并不是一个词法/语法优化器,它并不能对脚本文件进行预处理(拼接、参数传递回溯、函数调研回溯),而是直接进行了编译中间代码,并模拟动态执行PH7implementsmostoftheconstructsintroducedbythePHP5.3releasesuchasheredoc,nowdoc,gotos,classes,anonymousfunctions,closuresandsoonandintroducesverypowerfulextensionstothePHPprogramminglanguagesuchas:

0x1:TestExampleCode:HowToUsePH7

0x4:dynamicexecutepreparerc=PH7_VmMakeReady(pVm);

ph7_vm_exec(pVm,0)

/**[CAPIREF:ph7_vm_exec()]*Pleaserefertotheofficialdocumentationforfunctionpurposeandexpectedparameters.*/intph7_vm_exec(ph7_vm*pVm,int*pExitStatus){intrc;/*Ticket1433-002:NULLVMisharmlessoperation*/if(PH7_VM_MISUSE(pVm)){returnPH7_CORRUPT;}#ifdefined(PH7_ENABLE_THREADS)/*AcquireVMmutex*/SyMutexEnter(sMPGlobal.pMutexMethods,pVm->pMutex);/*NO-OPifsMPGlobal.nThreadingLevel!=PH7_THREAD_LEVEL_MULTI*/if(sMPGlobal.nThreadingLevel>PH7_THREAD_LEVEL_SINGLE&&PH7_THRD_VM_RELEASE(pVm)){returnPH7_ABORT;/*Anotherthreadhavereleasedthisinstance*/}#endif/*ExecutePH7byte-code*/rc=PH7_VmByteCodeExec(&(*pVm));if(pExitStatus){/*Exitstatus*/*pExitStatus=pVm->iExitStatus;}#ifdefined(PH7_ENABLE_THREADS)/*LeaveVMmutex*/SyMutexLeave(sMPGlobal.pMutexMethods,pVm->pMutex);/*NO-OPifsMPGlobal.nThreadingLevel!=PH7_THREAD_LEVEL_MULTI*/#endif/*Executionresult*/returnrc;}rc=PH7_VmByteCodeExec(&(*pVm));

/**ExecuteasmuchofaPH7bytecodeprogramaswecanthenreturn.*Thisfunctionisawrapperaround[VmByteCodeExec()].*Seeblock-commentonthatfunctionforadditionalinformation.*/PH7_PRIVATEsxi32PH7_VmByteCodeExec(ph7_vm*pVm){/*Makesurewearereadytoexecutethisprogram*/if(pVm->nMagic!=PH7_VM_RUN){returnpVm->nMagic==PH7_VM_EXECSXERR_LOCKED/*LockedVM*/:SXERR_CORRUPT;/*StaleVM*/}/*Settheexecutionmagicnumber*/pVm->nMagic=PH7_VM_EXEC;/*Executetheprogram*/VmByteCodeExec(&(*pVm),(VmInstr*)SySetBasePtr(pVm->pByteContainer),pVm->aOps,-1,&pVm->sExec,0,FALSE);/*Invokeanyshutdowncallbacks*/VmInvokeShutdownCallbacks(&(*pVm));/**TICKET1433-100:DonotremovethePH7_VM_EXECmagicnumber*sothatanyfollowingcallto[ph7_vm_exec()]withoutcalling*[ph7_vm_reset()]firstwouldfail.*/returnSXRET_OK;}VmByteCodeExec(&(*pVm),(VmInstr*)SySetBasePtr(pVm->pByteContainer),pVm->aOps,-1,&pVm->sExec,0,FALSE);PHPOpcode是一种类似于汇编的中间语言,每个语句块都由多个"状态"成员组成(汇编特征),PH7根据这些状态进行相应的"跳转",即动态执行opcode

/**ExecuteasmuchofaPH7bytecodeprogramaswecanthenreturn.**[PH7_VmMakeReady()]mustbecalledbeforethisroutineinorderto*closetheprogramwithafinalOP_DONEandtosetupthedefault*consumerroutinesandotherstuff.Refertotheimplementation*of[PH7_VmMakeReady()]foradditionalinformation.*IftheinstalledVMoutputconsumercallbackeverreturnsPH7_ABORT*thentheprogramexecutionishalted.*Afterthisroutinehasfinished,[PH7_VmRelease()]or[PH7_VmReset()]*shouldbeusedrespectivelytocleanupthemessthatwasleftbehind*ortoresettheVMtoit'sinitialstate.*/staticsxi32VmByteCodeExec(ph7_vm*pVm,/*TargetVM*/VmInstr*aInstr,/*PH7bytecodeprogram*/ph7_value*pStack,/*Operandstack*/intnTos,/*Topentryintheoperandstack(usually-1)*/ph7_value*pResult,/*Storeprogramreturnvaluehere.NULLotherwise*/sxu32*pLastRef,/*Lastreferencedph7_valueindex*/intis_callback/*TRUEifweareexecutingacallback*/){RelevantLink:

8.基于危险函数Hook的恶意污点数据追踪:WEBSHELL检测

1.vm_builtin_eval()API函数中,传入了外部参数($_POST、$_GET..等超全局变量)2."assert","system","exec","passthru","shell_exec","proc_open"这些危险内建函数,传入了外部参数($_POST、$_GET..等超全局变量)3.通过create_function()创建,然后通过call_user_func这类回调(callback)调用的函数中,传入了外部参数($_POST、$_GET..等超全局变量)4.preg_replace/e函数调用,传入了传入了外部参数($_POST、$_GET..等超全局变量)或恶意payload需要注意的是,PHP、Zend和PH7对大小写敏感问题的处理存在差异

0x1:Hook方案

PH7_PRIVATEsxi32PH7_HashmapCreateSuper(ph7_vm*pVm)这里负责创建$_POST、$_GET等全局变量并插入到$_GLOBAL超全局数组中,我们需要在初始化的同时,往$_POST、$_GET等全局变量中插入魔法键值

0x3:数组元素取值污点(伪造数据)标记

0x4:eval函数污点分析

从webshell变形执行的本质来看,instructionseval($_Payload)是它的本质形态,在大多数情况下,webshell都需要从外部变量($_POST、$_GET..)中获取指定的键值,即获取Payload或,通过指令管道得以执行,不管eval中的payload经过了怎样的变形,在vm_builtin_eval函数中看到的永远都是最后的原始形态,这也是动态沙箱检测相比于静态特征检测最大的优势基于这种理论,我们对vm_builtin_eval敏感函数进行参数检测,如果在其中找到了魔法数键值,说明当前变量是外部传入的变量,则判定为恶意行为

0x5:需要解决的变形场景

除了最基本的在eval函数中进行污点标记分析,PHP中还有例如动态执行、preg_replace/e、callback等方式可以作为WEBSHELL构造方式执行代码,接下来逐case分析

1.已识别

1.assert:boolassert(mixed$assertion[,string$description])2.system:stringsystem(string$command[,int&$return_var])3.exec:stringexec(string$command[,array&$output[,int&$return_var]])4.passthru:voidpassthru(string$command[,int&$return_var])5.shell_exec:stringshell_exec(string$cmd)6.proc_open:resourceproc_open(string$cmd,array$descriptorspec,array&$pipes[,string$cwd[,array$env[,array$other_options]]])7.popen:resourcepopen(string$command,string$mode)1.assert

assert是一个断言函数,它同时具有代码执行的能力,对于assert这个函数,我们要分情况讨论

1.assert("eval($_POST[1])");assert里面直接进行eval,在PH7内核中,最终还是要调用到vm_builtin_eval,我们依然可以在vm_builtin_eval中进行污点分析2.assert("$_GET[op]");assert里面运行外部传入的参数,这种情况下,PH7在进行compile的时候,已经完成了$_GET['op']的取值过程,即assert最终获取到的参数字符串依然还会是污点打标字符串,我们同样可以进行污点分析3.assert("普通命令payload")这种情况我们判定为程序正常的行为,或者判定为非恶意的WEBSHELL,予以放行code

/**boolassert(mixed$assertion)*ChecksifassertionisFALSE.*Parameter*$assertion*Theassertiontotest.*Return*FALSEiftheassertionisfalse,TRUEotherwise.*/staticintvm_builtin_assert(ph7_context*pCtx,intnArg,ph7_value**apArg){ph7_vm*pVm=pCtx->pVm;ph7_value*pAssert;intiFlags,iResult;if(nArg<1){/*Missingarguments,returnFALSE*/ph7_result_bool(pCtx,0);returnPH7_OK;}iFlags=pVm->iAssertFlags;if(iFlags&PH7_ASSERT_DISABLE){/*Assertionisdisabled,returnFALSE*/ph7_result_bool(pCtx,0);returnPH7_OK;}pAssert=apArg[0];if(ph7_value_is_string(pAssert)){if(strncmp((char*)pAssert->sBlob.pBlob,shelldet_globals_VALUE,pAssert->sBlob.nByte)==0){std::wcout<<"webshelldetected!"<

这些命令执行函数的利用只有两种方式

1.运行外部传入的参数,这种情况下,PH7在进行compile的时候,已经完成了$_GET['op']、$_POST['op']的取值过程,即命令执行函数最终获取到的参数字符串依然还会是污点打标字符串,我们同样可以进行污点分析3.运行"普通命令payload这种情况我们判定为程序正常的行为,或者判定为非恶意的WEBSHELL,予以放行0x6:动态函数执行污点分析

PHP的动态函数执行属于极其非常规的编码方式,一旦出现,则可以认为是高危WEBSHELL行为,在WEBSHELL变形中,动态函数执行有以下几种

1.执行函数和参数都从外部传入2.执行函数预定义,参数从外部传入:最终还是会调用到assert的hook逻辑里面,针对assert的污点检测依然有效对于第一种情况,我们需要在PH7的"函数执行"流程中进行Hook,在"casePH7_OP_CALL"中,用于动态执行的函数已经被PH7翻译为了最终的函数名字符串,如果是通过外部参数传入的,则此时就是被污点打标的字符串

//dirtyflagcheckvoidshelldet_check(ph7_value*pAssert){if(ph7_value_is_string(pAssert)){if(strncmp((char*)pAssert->sBlob.pBlob,shelldet_globals_VALUE,pAssert->sBlob.nByte)==0){std::wcout<<"webshelldetected!"<iP1];SyHashEntry*pEntry;SyStringsName;//shelldetdirtyflagcheckshelldet_check(pTos);..0x7:require、require_once、include、include_once文件流引入污点分析(LFI)

WEBSHELL的一种变形方式是使用外部输入文件流作为Payload的输入,即俗称的LFI漏洞,当include的参数来自外部参数,则判定为恶意,需要Hook的点包括

1.require2.require_once3.include4.include_oncecode

0x8:系统输出缓存污点分析

ob_start()会把自己接收到的字符串当作一个"回调函数callback_func",并将接下来的缓冲区输入,当作这个"回调函数"的参数对于ob_start()、ob_end_flush()的污点分析,需要分几种情况讨论

0x9:通过eval注册的匿名动态函数污点分析

这种情况比较特殊,见下面的例子

整个执行流程大致如下

1.eval执行,注册了:'functionlambda_n(){eval($_POST[1]);}'这个函数2.lambda_n()匿名函数执行,执行lambda_n()内部的逻辑eval($_POST[1]);3.eval($_POST[1]);开始执行在这个过程中,lambda匿名函数通过eval注册的过程中,如果传入的函数逻辑是:eval($_POST[1]);,PH7会对$_POST进行污点标记,从而使WEBSHELL暴露出污点特征

//dirtyflagcheckvoidshelldet_check(ph7_value*pAssert){if(ph7_value_is_string(pAssert)){std::stringsAssert=(char*)pAssert->sBlob.pBlob;sAssert=sAssert.substr(0,pAssert->sBlob.nByte);//if(strncmp((char*)pAssert->sBlob.pBlob,shelldet_globals_VALUE,pAssert->sBlob.nByte)==0)if(sAssert.find(shelldet_globals_VALUE)!=std::string::npos){std::wcout<<"webshelldetected!"<

0x11:PHP的本地变量注册函数污点检测

PHP支持将字符串(可以是外部传入参数)解析成多个变量,这让WEBSHELL有能力将外部传入的参数转化为本地命名空间中的变量,常见的实现这一目的的方式有

1.parse_str2.extract3.foreach(..){$$key=$value;}1.parse_str:PH7不支持此语法

需要注意的是,extract传入的是一整个数组(而不是某个具体的键值),对应于vm_builtin_extract中传入的是一整个hashmap,这样,我们针对键值的污点打标,在vm_builtin_extract中就无法直接看到,而是要等到对hashmap解析完毕后才能看到特征,由于受到解析流程的影响,用于打标的污点字符串受到了裁剪

0x12:逻辑型WEBSHELL污点分析

沙箱的本质是按照待检测样本的逻辑,模拟Zend进行模拟执行,WEBSHELL为了规避沙箱的检测、并且隐藏自己不被管理员正常访问到,会对恶意WEBSHELL代码进行逻辑化处理(If条件判断)

对于逻辑型后门来说,判断进入哪个流支的控制开关(变量)常常是外部传入的参数,这样黑客才能通过传参控制是否进入WEBSHELL的流支,我们可以通过检测在if、while的条件表达式中,是否检测到污点标记(来自外部参数),以此来判断是否要进入流支的依据

1.对PH7_CompileIf进行Hook2.如果在当前if语句的expression中发现被比较的变量存在污点标记(外部传入参数),则强制当前控制流进入该if流支0x13:PHP自定义函数call_user_func回调污点分析

0x14:VFS、网络、数据库等危险API进行stub处理为了防止模拟执行中,PH7执行了危险函数,对本机造成了实际影响(例如写文件、发起数据库连接),需要对PH7中这些敏感函数进行stub处理,当执行到这些危险函数的时候,直接忽略跳过

1.文件操作:PH7支持2.网络操作:PH7不支持3.数据库DB操作:PH7不支持1.文件操作

高危操作重放风险

1)rmdir2)mkdir3)rename4)unlink5)delete6)chmod7)chown8)chgrp9)setenv10)putenv11)touch12)link13)symlink14)umask15)ftruncate16)file_put_contents17)copy18)fwrite19)fputs20)fputcsv21)fprintf22)vfprintf0x15:客户端沙箱性能控制

可能引起沙箱性能问题的API

1.sleep2.while3.dowhile4.for5.usleep如果黑客故意构造如下代码,可能会导致沙箱hang住,从而让其他的webshell都过沙箱检测

为此,需要对sleep进行stub处理,同时检测for循环的次数,当超过一定阈值的时候,强制跳出循环

9.待解决的问题

0x1:ob_start误报

在实际的业务场景中,ob_start、ob_end_clean被用来做HTML页面缓存,所以会造成误报

Run($module,$action);$out=ob_get_contents();$feifa=array('');ob_end_clean();echo$out;unset($out);unset($ForeApps);>0x2:incldue误报

从攻防角度来看,include$GPC变量可以导致LFIWEBSHELL

$cal_data){echo'var'.$cal_key."=\"".$cal_data."\";\r\n";}>解决方案是对include的参数进行"全等匹配"(即不能有其他字符串),即只有:include$_POST['op'];这种形式才可以认定为WEBSHELL

0x3:外部GPC不可控参数污点误打标

VM沙箱检测的思想是对$_SERVER、$_POST、$_GET、$_REQUEST这些GPC的全部参数进行污点打标,然后在关键执行流进行Hook,检测是否发现污点标记,但是实际上,PHP中有一些GPC参数是外部不可控的,在进行污点打标的时候应该过滤掉这些参数

include$_SERVER['DOCUMENT_ROOT']RelevantLink:

在wordpress中普遍存在这种反序列化的代码案例,wordpress常常将用户配置信息序列化后保存在Cookie中,再通过客户端表单回传回来,所以如果直接通过检测unserialize调用参数中是否存在污点标记会导致大量误报,解决方案可能可以采取"多条正则匹配"技术,即对同一条规则设置多条正则,必须同时满足所有正则后方可认为命中此规则

0x5:对运算符支持不全导致漏报

这个webshell同时使用了~和^运算符,但是ph7不支持^运算符的解析,导致检测失败

0x6:extractHook导致误报

extract()常常在CMS中被用来进行外部参数自动化注册,但是也常常被WEBSHELL用俩进行参数隐藏,即将实际产生攻击的指令和payload都通过外部参数传入并通过extract本地注册,因此extract只是这种webshell触发攻击的一个必要不充分条件

0x7:借助编码、加密函数隐藏的大马SHELL

对于一句话变形来说,不管攻击者使用了何种变形隐藏方式,最终代码执行流都会到达VMHook点,但是WEBSHELL对抗还有另一个问题就是大马,这类WEBSHELL并不会调用到一句话木马常用的函数,所以也不会被沙箱检测到

1.通过PHP沙箱在关键的变形函数中加入内容检测逻辑,因为根据函数调用原理,不管使用了何种变形、加密,在函数Hook中看到的传入参数已经是解密后的明文了1)preg_replace2)gzinflate3)base64_decode4)rot132.针对解密后的明文进行正则规则匹配0x8:通过逻辑判断隐藏后门

黑客可以将畸形WEBSHELL放在例如IF条件语句中,如果VM沙箱不能预处理源代码的编译后汇编逻辑,使之进入所有流支,可能会导致漏报,但同时进入所有流支又可能带来性能损耗等原因

0x9:PHP的序列化、反序列化特性布置后门

0x10:利用运算符进行编码转换隐藏的WEBSHELL

轻量级沙箱很难完全模仿PHP实现一个全集的运算符集和语法规约,这种WEBSHELL最好的方案是用多正则进行检测

0x11:filter_var、array_xxHook导致误报

在正常的CMS代码中普遍存在这种接收外部参数,对其进行callback、filter等代码逻辑,解决方案如下

1.如果黑客在filter_var中的第三个参数中传入了assert的回调,则最终VM会在assertHook点检测到污点标记2.如果黑客在filter_var中的第三个参数中传入的是一个外部参数(例如$_GET),则在filter_var的参数3中检测是否检测到污点标记0x12:逻辑后门

$value){var_dump($$c);if($key=="m"){eval($value);}}>另一种形式

THE END
1.jvalibrary·GitHubTopics·GitHubStar Here are 2 public repositories matching this topic Language:All Family tree application for System Programming Lecture written C. csystem-programmingredblacktreedlistjvalibrary UpdatedFeb 3, 2019 C bootstrapjqueryjvalibrary UpdatedMar 27, 2018 https://github.com/topics/jvalibrary
2.JavLibrary最新网址资源分享与探索指南logo设计随着技术的飞速发展和信息爆炸式增长,人们对于知识和信息的获取需求愈发强烈,在这个时代,我们不仅需要海量的信息,更需要找到准确、及时、有效的资源获取途径,JavLibrary作为一个专注于技术资源分享的平台,为广大开发者和技术爱好者提供了丰富的技术资料和最新的技术动态,本文将详细介绍JavLibrary最新网址的资源和特点,帮助大https://www.bravedesign.cn/post/17187.html
3.zlibrary最新找书地址,好用,关键是稳定,不失联zlibrary最新找书地址,好用,关键是稳定,不失联 zlibrary作为全球最大的电子书分享网站,想看书的小伙伴这次真的有福了。如果你还在为因为zlibrary网址不稳定,下载次数受限烦恼的话,这次你就来对地方了,专业大神研究的最新方法,让你没有烦恼。Zhelper 助手 V1 最新最全的 Z-Library 网址检测。目前总共检测 https://baijiahao.baidu.com/s?id=1742541091464451815&wfr=spider&for=pc
4.Javlib最新技术动态及前景展望信息系统集成服务Javlib的最新技术动态关注于持续创新和优化,致力于提供更高效、更灵活的解决方案。当前,该技术在智能处理、大数据分析和云计算等领域取得了显著进展。未来展望中,Javlib将更加注重实时性能优化和安全性提升,以满足不断发展的市场需求。随着物联网和人工智能技术的融合,Javlib将有望在这些领域实现更广泛的应用和突破。Jahttp://www.nczskj.com/post/15102.html
5.javlibrary.land子域名大全javlibrary.land二级域名javlibraryiP或域名查询 X iP 子域名 备案 Whois javlibrary.land 更多子域名 最新域名查询 xxxx777.com www62549.com lx.fuhua95.com aa3aa.com 29716.com 22dang.com www.96zhj5p.com wwwhaole018.com www.swqxto.com www.eeyyss.com www.66aaf.com https://site.ip138.com/javlibrary.land/domain.htm?ivk_sa=1024320u
6.Javlib最新域名,探索前沿科技与无限可能解决方案摘要:Javlib最新域名已推出,致力于探索前沿技术与无限可能。我们提供最新的技术资讯和资源,帮助用户了解并掌握最新的技术趋势。Javlib致力于打造一个前沿技术的交流平台,为开发者、技术爱好者和企业提供一个共享资源、交流经验的场所。您可以发现技术的无限潜力,激发创新灵感,共同推动技术的发展。 https://www.xindashizheng.com/post/21772.html
7.LibraryJournalLibraryReads and LJ offer read-alikes for Wind and Truth by Brandon Sanderson. Netflix nabs film rights to Callie Hart’s fantasy romance Quicksilver, and Alan Moore’s The Great When will be adapted for television. New York Times Selects Top 10 Books of 2024 | Book Pulse Kate Merlene |https://www.libraryjournal.com/section/news
8.JavaLibrary最新口令:杠精视角下的机智揭秘所谓“机智”,不过是把智慧戴上了滑稽的面具,让人在会心一笑中领略真理。今儿个,咱就聊聊这JavaLibrary最新口令,让你们见识一下,啥叫真正的“杠精”。 这时代,密码比头发还难记,啥?你问为啥?废话,头发掉了还能长回来,密码忘了,那可是叫天天不应,叫地地不灵。不过,别急,今儿个,就让我用这杠精的视角,带你https://www.gdjunquan.com/jqjc/71337.html
9.leavethelibrarywithoutborrowinganything的翻译是:离开athe JVA shall nominate a Representative who shall have the authority to conduct all business for and on behalf of any and all the partners of the JVA during the bidding process and, in the event the JVA is awarded the JVA将提名将有当局做所有生意和代表和所有伙伴任何JVA在出价过程期间和的一http://eyu.zaixian-fanyi.com/fan_yi_10111999
10.HotSaleHfRFIDTagforLibraryBookHot Sale Hf RFID Tag for Library Book, Find Details and Price about RFID Label Hf Label from Hot Sale Hf RFID Tag for Library Book - Changzhou Tinghao Electronic Co., Ltd.https://tinghao.en.made-in-china.com/product/dxkYghKcnjVA/China-Hot-Sale-Hf-RFID-Tag-for-Library-Book.html
11.todownloadlibraryjsonlibjmeter安装插件显示falied文章浏览阅读1.1k次。处理failed to download library json-lib_jmeter安装插件显示faliedhttps://blog.csdn.net/kele_jichi/article/details/129046462
12.JAVAlibrary番号网站51CTO博客已为您找到关于JAVAlibrary番号网站的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及JAVAlibrary番号网站问答内容。更多JAVAlibrary番号网站相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/be804b9bf52cdc8.html
13.ComprehensivereviewwithpooledanalysisonexternalandJugular vein aneurysms (JVA) are rare. Harris1 was the first to describe a venous aneurysm in 1928 in a short communication. Gillespie et al2 reported the typical anatomic locations where venous aneurysms are located, including 77% in the lower extremities, 10% in the upper extremities, and https://www.sciencedirect.com/science/article/pii/S2213333X21005023
14.RoughGuideMandarinChinesePhrasebook(withAudio)ilalje from !he British Library978-1-84836-733-3 3579864 2CONTENTS How t o use this book 4 Bas1cs Jvah ~~gua er er yao chmg gwah er et(to gel attention) Iaoji3. qlng wen- .. chmgwun ~~~fii] (to say sorry) duibuql dway-boochee X;J"~j§ exhaustehttps://epdf.tips/rough-guide-mandarin-chinese-phrasebook-with-audio.html
15.MailingListforTheGLETubingandExtrusionLibraryY2ggc3RhdGUgaXMgYnJva2VuIGRvd24gYnkgYXJlYSBjb2Rlcy4gKiBHQU1C TElORzogQ29udGFpbnMgZS1tYWlsIGFkZHJlc3NlcyBvZiBwZW9wbGUgaW50 ZXJlc3RlZCBpbiBnYW1ibGluZy4gKiBIT01FIEJVU0lORVNTOiBDb250YWlu cyBlLW1haWwgYWRkcmVzc2VzIG9mIHBlb3BsZSBpbnRlcmVzdGVkIGluIHJ1 bm5pbmcgYSBob21lIGJhc2VkIGJ1c2luhttps://sourceforge.net/p/gle/mailman/gle-discuss/?limit=100&style=flat&viewmonth=200306
16.FrontiersImmuneSystemModulationbytheAdjuvantsPoly(IRNA Extraction, cDNA Library Preparation, and Sequencing Total RNA purified from sorted lymphocyte populations was isolated and DNaseI treated using Qiagen RNeasy Mini Kit (Qiagen, Valencia, CA). RNA integrity was checked by Agilent Bioanalyzer 2100 and Agilent RNA 6000 Nano Chips (Agilent). The https://www.frontiersin.org/articles/10.3389/fimmu.2022.910022/full
17.UnPHPPHPDecodeofeval(gzinflate(base64timezone => UTC => UTC dom DOM/XML => enabled DOM/XML API Version => 20031129 libxml Version => 2.9.1 HTML Support => enabled XPath Support => enabled XPointer Support => enabled Schema Support => enabled RelaxNG Support => enabled ereg Regex Library => Bundled library enabled https://www.unphp.net/decode/5455026b1edb5c88603f2fa68ccb469d/
18.javalibrary中文是什么?为您推荐 javalibrary 欢迎光临javalibrary jvalibrary jaylibrary中文网站 jaylibrary最新网站 你的线上library jaylibrary贴吧 jaylibrary上不去 jalibrary jaylibrary最新 seedmm a31g新域名 相关问题 javalibrary地址多少 打开myeclipse,点击上方菜单栏处Window,在弹出的子菜单中点击Preferences。 2、https://wenda.so.com/q/1638852435215029
19.CLcommandfinderDLTJVAPGM (Delete Java Program) command DLTKRBCCF (Delete Kerberos Credentials Cache File) command DLTLIB (Delete library) command DLTLICPGM (Delete Licensed Program) command DLTLIND (Delete Line Description) command DLTLNXSVR (Delete Linux Server) command DLTLOCALE (Delete Locale) command DLTMEDhttps://www.ibm.com/docs/zh-tw/i/7.1?topic=language-alphabetic-list-cl-commands-by-command-name
20.Mod监狱建筑师中文维基灰机wikiLibrary and book creatingSirNoolas1.5增加新的房间类型——图书馆,囚犯可以阅读,装订图书。~Steam Workshop Rock crushing modSirNoolas2.2将大石块粉碎成小石块时增加了电影风格。ForumSteam Workshop Barbersshop modSirNoolas1.3囚犯可以理发。ForumSteam Workshop https://pacn.huijiwiki.com/index.php?curid=559
21.Cocoapods:podsearch无法搜索到类库的解决办法删除~/Library/Caches/CocoaPods目录下的search_index.json文件 pod setup成功后会生成~/Library/Caches/CocoaPods/search_index.json文件。 终端输入rm ~/Library/Caches/CocoaPods/search_index.json 删除成功后再执行pod search 执行pod search 终端输入:pod search RxSwift(不区分大小写) https://www.jianshu.com/p/b5e5cd053464
22.cims.nyu.edu/~brenden/courses/labincp/Much of the Matplotlib materials comes from the [library documentation](https://matplotlib.org/tutorials/index.html) and most of the seaborn gu9JVALRJb2vJHDpXiCS2sq++YtPjj9dKLbsmWodGRI7IzsAOpq2ewqaK6HIM/VtdRP9WF1k8lYgkmu0LF7JlzhwwhtRmzWh76624WrWK2fvFPNAsWrTogMd69uxJzxhcbhKR2https://cims.nyu.edu/~brenden/courses/labincp/_sources/chapters/06/00-plots.ipynb
23.BooksIGIGlobalScientificPublishingLibrary and Information Science Women Community Leaders and Their Impact ? 2022. 398 pages Social Sciences and Humanities Key Factors andJoint Vibration Analysis (JVA) and the Diagnostic Process in ? 2020. 63 pages The Occlusal, Neurological, and Orthopedic Origins and Implihttps://www.igi-global.com/reference/
24.868SAPNotesReleasedon16February2023BC-OP-LNX 3277471 LD_LIBRARY_PATH empty with saphostagent – NetWeaver BC-OP-LNX-OLNX 3277498 libstdc++.so.6: version `CXXABI_1.3.8′ not found – NetWeaver BC-OP-SUN 3292265 Sftp script doesn’t work in SM49 – NetWeaver BC-SRV-APS-EXT-FLD 2923490 App could not be opened because https://s4hanaguide.com/868-sap-notes-released-on-16-february-2023/
25.www.usenix.org/legacy/publications/library/proceedings/usenix9sMH!Ct0+rrD<_4TYR1s#gNUi&sRn i:R$YkpJVAkrgCW-grs[9=i9B1Hi9B1Hi6^E^l1tAZkmZM7`p)FG i6^EHi6^EOrsd!4i9AVHl/:gGl/:gGq>^HY#N4jdl2T]+`rG9(i9Bb2!7:`0 "iffbd/W&(klK`,qYpQ8rojI's8Vhku2D';sA*]FiJQ?;g$+KrsVt-4m?$H?p3a;Ce)MArrM@Ss#gAH rB1/Fs#gBQi0XHE7jn:http://www.usenix.org/legacy/publications/library/proceedings/usenix98/freenix/minnich.ps
26.DoesshareddecisionWhy does shared decision-making matter for breast cancer screening? Breast cancer screening helps save lives and reduces health issues during treatment. However, it may sometimes give incorrect results or lead to too much treatment. When women and doctors make choiceshttps://www.cochrane.org/CD013822/BREASTCA_does-shared-decision-making-help-women-when-making-decisions-about-whether-or-not-participate-breast
27.Can'tregisteranarrayofdnsserversfromapowershell\"CI_PROJECT_DESCRIPTION=GStreamer open-source multimedia framework core library\",\"CI_PROJECT_PATH=alatiera/gstreamer_test_test123\",\"CI_PROJECT_PATH_SLUG=alatiera-gstreamer-test-test123\",\"CI_PROJECT_NAMESPACE=alatiera\",\"CI_PROJECT_NAMESPACE_ID=2776\",\"CI_PROJECT_ROOT_NAMESPACEhttps://gitlab.com/gitlab-org/gitlab-runner/-/issues/37270
28.Violencepreventionacceleratorsforchildrenandadolescentshttps://www.undp.org/content/dam/undp/library/sdgs/english/sdg_accelerator_and_bottleneck_assessment_tool.pdf . 7. cluver l, orkin fm, campeau l, toska e, webb d, carlqvist a, et al. improving lives by accelerating progress towards the un sustainable development goals for adolescents http://dx.doi.org/10.1371/journal.pmed.1003383
29.HowtoaccessdbcontextinCustomActionFilterConfiguration manager assembly not loading in class library file Connecting a stored procedure to a simple button connecting aws db instance to mvc How to get the Actual file path instead of fakepath from the file upload control in safari using jvascript or jquery? How to get the controllerhttps://learn.microsoft.com/zh-tw/archive/msdn-technet-forums/3b9c6663-7678-4b32-b568-3c7c0466bc57