「回忆2022,展望2023,我正在参与2022年终总结征文大赛活动」

前语

距离上一篇博文有一个月之久了,距离上次编写代码也有一周之久了,由于疫情的全面放开,加上福建省教育厅告诉的提前返乡,反而让我感到有些不适。往常这个时刻点我忙于期末考试,会把代码的作业放一边,比及彻底放假后,开端闭关悉心学习。然而剩余的半个月变成了线上方法,课仍是要上,考试仍是要考,虽然身在家园,但心不在焉的 。

12 月已过半,也是时候该写年终总结了。迄今为止,我已学习了 3 年半的编程。(还好不是两年半),当下的技能不再是最初只会易语言的小伙了。只是当下已没有最初如此强烈的热情与精力了,我称之为老了。

现在回头回忆学习编程时刻,用一个成语对自己做个评价——差强人意。在这些时刻段,我其实旷费过一段时刻,厌恶过,贪玩过,旷费过,从我的 Github 热力求 中其实就能看得出来。就导致欠下技能的,都需求后续花时刻去补偿。

要让自己坚持每天都处于学习状况真的太难了 ,日子总有连绵不断的小事打扰着你。在繁忙的时候总是感觉时刻不行用,哪怕有时一天花费了数十个小时,也总感觉做的作业太少了;哪怕每天计划都规划得好好的,但总是有一半还未完结。日子中许多的碎片化时刻,而编程学习最不需求的便是这些碎片化时刻。

回忆整个编程生涯有太多可感慨的,整个旅途几乎是一个人走完的,期间遇到的崎岖就只得依托搜索引擎来处理,搜索引擎是我再生父母都不为过。没有人给我指引清晰的道路,只依托心中对技能的憧憬不断前行。走过低谷,登过山峰,而现在站稳身子就足矣。

感叹的话语也便是说到这。本年首要总结我为何从逆向转 Web 开发,并清晰我未来所要走的方向,也是本文的主题。仅作为个人感悟,不作为主张参阅。

为什么是 Web 开发?而不是逆向

本年大部分的开发时刻都花在 Web 开发上,在此期间也触摸到许多技能,并经过博客笔记的方法记录下来。

我很庆幸我的 Web 开发从一个 Beginner 到 Intermediate,现在回忆整个学习旅程,一路学得都很野很随意,从未系统学习过,总是学到一半,就自以为现已把握了,便开端进行实战项目,能够说许多常识都是在实战探索中了解的。

虽然许多人都直称我为大佬,但我离 Advanced 还有一大段的路程要走,而这段路程是无比的艰难与漫长。不过好在路不歪,只要肯走终会到达终点 ‍。

而带我入门的逆向技能,在本年没有丝毫的出息,说得过分点,便是弃坑了。也正如标题所说,至于缘由,细看下文。

逆向

了解我的人应该知道我之前是做爬虫与逆向剖析,可是为何本年的技能栈彻底转型到 Web 开发上。

我常常和别人说起我的技能栈转型(从逆向转到开发),不过比较多的都会比较猎奇我为什么不持续进修下去。

在此我也回忆了我从逆向转变到 Web 开发的进程,顺带也答复这个问题。不过在这儿先说说我个人对逆向的观点:

逆向需求的技能常识面比较广。

就我触摸逆向的进程来说,触摸了易语言,JavaScript,Python,Java,Php 等等编程语言。

运用过了一堆的逆向东西,如 Frida、IDA、JEB、jadx 等等(我现在能想到比较有名的)。此外还有一堆常识,包括但不限于以下技能:自动化脚本、TCP/HTTP 协议、抓包、爬虫、加密学、图像识别(验证码、滑块位置)、汇编、反编译、AST 反混杂。

**要我说我在逆向中学到的不是怎么运用这些东西或把握某个技能,而是训练出必定的阅览与剖析代码才干。**东西与技能总是瞬息万变,但阅览与剖析代码才干却是实实在在,原封不动的,也是逆向中最值得学习的。

