大白话聊聊什么是软件开发 什么是软件逆向

软件如何应用?

你玩过手机吗?你玩过电脑吗?玩过的人都知道想玩手机玩电脑你就得在手机上装软件,比如刷个视频 装抖音装视频播放器,看个文章下载浏览器或者微信关注公众号进小程序。然后你放开了想,你想做的每一件事情,你有的每一个需求几乎都会衍生出大大小小的多款软件 比如跑步记步,出行导航,骑行听书 发消息发视频 包括老色批进入贤者时间的各种神器app。

软件怎么来的?

软件的发展一定与计算机的技术演变有着不可密切联系,这必然会提到计算机之父 冯·诺伊曼。他最著名的贡献是提出了现代计算机的基本设计模型,即“冯·诺伊曼架构”。这个架构描述了一种系统,其中包含五个主要部分:中央处理单元(CPU)、存储器、输入设备、输出设备和控制单元。在这种架构下,程序和数据都存储在同一个存储器中,CPU按顺序执行存储的指令。这个设计成为后续所有现代计算机设计的基础。
随着时间的推移,特别是在20世纪50年代至60年代,随着硬件技术的进步,计算机开始变得更加通用和功能丰富,这直接催生了对更复杂软件的需求。最初的软件是直接用机器语言编写的,这种语言虽然对计算机来说很直接,但对人类编程者来说异常复杂和容易出错。为了解决这个问题,人们发明了汇编语言和高级编程语言,如FORTRAN和COBOL,这标志着现代软件工程的诞生。

到了20世纪70年代和80年代,随着个人电脑(PC)的出现和普及,软件开发进入了一个新的时代。软件开始转向大众市场,满足普通用户的需求。这个时期,操作系统如MS-DOS和后来的Windows,以及各种办公软件和游戏开始普及。

进入21世纪,互联网的快速发展极大地改变了软件的性质和用途。软件不再仅仅是单机应用,而是转向网络化、社交化和移动化。随着智能手机和平板电脑的普及,App(应用程序)成为了软件发展的一个重要趋势,它们通常更加便捷、个性化,并且与用户的日常生活紧密相连。

如今的软件开发

现在的软件应用开发主要集中在手机移动端 主流的两大操作系统 如ios android,开发安卓产品主流的编程语言如java kitlin ,开发苹果的如object c,swift,随着2010年以后开始智能手机的普及 pc端的市场需求逐步下滑,市场上软件开发的主力从pc端转移到了移动端。但是早期应用在pc端的技术为移动端软件的开发作为很好的铺垫,其实说到底都是计算机,几乎直接去操作硬件的底层操作不同而已 ,ios和安卓系统最开始的雏形都是在linux外围开发的,linux最初是天才程序员林纳斯托瓦滋在大学时候开发的玩具 ,后来共享到开源社区 ,有人逐步开始参与到linux的开发社区中来维护linux,经过20多年的发展,linux几乎跑在了每一台终端设备上,如mac笔记本,移动端安卓,ios这都使得linux成为了众多软件运行的基石。

软件如何从无到有然后跑起来呢

