如何从零开始参与开源项目并提升技术能力:向大牛学习的实用指南

[id_2[id_1744777172]751863]

如何从零开始参与开源项目并提升技术能力:向大牛学习的实用指南

前段时间,在一位很厉害的人的 BLOG 上看到他简历上写的开源项目列表非常多,数都数不过来。再把自己和他对比一下,自己从来没有参与过一个开源项目,也没有成功地参加过一个开源项目,只是偶尔贡献过几个所谓的工具和脚本。顿时觉得很羞愧,同时也非常羡慕他,然后暗自鼓励自己,要向这位大牛学习。[id_185[id_1205905206]66323]

我写那篇关于 WEBSHELL 木马的博客时,时间是 2010 年 7 月,那时我还在久游网工作,并且工作内容与代码安全相关。我最初是通过基于正则表达式实现的字符串匹配来捕捉和查找危险代码的。同时,在二期计划中,打算通过 LEX + YACC 来对 PHP 代码进行精确分析和扫描查找。为此,会时常认真地研究学习 yacc、lex,了解 PHP 的 Zend 引擎实现方式,钻研 zend_language_scanner.l、zend_language_parser.y、zend_language_scanner.c 等几个文件的编写思路等。从 2 月下旬开始入职,到 11 月初结束离职,这期间一共 7 个多月。在这 7 个多月里,并非一直都在做这个项目。实际上,这个项目只是我个人研究的范畴。在平常的工作中,我只能利用空闲时间来进行研究。由于种种原因,在没有完成那个项目之后,我离开了久游。自己可能是因为基础薄弱,也可能是因为时间不足,或者是因为其他原因。每次想起这件事的时候,都会因为没有完成那个项目而感到遗憾。

人常常喜欢找借口。就像我前段时间,内心烦躁且思绪杂乱,接着就开始玩起了英雄联盟。从 5 月开始到现在,已经断断续续玩了 5 个月。从支持者的角度来看,人总不能一直让大脑处于紧绷状态,偶尔玩一下游戏,让自己放松一下,这又有什么不可以呢?而从反对者的角度来看,这是不是在放纵自己堕落,还找理由和借口呢?[id_1156493[id_111424954]8]

这线引得有点太长,也算是我的自我检讨与牢骚吧。

所谓扫描工具,需要先进行扫描,才能够找到需要的东西。就代码扫描方式而言,其实现方式大概有特征关键字的捕捉,有正则表达式的语法匹配,还有语法语义分析等。这些实现方式,在准确性和严谨性方面是逐层递增的。

特征关键字这种方式,是检测手段中最简单且最不准确的。在那篇博客里有一个比较好的例子:

[id_2070367469]

[id_1038254424]

01

声明我喜欢自嘲和自黑,然而不喜欢黑别人,也不喜欢在某些圈子里吵闹吵嘴。之所以列出 360 的例子,是因为机缘巧合,在面包屑的引导下,被引到了 360 的站长扫描网址中,并且下载了这个扫描工具,我觉得这是一个非常好的反面例子,希望大家能以学术角度来看待本文中提到的相关代码。

02

class

