草庐IT

聊一聊对一个 C# 商业程序的反反调试

一:背景1.讲故事前段时间有位朋友在微信上找到我,说他对一个商业的C#程序用 WinDbg 附加不上去,每次附加之后那个C#程序就自动退出了,问一下到底是怎么回事?是不是哪里搞错了,有经验的朋友应该知道,其实这是 商业程序 的反调试机制捣鬼的,为了保护程序隐私,一般都不希望他人对自己做逆向分析,那能不能破解它的反调试呢?当然是可以的,难易程度就看对方的诚意了。经过和朋友的技术捣鼓之后,发现还好,对方只是用了 KERNELBASE!IsDebuggerPresent 做的反调试判断,难度不大,这里就不细聊那个程序,我们做一个简单的案例来说下如何反反调试,老规矩,上WinDbg说话。二:WinDb

【0236】聊一聊PG内核中的命令标签(Command Tags、CommandTag、tag_behavior)

1.什么是命令标签(CommandTags)当客户端向PG服务下发一个请求时,postgres进程在读取到用户的请求缓冲区之后,需要对从中解析出用户的具体请求,比如:CREATETABLE、CREATEDATABASE、DROPTABLE、SELECT等具体操作,这里除了会用到后面即将讲的词法分析解析器flex之外,还会用到一个很重要的模块(tcop,完整路径如下:src/include/tcop),该路径下的头文件定义了PG数据库内核所能够识别到的所有SQL关键词。1.1命令标签列表相关头/源文件:头文件:cmdtag.hsrc\include\tcop命令标签名称和枚举的声明。【重点】cm

聊一聊大模型

事情还得从ChatGPT说起。2022年12月OpenAI发布了自然语言生成模型ChatGPT,一个可以基于用户输入文本自动生成回答的人工智能体。它有着赶超人类的自然对话程度以及逆天的学识。一时间引爆了整个人工智能界,各大巨头也纷纷跟进发布了自家的大模型,如:百度-文心一言、科大讯飞-星火大模型、Meta-LLama等那么到底多大的模型算大模型呢?截至目前仍没有明确的标准,但从目前各家所发布的模型来看,模型参数至少要在B(十亿)级别才能算作入门级大模型,理论上还可以更大,没有上限。以上只是个人理解,目前还没有人对大模型进行详细的定义。来一张图我们了解一下大模型的发展历程,从图中可以看到所谓大模

聊一聊go的单元测试(goconvey、gomonkey、gomock)

文章目录概要一、测试框架1.1、testing1.2、stretchr/testify1.3、smartystreets/goconvey1.4、cweill/gotests二、打桩和mock2.1、打桩2.2、mock2.2.1、mockgen2.2.1、示例三、基准测试和模糊测试3.1、基准测试3.2、模糊测试四、总结4.1、小结4.2、其他4.3、参考资料概要软件测试是一个很宏大的概念,单元测试、集成测试、系统测试、黑盒测试、白盒测试、功能测试、性能测试、基准测试、压力测试等等都是软件测试下面的一种子概念。作为一名开发者,我们并不要理解每一种测试概念,但基准测试和单元测试在软件编写过程中

聊一聊几款主流消息队列之间的差异,我们应该如何选择

为什么需要消息队列消息队列是历史最悠久的中间件之一,它可以和不同的进程进行通信,从而实现上下游之间的消息传递。基于此特性,我们可以在以下三个场景中使用消息队列。解耦;限流;流量削峰;1)解耦先来看解耦,假设有两个服务:A和B,当服务A依赖服务B时,请求的耗时就是这两个服务之和。但如果服务B耗时比较长怎么办?显然这时服务A可以将消息发送到队列中,服务B从队列里面去取即可,从而实现两个服务之间的逻辑解耦 + 物理解耦。当用户注册账号时,会将注册信息发给账号服务,账号服务将信息写入数据库后,会调用短信服务给用户发送短信。如果不使用消息队列,那么必须等短信发送成功之后才能返回。但为了给用户更好的体验,