有触摸过 CTF 想必再了解不过逆向工程的技能面广了。

越来越多的网站或运用程序不断加强安全防护,未来只会越来越难逆向。

逆向剖析,说白话便是去看别人的代码,进行一些修正手法,到达自己想要的意图。比方修正某个软件的标题或作者信息、将别人的代码“偷”过来用、爬取某些网站或软件的数据。

可是随着现在越来越多潜在的安全问题,许多结构底层,服务厂商,都会对一些或许有安全问题的代码进行正告或许底层处理。比方运用 ORM 结构能够有效防止 SQL 注入,前端结构中触及 XSS 进犯也会有相应的错误提示与处理,再如浏览器跨域以及跨站点 cookie 不共享,都是为了用户的安全而去考虑的。这样的比方有太多了。

简单说说安卓逆向的进程:拿到一个 Apk,发现有加壳(给代码加固让逆向者不易于看到源代码),这时候就需求经过脱壳才干查看到源代码;此刻就算脱完了壳,接下来或许将面临经过混杂过的代码,这份代码难以用人眼去阅览,不调试运转,单靠静态剖析很难剖分出东西,这时候或许就要凭借 AST 对代码进行复原;复原完了合作动静剖析将代码给扣出来,而在剖析的时候或许又有各种检测,比方抓包,反调试以阻碍逆向进展;最后就算逆向作业都做完了,代码也扣下来了,还要测验运转扣完的代码,这时候极大或许还不用定能运转,然后又要回头看看究竟那一步做错了。

能够说逆向的作业便是不断地调试,不断剖析,终究拿到想要的成果。整个进程能够说十分耗时且折磨人,心智假如不行强壮,真的简单劝退(我当下耐性也早不如最初了)。可是得到终究的意图,将十分爽,成就感爆棚,相当于一个解了几小时的题,终究被霸占的感觉。

前阵子在逆向圈中,看到过一张图,大致也把我的逆向学习流程也表达了出来,终究我的逆向学习也的确止步在 Flutter 上。

2022年终总结——从逆向转向Web开发

上面所说到的逆向技能中,例如加壳,代码混杂,反调试,风控等等,都是阻碍逆向手法。相同关于爬虫罢了,一般会采取反爬办法,包括但不限于封 IP、封账号、JS 参数加密、代码混杂、浏览器指纹、TLS 指纹、验证等。而且防护手法能够说是越来越多,逆向的难度也就越来越大。而且在服务开发那儿只需求修正一点东西,逆向或许就需求从头再来一遍。

未来逆向的难度只增不减,但薪资可不用定确保这趋势。

风险

从上面也不难看出逆向常常与安全挂钩,假如一个网站或软件不是那么好被逆向,那么直接说明安全性是比较高的。可一旦触及到安全,一起又是互联网,就免不了网络安全与法令相关的风险。

在大大都逆向的目标(网站,软件)中,大都都是别人的劳作产品,当你未经别人答应的情况下,去爬取别人的数据,或是修正一些版权信息再次发布出来,就归于不合法行为。实质和未经别人答应,偷人家的东西性质是一个样的。而且在有防护办法的情况下,绕过网站防护办法获取数据归于违背权利人志愿读取、收集数据,将有较大或许被认定为对计算机信息系统的 “侵入”。

要知道在逆向的职业中,有许多都是擦边灰产,至少我地点的逆向圈是这样的,抱着【仅供学习为参阅,请勿用于不合法用途】的想法做逆向工程。路子极易走歪,很少能够正常去走安全岗位的。相信你应该能看到许多相似的案子,如【某某程序员因不合法侵入 xx 网站,获刑 x 年】。这不是危言耸听,现在国家对网络安全以及不合法数据获取的冲击力度,也将决定了这些案子将会越来越多,爬虫逆向也将会越来越邢。

本身因素

