给大二画上一个完美的句号
一些牢骚
学了俩年,多少有点收获
入门
介绍下个人情况:
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纯属是一些总结
希望能对后辈有所帮助