scan{

03

[id_1681578084]

$directory ='.';

04

private

$extension 包含一个元素,这个元素是 'php' 。

05

private

$_files =array();

06

private

$filelimit = 5000;

07

private

$scan_hidden

= true;

08

private

$_self ='';

09

private

$_regex = 'preg_replace 相关操作|反引号相关内容|create_function 相关|passthru 相关|shell_exec 相关|exec 相关|base64_decode 相关|edoced_46esab 相关|eval 相关|system 相关|proc_open 相关|popen 相关|curl_exec 相关|curl_multi_exec 相关|parse_ini_file 相关|show_source 相关|cmd.exe|KAdot@ngs.ru|小组专用大马相关内容|提权相关|木马相关|PHP 反弹相关|shell 加强版相关|WScript.shell 相关|PHP Shell 相关|Eval PHP Code 相关|Udp1-fsockopen 相关|xxddos 相关|Send Flow 相关|fsockopen(udp 或 tcp)相关|SYN Flood 相关';

10

private

$_shellcode='';

11

private

$_shellcode_line=array();

12

private

$_log_array=array();

13

private

$_log_count=0;

14

private

$webscan_url='#39;;

15

private

$action='';

16

private

$taskid=0;

17

private

$_tmp='';

这里正则的最后部分有中文字符串“小组专用大马|提权|木马|PHP\s?反弹”。这里的正则并非原本意义上的正则表达式,只是简单的或逻辑,没有其他更严谨的匹配规则,所以只能当作简单的特征关键字来看待。例如,代码或注释中出现“螓首微微压下,右手倒提权杖”,以及电影《特洛伊木马》,均被当作 webshell 而被抓获了。这种实现方式,最不准确。

正则表达式匹配方式是在特征关键字之后的一种更加准确的捕捉方式。然而,这种方式仍存在大量的误报和漏报情况,例如我在三年前写的 python 版 php。

webshell检测工具里的代码:

查看源代码

打印帮助

match=

- 然后是一个双引号或单引号 "(",后面跟着除分号 ";" 之外的任意字符,直到遇到分号为止。

使用 file_contents,遵循 re.IGNORECASE 或 re.MULTILINE 的规则。

match=

re.search 函数在 file_contents 中搜索正则表达式 \b(?Peval|proc_open|popen|shell_exec|exec|passthru|system)\b\s*\( ,使用了 re.IGNORECASE 和 re.MULTILINE 标志。

match=

re 进行搜索,搜索的内容是 r' (^|(? ,并且错误消息为 'Encrypt with Zend optimizer.' 。

05

return

false;

06

07

$this->resetErrors();

08

使用 token_get_all 函数获取代码的标记,然后将这些标记存储在 $this->tokens 中。

09

$this->code =$code;

10

$this->pos = -1;

11

$this->line = 1;

12

return

$this->checkError();

13

误报问题存在于以下两个方面:其一,被检测的文件是否为合法的 php 语法文件,token_get_all 函数的实现过程中,不会对其是否为合法 php 语法文件进行验证,仅仅是对其进行扫描和分析;其二,代码中由于业务需求而出现的危险函数,如何将其排除掉,以及恶意代码如何进行界定?

服务器云判断能够依据恶意代码串的指纹,凭借大量后门数据,进行语法和语义分析,开展业务逻辑分析,以此理解这段代码的用途,进而给出其是否为恶意代码的定位。而其他使用者则可以直接获得该代码片段是否为恶意代码的结果反馈。Pecker Scanner 首先是基于语法分析这一方式,将 token、注释、字符串、变量、语言结构等剥离出来,接着进行 php 语法检测,以此来提取恶意代码,它是一种扫描工具,能够解决漏报问题。并且它还支持服务器云判断,从而尽量避免误报问题。在 Discuz!中,例如 exec ($cfe,$res)是正常的功能代码。然而在木马后门中,这就变成了恶意文件。同样的一段代码,在不同的项目里,会扮演不同的角色,不能仅仅依据代码功能来判断,还得依靠所属的项目。这需要大量的木马后门库以及开源项目库,希望大家能够帮忙提交一些。

Pecker Scanner 这个开源项目被托管在 Github 上,大家都有权利 fork 它并且对其进行完善。目前,Pecker Scanner 生成的报告与服务器校对检验的方式是通过 jsonp 方式进行通讯。如果以后流量比较高,就会采用验证 API 的形式,直接在 pecker 中进行操作。

在 scanner 代码中,通过对 api 和 key 进行运算,将多个 token 代码段以 post 的方式发送到服务器以获取状态,然后将其展示在报告文件中。这样做一方面能够减轻因大量 http 请求而采用 jsonp 所带来的负担,另一方面也可以减少恶意且无用的查询。

Pecker Scanner 当前处于 beta 0.3 版本。你能够在此处下载 Pecker Scanner 的 beta 0.3 版。不建议直接前往 github 进行下载,原因是 github 上或许存在我正在调试的代码,亦或是尚不完善的新功能。

Pecker Scanner 的项目主页位于此处。后续的版本更新以及新功能的发布,也都将在此处进行公告。扫描报告样例在 pecker 。

scanner report样例,您可以先预览一下。

Pecker Scanner Server 目前所收集的开源软件有 Discuz_7.2_FULL_SC_UTF8 和 DedeCMS-V5.7-UTF8-SP1-Full ;其中的木马后门包含 PhpSpy 2011、PhpSpy 2013 以及 PhpSpy 2011 加密版。其他的开源项目以及木马后门,正等待着各位的反馈。

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

44阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读