一直在思考这个问题,未来的路究竟应该怎么走。
计算机从小便是我最大的兴趣爱好,喜欢折腾喜欢探索喜欢去尝试一些新东西,而网络安全则是我最喜欢的方面。很早以前混在某个小众论坛中捣鼓安全软件,了解安全软件检测病毒威胁的基本原理与方法,也曾混在hr论坛当中发布过自定义hips规则,研究操作系统薄弱点并进行针对性加固。
在此期间我也尝试学习过编写程序,终究因为英语水平缘故导致我学习能力较差,随后了解到了易语言中文编程哈哈哈。我第一个软件是百度网盘下载器(是的没说错),当然了链接解析部分的代码是另一位大神开源共享。当时最火爆的是PanDownload这款软件,同时也衍生出了一大批基于aria2的下载器,原理是百度网盘基于单线程进行限速,而aria2则通过暴力多线程方式拉取文件,1个线程100KB/s,64个线程就有6MB/s的速度。而后来百度不断升级速度限制策略,包括账号黑名单,流量总额检测等,一旦触发限制策略就会单线程限速10KB/s,就算你开64个线程速度也是非常慢,至此各大网盘下载器陷入瓶颈。
而我则想到了一个独到的方法,抛弃aria2转向使用迅雷下载引擎,迅雷相比于aria2来说有着p2p技术加成,大多数用户从百度网盘上下载的资源同样存在于互联网上的其它地方,利用p2p技术我们可以绕过百度服务器转而从其他渠道获取资源(百度现在也搞这个)。虽然当时迅雷开放平台已经下线了,但是我搜索到先前已经有易语言大神对迅雷下载引擎的接口进行了封装,我只需要简单地调用模块即可使用。就算我刚接触易语言啥也不会,但好在全中文很多问题我都可以搜索,所有东西我都是现学现用,然后东拼西凑搞出来了。
https://www.52pojie.cn/thread-728000-1-1.html
软件发布后当年火爆论坛,帖子浏览量达到了8万余次,这还不包括未登录用户浏览以及其他下载站分流,PanDownload下载不了的东西其他的什么速盘还有什么油猴脚本统统都不能下,但我的软件可以!即使整个软件写得异常简陋,我现在看起来是不堪入目的那种,但这并不影响它的好用。我的小软件在52破解2018年成为全论坛获得加分数量第二多的帖子,第一是PanDownload。这件事极大地激发了我编写程序的热情,我开始萌生出一个编写病毒扫描器的想法。
那么问题来了,我该如何判断一个文件安全与否?在实机上运行一下试试看?这显然不合理,好在经过一番搜索之后我了解到360有提供云查杀接口,本地校验md5提交表单,接口会返回文件的流行度以及出现时间还有文件置信度。再然后我又学习了POST文件对接了VirusTotal平台,将出现时间在3天以内的新文件上传到virustotal上进行多引擎扫描,同时过滤掉一些类似于”flystudio,pua,hacktool,not-a-virus”的报法,使得兼顾高查杀率的同时降低误报,并能够确保查杀速度。
后来又遇到了许多许多的问题,小小的程序还挺复杂。
1、首先是程序计算大文件时会超出内存崩溃,起初我的解决办法是获取文件大小如果超过100M则直接跳过,后来我又接触到内存映射文件这一项技术,成功解决大文件爆内存的问题,然后我又采用多线程方式计算md5,大幅提升了扫描速度。
2、什么文件需要扫描,什么文件不需要扫描?计算机系统中存在着大量的缓存文件,文本文件,图片文件等,这些文件一来不含有病毒木马,二来扫描这些文件会浪费大量的时间,程序应当如何识别并跳过这些无关文件?一开始呢我采用后缀名识别的方式,使得程序仅扫描exe,dll文件,但这样做存在着巨大的弊端,某些木马病毒会伪装自己的后缀名从而躲避安全软件扫描,那么程序究竟应该如何正确识别需要扫描的文件呢?我又在网络上学习了PE文件结构,了解到PE文件开头是以16进制“4D 5A”开头,只需要读入文件前两个字节便可以判断该文件是否为PE文件。
3、程序如何适配高分辨率屏幕?由于易语言的落后性,编译后的程序在高分辨率屏幕上会出现显示模糊的情况,而这需要我们自定义应用程序清单文件App.Manifest,这个清单文件功能非常多,包括程序启动时向系统申请管理员权限,控制操作系统对程序进行缩放等功能。
4、遇到含有unicode字符文件名的文件无法正常读取,解决方案是采用W系列api,但整个易语言从设计之初就压根没想过支持unicode字符,经过一番大折腾后ok我选择放弃哈哈。
后来我甚至想做一个系统监控功能,虽然安全软件都是通过MiniFilter等文件过滤驱动来拦截文件修改创建,但我经过一番查找后发现微软官方提供一个api接口ReadDirectoryChangesW,本来我以为看到了希望结果程序写出来后存在很严重的遗漏文件现象,原因是这个api是一个同步函数,你程序没处理完上一个会话它就会一直卡着导致之后的文件系统变化都不能正常监测到。我尝试过多线程,但最终以程序报错为终,我的代码水平实在不够,哪里要上锁哪里要解锁实在是令人头大,程序报错退出我都不知道是哪个线程冲突了。
再后来我又了解到api导入表这个东西,通过api导入表我们就能够简单分析程序会有哪些行为
我甚至还了解到通过hook技术我们便可以实时拦截程序行为,我通过网络上少得可怜的资料学习并成功hook了第一个函数CreateProcessA,由于msdn全英文文档我实在是看着费劲,很多专业名词我压根儿不知道是什么有什么作用,但总之就还算是成功的一次小尝试吧
很显然这是copy的代码哈哈哈
hook肯定是成功的,但是我实在是不知道哪个参数是什么东西,为什么实际情况与msdn上所述的内容不相符,我就想单纯获取CreateProcessA这个函数哪个参数是文件路径,太难了找不到规律啊一堆参数哪个是哪个,msdn全英文我看啥呀看,遂搁置。
再然后就是上高中咯,所有东西全部都被搁置了下来,每周回家也都是上上网打打游戏之类的,一点也不想做其他的事情,包括写什么程序啊,学逆向啊什么的全部都停掉了。当然最终高考也是光荣战败以哭了一整天为结局(sad。
对未来的规划
自始至终我的愿望就是学习网络安全,当然希望以后能够从事网络安全相关工作,这条路很艰难,全国网络安全岗位要么是第一梯度的薪水,要么就是没有公司需要,boss直聘上查过了,全重庆没有任何一家网络安全公司,意味着我走这条路的话以后得去外地漂流啊。学校一来没有开设相关课程,二来搞什么icpc集训队都是练习算法,算法很重要吧,似乎与我的职业规划有所冲突似乎又很合理的样子,专业分流选择了大数据,正巧我看到火绒在招机器学习相关人才,那么我一个既懂网络安全,又会c语言,又是大数据专业的会不会很是符合要求呢?月薪15-30K并且也不要求学历985/211,我也很喜欢这个公司,希望未来真的能够成为其中一员,共同为我国网络安全事业贡献力量。
当然啦还有什么破烂保研问题我也是焦头烂额,双非学校偏偏又有保研名额,高年级学长又有很多保985的例子,分流到大数据班吧绩点又是第一,学校的课程又水又烂又一点也不想学,咱就是处于一个四不像的境地,以后看看应该如何做出平衡。
规划:
日常把绩点水上去,正好大数据班不卷。
无用作业抄抄抄不要浪费爷的时间。
正常2,4,6跟着集训队练习算法,拿不拿奖我真无所谓,本来就没想过拿。
下午没课就睡觉,天天早八烦死了困困困,一定不能影响(不可说的东西)。
其它时间学程序逆向,学学学学。
结语
祝自己前程似锦,一路顺风。
tql Orz
tql
这是哪位大哥,可以留下联系方式一起交流学习