简单介绍完我以为爬虫和逆向的观点后,再来说说本身因素。

更想写代码,而不是看代码

我是很享受写代码的进程,一份高质量的代码会让人赏心悦目。我为此特意学习下设计方法、重构技巧以及 TDD 测验。这些在逆向中根本难以触及,可是这些对开发的体会和代码的健壮性都是十分重要的,也是让我个人觉得技能有所提高的技能点。

在逆向剖析中,大部分时刻都不是在写代码而是在看(剖析)代码,而反编译出来的代码,很有或许是带有混杂过的代码,而你想要剖析这一块代码的效果,只能去一步步调试,将代码啃下来,然后推断运转时某变量的值,或是某个函数的效果。

虽然说开发岗位中,有许多情况下也是在看代码的日子中度过的,但比较反编译阅览代码而言,至少不至于那么晦涩难明。

更想碰新技能,而不是旧技能

其次,在逆向剖析中,遇到的网站或软件所用的技能一般都是较为稳定成熟的技能,而这些技能往往不是很新,因而需求去了解许多旧的技能,但这些旧技能只是只对逆向剖析有用,甚至过段时刻很有或许就会遗忘。而且要了解的旧技能还不少,学得将会特别杂。

而我又是一个喜新厌旧的人,对任何新鲜事物都抱有猎奇测验的情绪。我终将以为旧的技能被淘汰是早晚的问题,新技能的出现必定不是平白无故的出现,必定是为了处理某些问题而诞生的,如性能,开发体会,安全等等。

这儿有篇我对新技能的观点,引荐阅览一番。深谈个人对新技能的观点 – 愧怍的小站

更想开源,而不是闭源

在逆向开发,不,是在灰产开发中,有许多代码是别指望开源出来的,这背后会触及到商业利益或是版权等问题。一旦代码放出来,将意味着你的代码将有很大的或许被别人利用做坏事,终究甚至祸及到自己。所以大大都情况下,你八成只能将自己的运用发布出去,而不是将源码开源,一般也就带有商业化的性质。

我想任何开发者必定是希望自己的代码走的更远,走的正规,而不是被拿来做违背本身志愿的作业。

开源不仅能为自己提高一些技能知名度,展现本身技能的一面,一起代码被别人运用与认可,这番成就感就足够持续坚持开源下去。由于我有许多技能都是经过开源项目中学到的,所以我能感遭到开源带来的魅力,也是关于前人的崇拜,想走开源的原因。

由于淋过雨,所以很想为别人撑把伞

小结

其实在本年出面我还特意复习了一波安卓逆向,为了更深化了解了更底层的常识与东西(当然现在忘得也差不多了),因一些特别原因我的电子设备不在了,别问,问便是坏了到现在还没修好。就导致我的编程语言环境,逆向东西,虚拟机配置,代码等数据直接灰飞烟灭,也让我停滞了 1 个月的学习。

我想这才是我从逆向转 Web 开发的最重要的理由了。

逆向的学习对我开发有很大的协助。例如开发中的安全问题,我在开发中都会时刻考虑去考虑该问题。如加壳、SQL 注入、代码混杂、接口限流、接口幂等性(Fiddle R 包)等等安全性问题。

我庆幸我学过逆向,让我学到许多在开发中比较难学到的技能,如调试,阅览源码,而这些也是绝大大都 Web 开发者都欠缺的才干。

逆向应该就暂以告终,未来会有很长的一段时刻,甚至今后不再触摸深化专研逆向。

每当回想,【其时那么难的加密算法都能搞得定,开发一个功用还能有多难】,坚持着这种心态,也让我坚持着开发。

也是逆向激起我对编程的爱好,能够说没有触摸逆向开发,我也不太或许会触摸到 Web 开发。

但 Web 开发就必定好吗?

上面临逆向的观点仅个人剖析而言,可是 Web 开发就必定好吗?我不敢下必定的必定,不同人不用定合适相同的技能,可是我特别看好 Web 技能(尤其是 JavaScript,偏前端向),以下是我看好的点。

