前言
如今国家、社会愈加重视网络安全,逐渐加大在这方面的投入。前景向好的同时,近来也有越来越多的新鲜血液涌入到安全这个行业中来,大家亦步亦趋的过程中难免会产生迷茫、困惑,可能会有人在这时感叹一声如果有个前辈引导一下该多好。
因此,我们想借助访谈的形式,与网络安全社区的优秀前辈对话、讨教。初衷是想通过前辈的一些经历、经验,为刚踏入这个行业的同学指引方向;为正处在困惑期、迷惘期的朋友们指点迷津。
本期我们邀请到了网络安全社区资深软件安全专家:htg,一起来听听他的分享吧!
本期嘉宾:htg
软件安全专家
软件技能丰富:掌握 Fortran、Lisp、C、C++、VBA、C#、Python、COBOL 等程序语言编程技能,及 IDA、Windbg 等逆向软件技能。
开发经验丰富:具有 10 多年软件开发经验,主持或承担过多个大型管理平台软件、二次开发插件的研发。
逆向经验丰富:结合动态静态逆向方向,研究数款加壳保护软件及脱壳破解软件。
Q:感谢师傅接受采访,请问一下怎么称呼,行走江湖都用过哪些名号?先跟大家自我介绍一下吧!
A:首先非常感谢网络安全社区的盛情邀约。作为国内非常著名的网安交流平台,我早在 2012 年就有所耳闻并注册了会员,用户名是「htg」,在 CTF 比赛里还组建了「心学」战队。混迹网络时还使用过「文宇」、「心隐草」等名号。我是一名系统架构设计师,主持过多个大型管理平台软件、二次开发插件的研发,目前主要研究人工智能、大模型、智能建造技术。
Q:想请问一下师傅贵庚几何?从事网络安全有多少年了?开始对网络安全感兴趣的契机是?
A:我的年龄偏大了,在程序员行业里,应该都算处于退休阶段。其实我也不算完全踏入网络安全,更准确的说法是涉足了其中的软件安全。个人对 Reverse 和 RSA 感兴趣,对底层的数学知识更感兴趣。
Q:那师傅至少得有十多年丰富的软件开发经验了,都是从哪些途径找到锻炼自己的机会的?
A:需求来自于工作和兴趣,有了需求,才有了目标;动力来自于生活和兴趣,有了动力,才能从主观层面上去实施。我主要通过网络搜索、查阅教程、与同行交流来提升自己的能力,每一个过程都能让自己沉浸其中,每一项技术的理解和掌握都能带来喜悦,每一次提升都是对自己的鼓励。
Q:师傅是一开始就将网络安全作为职业方向,还是中途才走上这条路的呢?
A:其实我本科专业并不是计算机、软件等方向,但在大学期间就非常喜欢计算机技术,以及相关编程语言。在大学期间通过了 NCRE-3(PC 技术)和 NCRE-4,自学了数据结构、操作系统、编译原理以及计算机组成原理和体系结构,另外还有计算机网络技术等计算机专业课程。毕业后又参加 CCSP 考试,先后通过了软件设计师和系统架构设计师,同时也迫使自己学习了一些软件工程、软件开发的相关知识。因而说不上是打从开始就将网络安全作为职业方向,甚至现在也都说不上,可以称之为个人第二增长曲线吧。
我所学的计算机语言比较杂,汇编语言、C/C++、C#、Python、VBA、java 等。在学习面向对象语言的过程中,对类的结构、对象的结构、虚函数、纯虚函数、重载、多态的概念有点晕乎,后来就是借助查看汇编语言代码,算是了解的比较彻底。至此,我才开始真正接触了软件安全,包括一些溢出漏洞、格式化漏洞。后来又通过阅读《0day 安全:软件漏洞分析技术》,接触到了网安相关知识,php 代码安全,还有 pwn 的知识,对操作系统底层的内存分配和释放有了更深入的了解,算是半路入网安,仍然在半路。
Q:师傅这属于是典型的非科班出身但凭兴趣自学成才了!那您当初又是如何入门的,走过了哪些弯路,对新手入行有什么建议吗?
A:我是懵懵懂懂进入计算机技术圈子的,最初不知道学习的先后顺序,所以先学习的编程语言,后来是通过了解 NCRE 考试,在学校的图书馆查阅书籍,缺啥补啥,时间耗费较长。大学毕业后从事的是本专业工作,从 NCRE 转向了 CCSP 考试,学习方式类似,都是遇到不懂的就花时间去了解,没有经过系统的学习。工作中,有时会通过编程来做一些批处理工作,提高工作效率。我这块主要是靠兴趣来坚持,对新手入行来说,建议找一个师傅带为好,按照专业课程计划进行学习。给一个建议,一定要动手操作,先按照流程走一遍,然后再研读具体细节,走不通时善用网络搜索或向同行请教,实在无法领会的时候,可能就是基础知识缺乏,这个时候没有捷径可循,踏踏实实啃书本吧。
Q:我看到师傅掌握着多门程序语言编程技能,那在师傅看来,最建议网安新人优先学习掌握哪些语言?
A:学的比较杂,其实不算特精通。近几年主要使用 C#语言,有时也会使用 python。编程语言都有共性,无非就是【顺序、循环、选择】三种结构的组成。底层的汇编语言或者中间语言,整体逻辑或架构不会差距太大,可能语法或操作符号有明显的差距。更高级的语言,一般都会涉及面向对象,再往上,也会概化为设计模式,初学起来会很困难。
如果是初学编程语言,建议学习 python,一是有大量的库可以直接使用,二是在人工智能、大模型方面的应用层面研发上,大量使用 python,其资源非常丰富。如果是涉及底层,或者驱动层的研发,pwn 方向的网安,建议学习 C/C++语言,有精力还是要了解汇编语言。如果是做一些网络应用层面开发,建议从 C#、java、php 等语言入手。
Q:您认为网络安全研究还需要掌握哪些基础知识和技能?平时又是如何保持自己的技术水平和知识更新的?
A:具备数据结构与算法、操作系统、主要的加密算法、网络协议以及编程语言等基础知识和技能,另外要掌握一些常用的分析软件。计算机技术日新月异,我最早接触的是小榕软件实验室,用过 TRW2000、SoftlCE 等软件,这些基本上是老古董了。后来一直关注网络安全社区、相关技术网站的内容。平时还是多关注前沿技术,与同行交流、逛权威论坛、打经典赛事,这对保持自己的技能水平和知识更新非常有帮助。