首先需要有操作系统,直接与硬件交互的底层软件(通常由c/c++或者汇编开发)
进程是操作系统和操作系统之上应用软件运行的载体,是操作系统分配资源的最基本单位
这个时候你有一个想法,你想开发一款游戏 ,于是你开始构思你想泡在windows上于是你选择C++作为实现这个游戏的手段,开始学习C++程序设计, 你完成了基础学习。你发现实现贪食蛇你需要通过一个二位数组来记载这个区域贪食蛇和食物的位置,那你要完成逻辑描述,在一个9x9的盘子上 你的位置是0,0,贪食蛇的位置是9,9 ,你思考后得出的结论是你需要向左移动9次,向右移动9次。这个时候问题来了你是先走左边还是先走右边,于是你选择了走左边优先 于是你if判断自己的x坐标是否小于食物x坐标 ,if判断是true 你向走进行移动位置到了1,0,重复刚才的判断if依旧是true 继续向走,循环N次以后你达到了9,0坐标,这个时候你跳出了循环,你的y依旧小于食物的y值坐标 于是你每次向这y轴增加的方向移动。最终贪食蛇吃到了食物,后续贪食蛇的长度加1 食物随机出现在二位坐标的任意空白位置,贪食蛇继续刚才的if判断和for循环,,于是经过你的努力 ,这款游戏终于开发完成了,但是这个时候你做的游戏并不美观,于是你引入了别人开发好的一些代码组件,让你的游戏变得更美观了,你开发结束后,你用编译器将自己开发的游戏变成了二进制,但是你发现你的软件居然100M那么大,但是你写的代码一共就几十行,这就是静态链接,你开发的程序调用了别人的代码,编译器把你的代码与别人的代码打包到了一起,于是就有了100M那么大的贪食蛇,后来你不停的完善自己开发的游戏,直到这个时候你的游戏变成了1G 你想分享给你的小伙伴 ,但是拷贝的好慢啊,这个时候有了一个新点子,有的组件是操作系统本身就会携带,你只需要在运行的时候去系统指定位置动态加载这个组件就行了,于是动态链接库和动态链接就被提出来了。你把静态打包的组件尽可能换成了调用系统组件的动态链接,于是你的代码又回到了100M,这个时候你每次开发一款新的游戏你都可以很快的复制给更多的小伙伴,让他们玩你的游戏。到此总结一下

提出软件需求-到设计软件产品-程序员去编写代码–编译器编译–打包静态依赖库–打包结束

运行–操作系统开始阅读运行你代码的二进制翻译映射到内存 --操作系统创建进程–加载动态链接库----好了你的软件就此就跑起来了。

到这里软件正向开发的介绍大概就完了 这个时候来聊聊软件逆向

什么是软件逆向?

就如开发软件一样 软件开发的反过程就是软件逆向,通常一款被开发的软件是从设计 编码,翻译成二进制,这样计算机才能读懂程序所想表达的含义。逆向开发的过程就是将操作系统执行的软件从二进制通过反向汇编,还原成开发时的代码。对开发者来说,他们更希望自己代码不会被别人篡改,对于逆向的开发者来说,他们希望通过反汇编还原代码,再将代码修改二次编译打包抛给计算机执行,比如你使用的很多盗版软件,破解软件。还有一种行为是通过反编译软件然后进行分析,通过进程注射的方式来干扰被感染软件的行为,成为外挂。

哪里有软件逆向?

比如写代码的都知道 jetbrain编辑器盗版系列,你玩的植物大战僵尸阳光无限版,再比如网游外挂等等,带有灰色地带行为的软件几乎都会有逆向的影子,但是逆向也不全是坏事,比如通过逆向分析,你知道某款软件的漏洞,你站在逆向的角度,反逆向方面你有了更深入的思考知道如何去保护软件产权。

逆向从0开始做了什么?

1.那你大概大概懂一些正向开发,比如写一个简单的hello world 知道某个小软件在计算机中运行大概需要经历那些过程
2.学习反编译工具 当前互联网上几乎80%的流量都跑在移动端,此处以安卓为例
2.1那你需要一款反编译软件 如jadx ,jeb, gda, apktool等 通过反编译你会看到安卓的反编译代码
2.2接着就是一款抓包工具 如charles ,fiddle wireshark等等 分析网络请求包
2.3有了抓包工具 反编译工具 你还需要一个插桩工具 目前比较火的就是frida 通过看app代码逆向分析网络请求,通过注册进程打印一些日志去验证猜想,最后完成修改app或者抓取到数据的目的
2.4虽然很难 但是很有趣,

总结

不管是软件的正向开发,逆向开发,就是在这样的博弈中,我们的操作系统越来越安全稳定。也感谢每一位从事技术的程序员默默写代码,为我们塑造了如今五彩滨纷的世界。

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值