首页
学习
活动
专区
圈层
工具
发布

戴着镣铐起舞,Wine 开发中的净室原则

ReactOS 项目最早始于 1996 年,当时叫 FreeWin95,后来在 1998 年更名为 ReactOS。...值得一提的是,ReactOS 不是基于 Linux,而是一个从零开始编写的操作系统内核和用户态组件,力求在架构上与 Windows NT 系列(如 Windows XP/Server 2003)兼容。...看起来 ReactOS 如果能够发展壮大,就可以打破微软帝国的垄断,那为什么没发展起来呢?...微软过去也曾经对 ReactOS 提出质疑。 正因为存在法律风险,所以没有大型基金会或公司参与 ReactOS 项目的发展,导致社区非常小众,论坛和 IRC 上活跃的开发者和测试用户为主。...文档不完整 Windows API 文档(MSDN)只覆盖一部分常用接口,而且经常模糊不清。 很多“边界情况”文档没写,只能靠写测试程序,一个一个试出来。

22410

不能装 X

我把这段经历以及如何求职客户端软件开发职位的经历和总结放在这里: https://www.zhihu.com/lives/909740192015998976 一、为什么大多数人学 Windows 编程感觉这么枯燥或者痛苦...虽然古怪的匈牙利命名法(下文将介绍)让 Windows 程序看起来有点“中世纪风格”,但另一方面增加了 Windows 程序的可读性和可理解性,后来者不断模仿。...当我们在代码中看到这样的变量时我们无需查看其类型定义。虽然有人说这种命名法已经过时,在后来的很多系统设计上,很多地方可以看到匈牙利命名法。...这种命名法虽然看起来很拖沓,但是表达意思却是非常清晰,尤其是在阅读别人的项目代码或者维护一些旧的项目时,别人能读懂是其他工作的前提。...ReactOS 号称开源的 Windows,其开发团队不仅保持对外的操作系统 API 与官方 Windows 一模一样(名称和特性均一样),同时内核实现也力求和官方 Windows 一模一样。

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    64位内核映射DLL获取Zw函数调用功能号

    其实API很简单.只需要查下文档即可使用 而且在Ring3下也有与之对应的API....那么映射的DLL相当于内存中已经有了DLL数据了. 我们只需要解析导出表即可. 我们映射的DLL是ntdll.dll 所以我们要寻找的函数也是 ntdll.dll下的Zw导出函数....而我们的主题是获取Zw功能调用号. 我们获取Zw功能调用号其实就是想在SSDT(64位)表中查找对应的导出函数. 所以这一步 我们在Ring3做也可以....然后去他的Ntdll.dll中随便找一个Zw函数. 比如我找的ZwReadFile. 那么观看其反汇编则如下: 可以看到我们想要获取的功能号位6 但是每个系统是不一样的....所以我们必须先获取ZwReadFile的函数地址. 获取到它的地址后再按照 char *来解析这个地址. 在64位下 *((CHAR*)pfnAddress + 4) 则是要获取的功能号.

    90220

    HarmonyOS开发:在AppGallery Connect应用配置的公钥指纹和应用备案要填写的公钥区别是什么,为什么两者信息不一样?

    在 AppGallery Connect 应用配置的公钥指纹和应用备案要填写的公钥在概念、用途和取值等方面存在区别,具体如下: 概念不同: AppGallery Connect 应用配置的公钥指纹是应用签名证书...应用备案要填写的公钥是加密算法中的公钥,是密钥对中的一部分,用于保护数据安全性,通常是从证书文件中提取出来的具体密钥信息。它与私钥配合使用,用于数字签名和验证等操作。...应用备案时填写的公钥主要用于在备案过程中验证应用程序的数字签名,以确保应用程序的完整性和真实性。同时,也可能用于后续与相关监管部门或平台进行数据交互时的加密验证等场景。...取值和格式不同: AppGallery Connect 通常生成的是 SHA256 指纹。...由于两者概念、用途和取值都不相同,所以它们的信息通常不一样。

    48320

    记调试 RX-Explorer-WAS 文件管理器 UI 未响应问题

    再或者就是遇到静态构造函数进锁的问题,为什么这么说呢?...这是因为如果某个类型的静态构造函数被另一个线程执行,且执行过程中进入了锁等无法结束的情况,那另一个线程再碰触到这个类型时,将会进入等待状态,此时的调用堆栈看起来也差不多这样 要到了符号文件之后,点击 调试...注:下图是后面截的,导致线程号和后文的不匹配,还请大家略过 切换到对应的线程,查看堆栈,可以看到确实是正在加载 DLL 的过程中 也就是主线程的加载 DLL 卡住是因为正在等待这个线程完成 DLL 加载...为什么需要加载呢? 通过调用堆栈可以看到一个陌生的非托管 DLL 正在加载过程中干活 ... user32.dll!...为什么会加载它?它又卡在哪? 顺着调用堆栈顶部,可以看到是在等锁。

    12510

    DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子

    有了前面两节的基础,我们现在切入正题:研究下DllMain为什么会因为不当操作导致死锁的问题。首先我们看一段比较经典的“DllMain中死锁”代码。...这样从逻辑和效率上看,都不会因为我们的工作线程写的有问题而导致死锁。然后我们在DllMain中等待这个线程结束才从返回。         粗略看这个问题,我们很难看出这个逻辑会导致死锁。..._RtlAllocateHeap@12()  + 0x9b48 bytes        我们看到倒数两步(5、6)和主线程中最后两步(16、17)是相同的,即工作线程也是在进入内核态后死锁的。...正如其名,该字段指向的是TIB结构体在进程空间中的虚拟地址。为什么要指向自己?那我们是否可以直接使用FS:[0]地址?不可以。举个例子:我用windbg挂载到我电脑上一个运行中的calc(计算器)。...在该文中多处对这个锁的说明值暗示这个锁是PEB中的LoaderLock。         那么刚才为什么要*(_DWORD *)(v4 + 0xa0) = &LdrpLoaderLock;?

    1.8K20

    总结到目前为止发现的所有EDR绕过方法

    在勒索软件和APT事件充斥的时代,检测这些攻击的重要性变得越来越重要。...近年来,在我个人看来,已添加了越来越重要的组件-“端点检测和响应-EDR”系统或功能。这些EDR系统的功能包括实时监视端点,数据分析,威胁检测和阻止以及威胁搜寻功能。...NTDLL.dll不是Win32 API的一部分,也没有正式的文档。...听起来很复杂。 使用此技术也有一些缺点: 每当发布较新的Windows版本时,您的二进制文件将不再起作用。那是因为每个功能的汇编代码必须再次更改。...我在摆弄所有需要的所有NTDLL.dll函数,例如NtOpenProcess,NtAllocateVirtualMemory,NtWriteVirtualMemory和CreateThreadEx,但不幸的是无法成功使我的

    10.9K31

    深入解析 DLL 劫持漏洞

    攻击者可以把恶意的DLL文件和目标文件(如WORD文档)打包在一起,如果受害者进行解压操作,恶意DLL和目标文件就会位于同一个目录,攻击者可以十分方便的实施DLL劫持。...2.2 针对文件关联的DLL劫持 在Windows下,我们平时使用的各种文件(如MP3音乐、DOC文档、PDF文档、MKV视频等)都有一个与之关联的默认处理软件。...通过 iframe 可以触发 Microsoft Edge 和 Google Chrome 的自动下载功能,这一特性被 @HaifeiLi 认为是一个安全漏洞,其在Twitter上发表了很多关于该漏洞的推文...,甚至抱怨Chrome和Edge团队忽视这个漏洞的存在。...Greg Linares 在 SRT-VR-24DEC2015 中指出 Windows10 的 URLMON.dll 中存在两处加载 phoneinfo.dll 的地方,可能是DLL文件的版本不一样,笔者找到的代码与之存在一些细微差异

    3.9K00

    CC++开发人员要了解的几大著名CC++开源库

    这两个浏览器面向的用户是不一样的,一般来说使用Chrome的用户是普通用户,用它来浏览网页使用,而使用Chromium大部分是极客、开发人员和体验新功能的的用户。.../125135667 6、开源操作系统ReactOS ReactOS是一款基于 Windows NT 架构的类似于Windows XP系统的免费开源操作系统,旨在实现和 NT 与 Windows 操作系统二进制下的完全应用程序和驱动设备的兼容性...ReactOS一直在持续维护中,可以到ReactOS官网上找到ReactOS源码的下载地址,使用svn将ReactOS源码下载下来。...我们在项目中多次参考ReactOS的代码,解决了开发过程中遇到的多个问题,具体实例可以参考下面的文章: 通过查看ReactOS开源代码,解决完整路径dll加载失败问题(附源码) https://blog.csdn.net...在Windows和Linux上的VLC是使用C++/Qt编写的,提供了一致的用户体验。

    4.6K22

    软件调试详解

    ,讲解调试程序和被调试程序之间如何建立联系 调试对象 调试器和被调试程序 调试器与被调试程序之间建立起联系的两种方式 CreateProcess DebugActiveProcess 与调试器建立连接...跟到ntdll.dll里面的DbgUiDebugActiveProcess,传入两个参数,分别为调试器的句柄和被调试进程的句柄 通过调用号进0环 来到0环的NtDebugActiveProcess...,执行完之后eax存储的就是被调试进程的EPROCESS 这里判断调试器打开的进程是否是自己,如果是自己则直接退出 也不能调试系统初始化的进程 然后获取调试对象的地址,之前是句柄,但是句柄在0环里面是无效的...,将调试对象和被调试进程关联起来 跟进函数,发现有判断DebugPort是否为0的操作,ebx为0,edi为被调试进程的EPROCESS,那么edi+0bc就是调试端口 然后再把调试对象的句柄放到被调试对象的...ULONG Flags; //+38 标志 调试消息是否已读取 } DEBUG_OBJECT, *PDEBUG_OBJECT; 调试事件的处理 因为每种事件的调试信息不一样,所以会有很多种类

    86610

    软件调试详解

    前言 在windows里面调试跟异常息息相关,如果想要对调试得心应手,异常处理的知识是必不可少的,本文主要介绍的是软件调试方面的有关知识,讲解调试程序和被调试程序之间如何建立联系 调试对象 调试器和被调试程序...跟到ntdll.dll里面的DbgUiDebugActiveProcess,传入两个参数,分别为调试器的句柄和被调试进程的句柄 通过调用号进0环 来到0环的NtDebugActiveProcess...,执行完之后eax存储的就是被调试进程的EPROCESS 这里判断调试器打开的进程是否是自己,如果是自己则直接退出 也不能调试系统初始化的进程 然后获取调试对象的地址,之前是句柄,但是句柄在0环里面是无效的...,将调试对象和被调试进程关联起来 跟进函数,发现有判断DebugPort是否为0的操作,ebx为0,edi为被调试进程的EPROCESS,那么edi+0bc就是调试端口 然后再把调试对象的句柄放到被调试对象的...ULONG Flags; //+38 标志 调试消息是否已读取 } DEBUG_OBJECT, *PDEBUG_OBJECT; 调试事件的处理 因为每种事件的调试信息不一样,所以会有很多种类(

    84200

    edr对抗技术1-api unhook output

    将 ntdll.dll 的新副本从磁盘映射到进程内存 查找被 hook 的 ntdll.dll的 .text 部分的虚拟地址 获取ntdll.dll基址 模块基址 + 模块的 .text 段 VirtualAddress...查找新映射ntdll.dll的 .text 段的虚拟地址 获取被 hook 的 ntdll .text 段的内存写的权限 将新映射的ntdll.dll的 .text 段覆盖到被 hook 的 ntdll...base address : 0x%p\n", ntdllBase); 我们传递要定位其基地址的DLL的名称(在本例中为ntdll.DLL),函数返回其基地址。...做不到,因为这个线程是在我的main函数之前被创建的。走到main的时候,这个线程就结束了。应该是对我们起来的程序代码段检测的。所以加一下壳子,自己写的壳子,杀软就可能看不到了?...hook的完全不一样了 绕过冰盾hook代码 参考PE文件映射unhook 0x04 参考 https://xz.aliyun.com/t/14310

    1.3K10

    构建API调用框架绕过杀软hook

    我们知道杀软在API函数的监控上一般有两种手段,一种是在3环直接通过挂钩到自己的函数判断是否调用了这个API,另外一种方式就是在0环去往SSDT表的路径上挂钩来判断进0环后的操作。...ntdll.dll的NtOpenProcess 这里在ntdll.dll里面定位到NtOpenProcess,这里使用7A的调用号,通过call dword ptr [edx]即sysenter进入0...段权限检查 CPU权限等级划分如下,在windows里面ring0和ring3使用得较多 如何查看程序处于几环?...DPL = 0 数据段的权限检查: CPL 的比较) 注意:代码段和系统段描述符中的检查方式并不一样 总结: •CPL CPU当前的权限级别 •DPL...如果你想访问我,你应该具备什么样的权限 •RPL 用什么权限去访问一个段 那么为什么会有RPL的存在呢?

    1.4K61

    Shellcode 技术

    ETW 在内核中有组件,主要是为系统调用和其他内核操作注册回调,但也包含一个用户态组件,它是ntdll.dll(ETW 深度潜水和攻击向量)的一部分。...由于ntdll.dll是一个 DLL 加载到我们的二进制进程中,我们可以完全控制这个 DLL 和 ETW 功能。...我们在 中获取它的地址ntdll.dll,并将它的第一条指令替换为返回 0 ( SUCCESS) 的指令。...EDR 解决方案确保它们的 DLL 在不久之后加载,这ntdll.dll在我们自己的代码执行之前将所有钩子放置在加载中。...关于反射 DLL 加载器的工作原理有很多书面解释,Stephen Fewer 的代码也有很好的文档记录,但简而言之,反射加载器执行以下操作: kernel32.dll将地址解析为加载 DLL 所需的必要

    2K20

    Windows的APC机制

    漫谈兼容内核之十二: Windows的APC机制 毛德操 前两篇漫谈中讲到,除ntdll.dll外,在启动一个新进程运行时,PE格式DLL映像的装入和动态连接是由ntdll.dll中的函数LdrInitializeThunk...ReactOS代码中对这个数据结构的定义带有逆向工程的痕迹,每一行后面的十六进制数值就是相应结构成分在数据结构中的位移。...LdrpGetSystemDllApcDispatcher()只是返回一个(内核)全局量SystemDllApcDispatcher的值,这个值是个函数指针,指向ntdll.dll中的一个函数,是在映射...要启动一个EXE映像运行时,首先要创建进程,再把目标EXE映像和ntdll.dll的映像都映射到新进程的用户空间,然后通过系统调用NtCreateThread()创建这个进程的第一个线程、或称“主线程”...); } 前面已经讲到,全局量SystemDllEntryPoint是在LdrpMapSystemDll()时得到设置的,指向已经映射到用户空间的ntdll.dll映像中的LdrInitializeThunk

    3.1K30

    构建API调用框架绕过杀软hook

    这里去导出模块看一下调用了ntdll.dll的NtOpenProcess 这里在ntdll.dll里面定位到NtOpenProcess,这里使用7A的调用号,通过call dword ptr [edx...段权限检查 CPU权限等级划分如下,在windows里面ring0和ring3使用得较多 如何查看程序处于几环?...ax 指向的是同一个段描述符,但RPL是不一样的 数据段权限检查举例 比如当前程序处于0环,也就是说CPL=0 Mov ax,000B //1011 RPL = 3 Mov ds,ax //ax指向的段描述符的...DPL = 0 数据段的权限检查: CPL 的比较) 注意:代码段和系统段描述符中的检查方式并不一样 总结: CPL CPU当前的权限级别 DPL 如果你想访问我...,你应该具备什么样的权限 RPL 用什么权限去访问一个段 那么为什么会有RPL的存在呢?

    70220

    那些做客户端 CC++ 开发的同学,现在怎么样了?

    虽然古怪的匈牙利命名法(下文将介绍)让 Windows 程序看起来有点“中世纪风格”,但另一方面增加了 Windows 程序的可读性和可理解性,后来者不断模仿。...当我们在代码中看到这样的变量时我们无需查看其类型定义。虽然有人说这种命名法已经过时,在后来的很多系统设计上,很多地方可以看到匈牙利命名法。...这种命名法虽然看起来很拖沓,但是表达意思却是非常清晰,尤其是在阅读别人的项目代码或者维护一些旧的项目时,别人能读懂是其他工作的前提。...ReactOS 号称开源的 Windows,其开发团队不仅保持对外的操作系统 API 与官方 Windows 一模一样(名称和特性均一样),同时内核实现也力求和官方 Windows 一模一样。...ReactOS 官网地址:Front Page,《Windows 内核情景分析》(分为上下两册)一书通过 ReactOS 的源代码详细地介绍了 Windows 的各种内核实现机制,非常好的书,给大家推荐一下

    5K21
    领券