运用性广

现在仍有许多人还停留在 JavaScript 只能编写前端页面的水平,自从 Node.js 问世,现在绝大大都的运用都能够运用 JavaScript 进行编写。

换句话说,只要你会 JavaScript 就能够编写许多运用了。有个在国外经常被运用的一条和 JavaScript 有联系的著名规律:

Atwood 规律:任何能够用 JavaScript 编写的运用程序,终究都会用 JavaScript 编写

Web 前端开发不用多说,现在还得用 JavaScript 来编写。而后端开发经过 Node.js 也有一己之力。近几年特别流行跨渠道开发,也便是一份代码,多端运转。

运用 React Native 或是 Uniapp 这样的前端运用结构,顺带去了解一下相应渠道的 API,就能够编写出安卓或 IOS 运用,做过小程序开发必定知道小程序的技能栈就运用到前端开发的技能栈,假如你会前端开发,就能很轻松的上手小程序开发了。

而且越来越多的软件都是网页版优先,然后再经过 Electron 这样的跨渠道处理方案,完成不同渠道间的程序。比方 Vscode,Typeorm 等等便是其间的佼佼者。

不过实质上都是在不同运用的渠道上套浏览器的壳,然后接入一些该渠道的接口,因而遍及运用的体积与内存都相对比较大,与原生比较自然是略逊与原生,不过这点性能上的差异在现在硬件升级如此遍及的物质日子也显得微乎其微了。

但凭借浏览器自带的跨渠道性,你所编写的运用能够十分轻松的让别人拜访,只需求用户有个浏览器,而且经过上述跨渠道的处理方案,也能够有效的将你的 web 运用转成其他渠道的运用,而不是在消耗时刻与精力去编写另一套代码。

在一些技能文档上,会有 API/SDK 的支持,而绝大大都都支持运用 JavaScript/Node.js,或许该功用本身并不是运用 JavaScript 来编写的,但完全能够经过 JavaScript 来轻松调用该功用。而且现在 JavaScript 生态如此巨大,你不用忧虑库/包的问题,npm 作为世界上最大的开放源代码的生态系统(包管理器),在这儿你几乎找得到你所想要的库/包。

此外有越来越多的第三方服务渠道(一般称 Fass,函数即服务),专门供给数据接口与用户鉴权,如 firebase/supabase 或是国产的云开发产品(如小程序)。前端程序员只需求专心与业务代码,凭借第三方开发渠道,就能够编写一个高可用的运用。反而也衬托了,Web 开发好像能够没有后端,但必需求有前端的观念。

作业量将越来越多

这句话的意思或许有点加班那滋味,但我所要表明的是能够做的作业多了,意味着你的作业量增加了,一起你的编码价值也就提高了,不过实践价值(工资)的话不用定提高,由于这首要看老板和地区。

怎么了解呢,我举几个比方。

现在大部分的 web 运用都选用前后端别离的方法,但在从前则是由后端经过模板语言烘托成 HTML 直接返回,经过前后端别离的方法,前端只需求专心页面交互的编写,而后端只需求确保接口可靠性。而且前后端别离也有一个特别明显的特色,能十分有效的节约服务器的资源,本来服务器的烘托动作迁移至客户端来做。或许有人会说,那这样 SEO 优化该怎么办,这不就有了 Next.js、Nuxt.js 这样的 SSR(服务端烘托) 结构,而这些作业,也是前端要做的。

而且越到后边你越能感觉到客户端(前端)远比服务端(后端)做的东西来的多,比方开发阶段的数据 Mock,前端国际化,设计原型等等。之所以会有这种感觉,或许是由于我的大部分开发都是前端,这儿你也能够回想当下的作业量与从前比较是多了仍是不变。

技能更新快