聊一聊九种 API 测试类型

在软件开发世界中,API(应用程序编程接口)扮演着至关重要的角色。它们使不同的软件组件能够相互通信,为应用程序提供了灵活性和连接性。然而,要确保API正常工作,需要进行各种类型的测试。本文将详细介绍9种常见的API测试类型,以帮助初学者更好地理解和应用这些测试方法。API测试是什么?API测试是一种验证和评估API性能、功能和安全性的方法,以确保它们按照预期工作。无论您是开发人员、测试人员还是对API负有管理责任的专业人士,了解这些测试类型都将对您的工作和项目的成功至关重要。1.冒烟测试(SmokeTesting)冒烟测试通常在API开发完成后执行。其目的是验证API是否能正常工作,没有发生故

聊一聊 Python 的换行以及转义

Python里面可以通过换行来标识一行语句的结束,当你在一行的末尾敲击Enter键时,便可开始新的一行语句。name="高老师"print(name)#高老师这段代码很简单,因为 name = "高老师" 后面已经没有内容了,是一个换行,那么就代表这个语句结束了。但是在Python中我们还可以指定分号,表示该语句结束了。name="高老师";print(name);age=18;print(age)"""高老师18"""可以看到当我们在 name = "高老师" 后面指定了分号之后,就代表该语句结束了。但是Python的语法解析并不会直接跳到下一行,而是继续向后寻找,即便当中出现了空格。由于都

三分钟简单聊一聊“行泊一体”

本文经自动驾驶之心公众号授权转载,转载请联系出处。汽车智能化已然成为行业发展趋势,智能驾驶正在加速融入我们的生活,ADAS功能逐渐成为各类新款车型的标配,近年来,“行泊一体”概念也成为行业内热门话题,越来越多的厂商开始着重发力于研发“行泊一体”方案。我们看到,现阶段智能汽车行业正在大规模力推无限接近于L3的L2++或L2.9自动驾驶量产落地。在这一过程中,各种新技术层出不穷,而融合众多新技术的“行泊一体”方案受到车企们的推崇。从本质上来说,行泊一体是行车场景与泊车场景的打通,需要实现包括拥堵跟车、自动变道、高速巡航、上下匝道、自动泊车等一系列技术打通,实现关键技术主要包括感知与定位、决策与规划

聊一聊HTTP/3, QUIC 它们是怎么工作的?

为什么我们需要HTTP/3呢?一个重要原因是解决了“头阻塞”问题。HTTP/2中的头阻塞问题HTTP/2通过帧和流在HTTP级别解决了头阻塞问题。但是,在TCP级别问题仍然存在。在接收来自上层的帧后,TCP会将它们分成段。如果一切顺利,所有段将到达另一端。然而,互联网可能不稳定。在这个过程中,一些段可能会丢失。TCP有一个保证传递的功能。它将接收到的段放入缓冲区,并等待丢失的段重新传输,从而导致头阻塞。为了解决这个问题,我们需要找到TCP的替代品——QUIC和UDP。更新的协议栈从协议栈中可以看到一个重大的变化:TCP被UDP取代。不同于TCP,UDP不保证传递,段之间没有依赖关系。这意味着不

关于OpenHarmony3.1,想随便聊一点

关于OpenHarmony3.1,想随便聊一点作者:坚果公众号:“大前端之旅”华为云享专家,InfoQ签约作者,OpenHarmony布道师,阿里云专家博主,51CTO博客金星博主,开源项目GVA成员之一,专注于大前端技术的分享,包括Flutter,小程序,安卓,VUE,JavaScript。自从三月三十日OpenHarmony3.1发布之后,各方的解读也有很多,我也是在这两天拿到了润和DAYU200的开发版第一时间做了升级,然后做了一些体验,在这里要感谢连志安老师,今天就简短的来说一说自己的看法。首先OpenHarmony3.1Release版本对比前面的几个版本,在标准系统层,主要有以下四