给大二画上一个完美的句号

一些牢骚

学了俩年,多少有点收获

入门

介绍下个人情况:

1.南邮18级,零基础

2.大一开学被ctf吸引,决心要学习安全

这应该和大部分新生一样,当时也不知道怎么学,就只能像学长请教,天天缠着学长问问题,军训那一个月不到时间内学完c语言,当时也是听了学长的观点,好好学了指针,学完就开始刷题,国庆第一次接触了re,南邮招新群第一道题目,就一个明文比较看了四小时没有看明白,ida也不会用(当时用的6.8,7.0还没泄露,如果7.0应该能直接识别出字符串了,6.8只能把他识别成字符数组)当时就是纠结了这个该死的“小端序”,硬是磕了半天,意识到自己还有所欠缺,继续学了汇编(王爽老师的汇编语言)学完后勉强能看懂了,刷了3题(南邮第一题,第二题纯汇编和maze)就开始打校赛,说是组队吧。。。其实就一人在那写题,勉强写出了3题,混了个三等奖。

就这样渐渐有了学习方向,每天学习就是刷题,总结,写wp,不断重复。到了大一寒假已经可以说是”入门”ctf了(常见的技术,smc,junk code等都基本掌握)

愚昧山峰

有了这些基础必然是开始比赛,每天除了刷题就是比赛,第一个一等奖记得是东南大学的校赛(当时算省赛的),5个re抢了4一血,有点飘。原来这就是ctf吗?后来也通过了面试加入了x1c,一切都是那么的顺利,暑假期间也打了臭名昭著的hape比赛(iscc,亏他还是我打的第一个国家级比赛)

可能这和标题描述的有所不符,为什么是愚昧山峰?

因为我当时认为,这就是”安全”,ctf就是全部,每天干着同样的事,刷题,总结,写wp,刚开始还有些许新鲜感,后来逐渐变乏味起来,没有什么新知识,题目老套没意思。

没错,大二上就这么过过来的,不断地比赛,拿一堆质量不怎么高的比赛的奖,刷题,写wp

绝望之谷

纸终究包不住火,大二寒假遇上疫情没什么事干,学长就帮忙内推了腾讯,当时面的是游戏安全(没错,当时我都没怎么接触游戏安全一下就面腾讯的游戏安全,也不知道哪来的胆子),一面就出现很多问题,有很多常见的知识根本没有思考过本质。

心灰意冷。。。

好在腾讯的师傅都很不错,因为才大二和我说了很多,令我印象最深的一句话是”你现在学会了骑自行车,现在是你要怎么骑得有价值”然后询问了我喜欢的方向和他们目前有的岗位,这句话对我打击挺大的,不由让我思考之前都在学一些什么,ctf就是全部吗?

的确,只学会了骑自行车,什么都会一点就是什么都不会。

这边顺带说说ctf逆向,安卓逆向 windows逆向 linux逆向都算逆向,还有python,iot。。。对于刚入门的人来说写起来其实可以说是套路,你可能都不知道本质但是你就写的出,活生生一个代码观察师,而且还有些出题人自己都没怎么深入了解就xjb出题,专门出一些冷门的,然后翻车,挑一些冷门算法,可能自己都没怎么理解翻车了都不知道,就像之前某比赛一个流密码给你密文让你把key和明文整出来(key和明文有关)

种种原因让我做了个决定

1.不打ctf(指质量不高的ctf)

2.自学

开悟之坡

自学,从0开始的逆向学习

当时看了 C++反汇编与逆向分析技术揭秘 还有 程序员的自我修养 这俩本书,感悟挺深,但又感觉有所欠缺,便开始了深入学习

从pe开始

before:

1.谈到PE脑中就一个MZ

2.回显出PE大致结构

after:

1.自己新增节

2.自己修改entrypoint来”代码注入”

3.自己修改导入表来”dll注入”

4.自己写iat hook

5.自己写了个简单的壳子(进程替换)

所有之前感觉很高大上的东西变得轻松易懂起来

就这样,我开始不断地深入学习之前学过的每一样东西,并不断问自己,是否真正掌握了?

线程是什么,线程是怎么切换的?线程就是createthread这个函数吗?windows api是怎么调用的?

渐渐就开始接触内核,开始逆向windows(微)内核

ntoskrnl.exe

遇到不会的疯狂百度,还是当初入门ctf的套路

“不会就百度,百度不到就Google”

就像连锁反应,学了进程就得看线程,三环看完看零环,进程结构体EPROCESS线程结构体ETHREAD,缺一不可,假如你想知道windows内核是怎么切换线程,怎么根据优先级来切换,怎么找到线程在哪,就必须得知道并熟悉这些结构体里每个成员意义,就必须得自己去逆向ntoskrnl.exe,毕竟我们这种搞安全的研究的是底层。

诸如此类,花了2个月,学完大致对内核有所了解,基本的内核结构体都见过。自己也动手写了些小东西,比如第一个内核hook(x64 pg很头大,但是这边忽视,就是学习),各种注入,也正是这些基础让我在实习时有点”用武之地”(当时在长亭科技,本来是不准备实习了,和南航大哥聊天时偶尔提及变零时改变主意),组长让我帮忙写个马,虽然我做的一些工作可能组长半天就能整完,但还是能成长许多,知道主流木马是怎么个思路,怎么免杀等等。//顺带模仿组长的木马思路自己也写了个

有什么用?

离职后又重新翻了波 程序员的自我修养

不同时期看同一本书感觉还是很大,第一次看时感觉就那样,大部分一扫而过感觉都了解过,甚至感觉有点”浪费时间”。

学完一些内核基础再看这本书,体验截然相反

所以说这本书被那么多业内大佬吹捧,讲的很多,但又没涉及太多内核,能给程序员一个大概

正好国赛打完,有个永恒之蓝的勒索病毒逆向,虽然放在misc里但是是个逆向,里面对导入表的操作,dll里的inline hook

听大哥说很多病毒都有这种操作(没搞过病毒逆向,本来准备复习一波pwn的,但这成功引起了我的注意)

如果换在以前,可能不会去在意这些,分析算法写出题目就完事了

现在会去仔细分析,逆向编程了解他是如何实现。

而这正是因为有了之前所学的”基础”,大部分曾经看不懂的(或者自己以为已经懂了的)技术都能理解并实现。

有了基础,现在差的就是时间的沉淀来提升

但也有可能真没什么用,没准这又是下一个”愚昧山峰”

但愿自己所做的努力没有白费。

这篇blog纯属是一些总结

希望能对后辈有所帮助

文章目录
  1. 1. 入门
  2. 2. 愚昧山峰
  3. 3. 绝望之谷
  4. 4. 开悟之坡
    1. 4.1. 有什么用?
|