前端真的是每隔一段时刻,必定会出一些新的技能,也不由让不少前端学习者感叹真的学不动。但伴随着新的技能出现,必定会有新的岗位与时机,这也是我看好前端的一个点。

不过这种时机在国内不太多见,反而在国外特别遍及。 多的不说,自行体会。

忘掉从哪看到的一句话:“前端工程师的一大焦虑:永久能(且必需求)看到许多前沿的技能,但自己手上的活儿跟不上,导致眼高手低。”

不只是前端,做技能这行的,必需求跟着技能发展的角度,而且要时刻重视最新,主流的技能。


有关 Web 开发的一些想法与感悟就写到这,其实还有蛮多可写的,比方挑选 Vue 与 React?为什么是 JavaScript?有太多自我详细询问的话题了,不过由于当下时刻相对紧迫,有时机的话再续写吧。

综上,也便是我看好 Web 技能的几个点,也答复了我未来的方向。希望这些能够协助一些不知抉择方向的同伴。

在实践中学习

回忆整个技能栈,根本都是在项目实践中不断学习。或许是由于逆向的原因,由于逆向根本上都是靠实战出来的,导致我的学习道路也趋于实践。

不过在我看来,写项目是最直接能体现出所想学的技能。我在学习一门新技能时,我一般会用项目或许博文的方法来总结我的学习进程。我也愿意花时刻在这上面,并将其共享出来。当有其别人也在学习这门技能时,看到该项目或博文,我就以为十分有意义。

我在学任何一门技能,会运用该技能写点东西;换言之是为了写点东西,而去学点不一样技能。

技能心态的改变

现在来看,的确没那么想写代码,尤其是那种作业量大,重复性强的代码,而编写这些代码,其实与搬砖无任何区别,实质也是重复性与劳作性的任务。

从前或许是由于触摸得比较少,关于许多软件背后的原理及完成一概不知,所以看到啥就都想写写看,终究许多项目都成为半成品。

而随着越深化的学习,反而自己所想完成的东西,前人都现已帮我们完成好了。完全能够借用前人的代码,在此基础上学习与运用,而不用从头再来,消耗许多不用要的时刻。

到最后为了完成一开端所想完成的东西,不用再费尽心思,去开源社区搜寻一番,总能找到与自己所要完成的相似的产品,此刻只需求会看,会改,总能到达自己终究要完成的东西,有时候自己也称为了别人口中的 CV 工程师。

也正因如此,写代码的愿望就不再那么强烈。许多自以为无意义的代码或许是今后都不用定用得上的代码就少写了许多。于是乎缺少了许多自我思考与专研的时刻,虽然也的确节约了许多不用要的时刻,加快终究功用的完成,但这便是自己想要的编程日子吗?或许说这便是绝大大都人的编程日子。

结语

本年的年终就告一段落,与之前的年终总结比较,篇幅缩减了许多,首要感觉之前写的挺多流水账的,废话挺多的。也有一点是由于时刻相对紧迫,其实 12 月我还没放假,都处于线上上课,线上考试的状况,而线上考试的方法我就不得吐槽了,提前打印给定的答题纸,标题以电脑的方法展示,终究将答案手写到答题纸上并经过手机扫描(扫描全能王)成 PDF 的格局提交,当然摄像头必定也是有的。总归麻烦事仍是有的,还没到彻底闲下来闭关学习的时候。

按往常或许还有下一年的规划,但我现在以为许多时候都难以按照本身志愿干事,而规划正好自己所设想夸姣的计划,很简单适得其反。由于回忆过往的规划,有太多夸姣的计划,但在实践剖析下也将变得不堪一击。不止项目需求可行性剖析,人生计划相同需求,一些天马行空幻想,其实就不再有意义去记录了。

坚持做自己想做的作业,而不是逼自己做不愿做的作业。这是我编程学习中座右铭,也是给予别人编程学习的主张。

发布在掘金上的文章精简了一些内容,完好原文地址: 2022年终总结——逆向转Web开发 – 愧怍的小站