- 博客(64)
- 资源 (6)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 使用Frida在Windows中拦截C++函数
Frida是一款基于Python+javascript的Hook框架, 可运行在Windows、Android、iOS、Linux、MacOS全平台系统中,主要使用了动态二进制插桩技术。
2023-10-10 23:29:57
458
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 国外某地图APP坐标系加解密算法还原
本文主要记录了逆向分析国外某地图APP的坐标系加解密算法的还原过程, 从抓包特征开始, 一步一步定位到关键加解密函数, 在加解密函数分析过程中遭遇ARM NEON向量指令集, 不得不使用动态调试定位该指令集处, 但又遭遇反调试,导致加载目标进程直接退出, 之后开始分析反调试过程, 针对性的进行打补丁, 通过动态调试终于拿到ARM NEON向量指令集四轮密钥变换之后保存在内存中的关键密钥,并使用函数参数HOOK方式拿到加密字符串和解密字符串, 这样我在本地将算法还原后可以验证还原的算法是否准确。
2023-09-21 23:33:36
375
原创 裁员降薪如果影响到你,可能还是你的问题
今年以来,看到的裁员风波一茬接一茬,普遍的论调都是IT行业不行了, 总之就是一片哀嚎、惨不忍睹。最近身边的一些朋友也接连传出部门被优化、被裁员的消息, 说实话我自己也被这种寒意给触碰到, 每天也加强了自己的学习频率,甚至把回家路上的碎片时间也利用起来, 目的不在于临时抱佛脚来提升自己的抗风险能力, 这种临时行动对于当前的形势本身意义不大, 这样做的目的还是为了进一步提升自己的思想认知, 看看当前的状态还有没有进一步优化和改进的地方。在本篇文章中, 我自己总结了一个滚雪球原型, 如果能维持原型中的状态, 我相
2023-11-29 20:13:15
134
原创 在Rust中处理命令行参数和环境变量
Rust的命令行和环境变量处理在标准库中提供了一整套实现方法, 在本文中除了探索标准库的使用方法之外, 也在不断适应Rust独有的语法特点。在本文中, 我们通过标准库函数的返回值熟悉了迭代器的使用方法, 操作迭代器精确控制保存的内容, 包括字符串和键值对的使用方法。
2023-11-28 16:45:13
1306
原创 在Rust中编写自动化测试
Rust中的测试函数是用来验证非测试代码是否是按照期望的方式运行的, 测试函数体通常需要执行三种操作:1.设置任何所需的数据或状态;2.运行需要测试的代码;3.断言其结果是我们所期望的。本篇文章主要探讨了Rust自动化测试的几种常见场景。
2023-11-27 17:02:37
733
1
原创 用Go自定义生成带中心图片二维码
本篇文章主要介绍使用Go语言生成自定义带中心图片的二维码方法, 该二维码生成支持用户自定义输入五项参数,包括:扫码之后自动跳转的URL地址、在二维码中心显示图片的保存路径、二维码图片的大小参数和最终生成二维码的宽度和高度大小。通过对该程序的改造, 可利用Go语言的多协程在短时间内生成多个二维码, 并且都是可定制化的。
2023-11-26 23:36:47
1371
原创 优秀软件设计特征与原则
一款软件产品好不好用, 除了拥有丰富的功能和人性化的界面设计之外, 还有其深厚的底层基础, 而设计模式和算法是构建这个底层基础的基石。好的设计模式能够让产品开发快速迭代且稳定可靠, 迅速抢占市场先机;而好的算法能够让产品具有核心价值, 例如字节跳动公司旗下的抖音、今日头条等众多产品以算法起家, 能够智能根据用户喜好精准推送其感兴趣的内容。在本章节中, 将对软件设计模式的相关知识进行总结, 为后面的学习打下基础。
2023-11-25 10:10:54
1773
原创 详解Rust编程中的生命周期
生命周期在Rust编程中是一个重要概念, 它能确保引用像预期的那样一直有效。在Rust语言中, 每一个引用都有其生命周期, 通俗讲就是每个引用在程序执行的过程中都有其自身的作用域, 一旦离开其作用域, 其生命周期也宣告结束, 值不再有效。幸运的是, 在绝大多数时间里, 生命周期是隐含且可以进行推断的, 类似于当有多种可能的类型时必须注明类型, 正因为如此, 所以Rust需要使用者使用泛型生命周期参数来注明它们的关系, 从而确保程序运行时实际使用的引用绝对有效。
2023-11-24 13:39:56
881
原创 低成本打造便携式无线网络攻防学习环境
一直以来, 无线网络安全问题与大众的个人隐私息息相关, 例如: 为了节省流量, 连接到一个看似安全的免费WiFi, 在使用过程中泄露自己的各类密码信息甚至银行卡账号密码信息。随着家用智能电器的普及, 家中的各类智能设备连入家里的无线网络, 却突然失灵, 甚至无法正常连接上网络。本文将从研究的角度搭建一个专门用于无线网络安全探索的实验环境。
2023-11-22 19:30:26
311
原创 弄懂Rust编程中的Trait
trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 trait 以一种抽象的方式定义共享的行为。可以使用 trait bounds 指定泛型是任何拥有特定行为的类型。
2023-11-21 13:49:41
999
原创 在Go编程中调用外部命令的几种场景
在很多场合, 使用Go语言需要调用外部命令来完成一些特定的任务, 例如: 使用Go语言调用Linux命令来获取执行的结果,又或者调用第三方程序执行来完成额外的任务。在go的标准库中, 专门提供了os/exec包来对调用外部程序提供支持, 本文将对调用外部命令的几种使用方法进行总结。
2023-11-18 20:54:04
1005
原创 在Rust编程中使用泛型
Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以用于多种不同的具体数据类型。下面的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。
2023-11-17 15:50:46
640
原创 现代主流浏览器集成的6大安全技术
浏览器已经成为人们访问互联网必不可少的工具。作为用户访问互联网的主要工具,浏览器自然成为网络攻击者和安全研究人员的重要目标。一方面,互联网的快速发展吸引了众多厂商参与到浏览器市场份额的争夺战中, 他们不断丰富浏览器功能并提升浏览器的安全性。另一方面,浏览器安全又与Web安全标准紧密相关, 厂商在提升浏览器安全性的同时也积极参与安全标准的制定, 使自己的产品获得竞争优势,而新的安全标准又促使厂商积极更新自己的产品, 以免被市场淘汰, 这样便形成良性竞争, 使浏览器在安全性各方面越来越趋于完善。
2023-11-15 12:38:19
486
原创 用Go实现yaml文件节点动态解析
在大多数Go语言项目中, 配置文件通常为yaml文件格式, 在文件中可以设置项目中可灵活配置的各类参数, 通常这类参数都是比较固定的, 可以将其映射为对应的结构体在项目中进行使用, 如果需要调整参数时, 只需要增减结构体参数字段内容即可。
2023-11-14 18:08:57
1507
原创 Rust编程中的共享状态并发执行
虽然消息传递是一个很好的处理并发的方式,但并不是唯一一个。另一种方式是让多个线程拥有相同的共享数据。在学习Go语言编程过程中大家应该听到过一句口号:"不要通过共享内存来通讯"。
2023-11-13 17:31:00
718
原创 Rust编程中的线程间通信
为了实现消息传递并发,Rust 标准库提供了一个 信道(channel)实现。信道是一个通用编程概念,表示数据从一个线程发送到另一个线程。
2023-11-12 19:56:34
789
原创 用Go实现网络流量解析和行为检测引擎
本次用Go语言实现的网络协议解析功能是基于Google公司开发一个开源库:gopacket, 该库帮我们完成了网络协议的一些底层封装, 它允许我们能够捕获、解析和处理网络数据包, 与Wireshark一样,也支持对离线抓包文件的分析。gopacket库提供了一系列功能,包括:数据包捕获、解析和构建, 以及对多种协议的支持,如:Ethernet、IP、TCP、UDP、HTTP等。它还提供了方便的API, 以帮助开发者操作和分析网络数据包。
2023-11-10 17:02:11
1973
原创 在Rust中使用多线程并发运行代码
在大部分现代操作系统中,已执行程序的代码在一个 进程(process)中运行,操作系统则会负责管理多个进程。在程序内部,也可以拥有多个同时运行的独立部分。这些运行这些独立部分的功能被称为 线程(threads)。例如,web 服务器可以有多个线程以便可以同时响应多个请求。
2023-11-09 23:13:37
601
原创 Rust结构体的定义和实例化
Rust的结构体跟元组类型比较类似,它们都包含多个相关的值。和元组一样,结构体的每一部分可以是不同类型。但不同于元组,结构体需要命名各部分数据以便能清楚的表明其值的意义。由于有了这些名字,结构体比元组更灵活:不需要依赖顺序来指定或访问实例中的值。
2023-11-08 23:33:38
514
1
原创 利用Ansible实现批量Linux服务器安全配置
在本章节中, 我将利用Ansible的剧本来实现更实用、更复杂一点的功能, 主要功能包括三个:1.同时在三台服务器中增加IP访问控制,只允许192.168.201.202的IP登录,其它IP禁止其通过SSH登录。2.修改SSH服务的默认22端口,修改为2222。3.启动防火墙,只允许2222端口访问, 不允许其它端口访问。
2023-11-07 23:50:18
1197
原创 Rust编程基础之引用与借用
在上一章节最后的代码中, 我们必须将 String 返回给调用函数,以便在调用 calculate_length 后仍能使用 String,因为 String 被移动到了 calculate_length 内。相反我们可以提供一个 String 值的引用(reference)。引用(reference)像一个指针,因为它是一个地址,我们可以由此访问储存于该地址的属于其他变量的数据。 与指针不同,引用确保指向某个特定类型的有效值。
2023-11-06 19:51:56
589
原创 初步利用Ansible实现批量服务器自动化管理
Ansible是一款开源的自动化运维工具, 在2012年由Michael DeHaan创建, 现在由Red Hat维护。Ansible是基于Python开发的,采用YAML语言编写自动化脚本playbook, 可以在Linux、Unix等系统上运行, 通过SSH协议管理节点, 无需在被管理节点安装agent。Ansible以其简单、高效、无agent成为广泛使用的自动化工具, 可以应用于配置管理、应用部署、任务调度等。
2023-11-05 20:28:04
928
原创 Rust编程基础核心之所有权(下)
在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。如果我们 确实 需要深度复制 String 中堆上的数据,而不仅仅是栈上的数据,可以使用一个叫做 clone 的通用函数。
2023-11-04 22:37:37
707
原创 Rust编程基础核心之所有权(上)
Rust 的核心功能(之一)是 所有权(ownership)。虽然该功能很容易解释,但它对语言的其他部分有着深刻的影响。所有程序都必须管理其运行时使用计算机内存的方式。一些语言中具有垃圾回收机制,在程序运行时有规律地寻找不再使用的内存,例如:Java、Go;在另一些语言中,程序员必须亲自分配和释放内存,例如:C、C++。Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。如果违反了任何这些规则,程序都不能编译。在运行时,所有权系统的任何功能都不会减慢程序。
2023-11-03 23:12:10
739
原创 Rust编程基础之条件表达式和循环
本章主要介绍了Rust的条件表达式和循环的使用方法,通过结合代码和执行结果可以很清楚的了解其实现方式和执行过程
2023-11-03 21:35:50
553
原创 一款快速获取目标网站关键信息的工具
今天要介绍的这款工具是一个快速收集网站信息的开源脚本, 采用Python语言编写, 该工具可以快速收集网站的页面标题、网站上次更新日期、DNS信息、子域、防火墙名称、网站使用的技术栈、证书等信息, 默认支持对验证码和JavaScript内容执行绕过操作。
2023-11-02 23:50:16
213
原创 Rust编程基础之函数和表达式
在之前的文章中,我们已经见到了一个函数:main函数, 它是很多程序的入口点。也见过 fn 关键字,它用来声明新函数。
2023-11-02 18:52:19
325
原创 绕开网站反爬虫原理及实战
在本文中,我首先对网站常用的反爬虫和反自动化技术做了一个梳理, 并对可能能够绕过这些反爬技术的开源库chromedp所使用的技术分拆做一个介绍, 最后利用chromedp库对一个测试网站做了爬虫测试, 并利用chromedp库绕开了爬虫限制,成功通过程序自动获取到信息。在测试过程中,顺便对chromedp库经常使用的一些API做了一些调用尝试。
2023-11-01 22:06:48
2122
原创 Rust编程基础之6大数据类型
在 Rust 中, 每一个值都属于某一个 数据类型(data type), 这告诉 Rust 它被指定为何种数据,以便明确数据处理方式。我们将看到两类数据类型子集:标量(scalar)和复合(compound)。
2023-11-01 17:26:23
471
原创 Rust编程基础之变量与可变性
在Rust语言中, 变量默认是不可改变的(immutable), 这是Rust提供给我们的众多优势之一, 让我们可以充分利用Rust提供的安全性和简单并发性来编写代码。
2023-10-29 22:29:21
380
原创 为什么现在学Rust编程是最好时机?
Rust是由Mozilla主导开发的通用、编译型编程语言。设计准则为:安全、并发、实用,支持函数式、并发式、过程式以及面向对象的编程风格。Rust的设计目标之一,是要使设计大型的互联网客户端和服务器的任务变得更容易,因此更加强调安全性、存储器配置以及并发处理等方面的特性。
2023-10-27 17:52:09
508
原创 在Go项目中封装AES加解密客户端接口
在一个中型以上的项目中, 我们一般会在项目工程中开辟一个pkg文件夹用来存放一些基础工具接口,比如:数据库、中间件、加解密算法、基础协议等等。在这篇文章中, 我主要分享一下在基于Go语言的项目中, 加解密算法中如何封装一个通用的加解密接口, 并以使用比较广泛的AES加解密算法实现为基础进行讲解, 最后模拟客户端分别演示调用AES的加密接口和解密接口。
2023-10-26 19:27:08
458
原创 在Go项目中二次封装Kafka客户端功能
在上一章节中,我利用Docker快速搭建了一个Kafka服务,并测试成功Kafka生产者和消费者功能,本章内容尝试在Go项目中对Kafka服务进行封装调用, 实现从Kafka自动接收消息并消费。
2023-10-25 19:18:11
869
原创 Linux下利用Docker快速部署Kafka
在本文中,介绍了利用Docker安装Kafka的基础环境要求; 利用Docker安装zookeeper过程; 利用Docker安装Kafka过程;进入容器配置生产者和消费者过程; 演示生产者和消费者通讯; 故障排查方法。
2023-10-23 13:12:36
262
原创 Go语言中鲜为人知的高级构建选项
以上例子是在MacOS系统上生成了一个在64位Linux系统上运行的二进制程序,其中GOOS指定了操作系统, GOARCH指定了CPU架构。可以看到确实没有生成二进制程序,因为最后少了mv和rm -f的操作,直接打印了Hello World, 说明程序直接编译后运行了。可以看出,加上参数后,体积比之前少了0.5MB。在实际项目中,可以加上该参数编译出Release版本的程序用于生产环境。该命令将验证该二进制程序的执行CPU架构,如图。
2023-10-22 15:01:22
150
原创 记录Go语言空结构体的使用场景
Go语言的空结构体有两种定义方式:# 匿名空结构体# 命名空结构体空结构体主要有以下几个特点:(1).零内存占用 - 在内存优化方面非常有用(2).地址相同 - 无论创建多少个空结构体,它们所指向的地址都是相同的(3).无状态 - 在表示无状态的对象或情况时非常有用。
2023-10-13 11:18:11
77
原创 记录微服务的使用场景拆分标准和流行框架
Spring社区提供的微服务框架,基于Spring Boot构建,包含Eureka、Zuul、Feign等组件。如Istio、Linkerd等服务网格实现,专注微服务间通信治理。综合考虑业务、技术、运维等因素,合理规划微服务边界,既要高内聚同时又要低耦合。这些架构各有侧重,可根据业务需求,团队技术栈选择适合的微服务实现方案。按业务领域划分微服务,可以提高各团队的开发、测试、发布效率。容器集群管理系统,提供服务发现、负载均衡等微服务运维能力。使用微服务可以拆分成多个子服务,实现更好的横向扩展能力。
2023-10-13 10:29:31
60
原创 记录可能会导致Redis变慢的几个因素
Redis数据都是加载在内存中,如何可用内存不足,会导致频繁内存交换和清除,使Redis响应变慢,可以通过监控Redis内存使用情况,并适当增加分配的内存。如果看到Redis运行时延迟是其基线性能的2倍及以上,则可以认定Redis变慢了。
2023-10-12 21:23:07
153
翻译 将化学家的经验与AI模型结合进行单步回合成预测
回合成分析是有机化学中的一个关键任务,也是许多重要行业的核心。它主要通过逐步将目标分子分解为商业上可获得的分子来完成。
2023-10-05 08:47:13
97
原创 在Linux系统中利用KVM高性能创建虚拟镜像
本文在Debian12系统上使用KVM分别以图形界面和命令行的方式实现了虚拟镜像的管理。KVM是一种内嵌于Linux内核的开源虚拟化技术, 它可以将Linux系统转变为虚拟机监控程序,使主机计算机能够运行多个隔离的虚拟环境。
2023-09-27 13:10:09
536
iOS平台的应用程序调试与分析
2023-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人