- 博客(236)
- 收藏
- 关注
原创 《面向对象是怎样工作的》笔记
16、在推进软件开发时,需要进行如下三个阶段的工作:1)业务分析:整理现实世界的工作的推进方法,在此阶段,需要整理好如何对现实世界中的工作进行职责分配,以及如何推进工工作。14、活动图经常被用来表示现实世界的业务流程,虽然现实世界的工作流程也可以通过时序图和通信图来表示,但在分析实际的工作情况时,相比于人物的职责分配,理解整体流程可能更为重要。7、计算机的工作并不只是执行机器语言的命令,还有读写硬盘、使用打印机打印、与其他联网的计算机进行通信、等待来自键盘和鼠标的输入等等,需要与外部进行很多交互。
2024-09-27 17:00:55 861
原创 《软件架构基础》读书笔记
代理拓扑结构中的组件不知道初始事件的装填甚至不知道原始业务请求的状态,因此拓扑结构中没有角色负责重启业务事务(初始事件),也不知道初始事件是从何处停止的。6、基于服务的架构风格:基于服务的架构是微服务架构风格的混合,由于其架构的灵活性,被认为是最实用的架构风格之一。4.5网络拓扑结构从不改变:该谬误指的是整个网络的拓扑结构(包括网络中使用的所有路由器、集线器、交换机、防火墙、网络和设备),架构师假定这些整体网络拓扑结构是固定的不会发生变化的,但实际上它一直在改变。根据规模和复杂度的不同,
2024-09-06 22:19:52 887
原创 Raft学习笔记
no-op空日志属于领导者任期的日志,多数派达成后立即提交,致使no-op空日志前面的那些未提交的日志全部间接提交了。两阶段提交协议是最经典的原子提交协议,其基本思想是:既然仅发送一个请求不足以知道其他节点是否成功提交事务,那么最直接的想法就是再增加一轮请求,先检查每个节点上的状态是否能够满足事务正确性,再进行事务操作。2)如果接收方发现发送方的任期陈旧,那么无论哪个过程,该RPC请求都会被拒绝,接收方如果将已知的最新任期回传给发送方,发送方知道自己的任期已经过期后,转变为跟随者状态并跟新其任期。
2024-08-30 11:38:57 879
原创 linux下使用xargs批量操作
2、将所有gz文件重命名为.gz.log2文件。3、将所有.log2文件改回为.gz文件。4、将所有的gz文件重命名为log2文件。
2024-08-28 17:02:34 354
原创 《加密与解密 》第四版读书笔记2
在Windows操作系统中,各个进程的内存空间是相互独立的,虽然能通过函数VirtualQueryEx/VirtualProtectEx查询、设置目标进程的内存信息和页属性,通过函数ReadProcessMemory/WriteProcessMemory对目标进程的内存空间进行读写,但是这样操作繁琐(例如获取一个二级指针的内容就需要2次跨进程读内存),更重要的是不能跨进程执行自己的代码。2.1.2 PE中的EAT:EAT输出表与IAT不同,它存放的不是函数地址,而是函数地址的偏移,使用时需要加上模块基址。
2024-08-09 19:25:47 678
原创 《加密与解密》读书笔记1
2.7、文件偏移与虚拟地址的转换:一些PE文见为减少体积,磁盘对齐值不是一个内存页0x1000,而是0x200,当这类文件映射到内存之后,统一数据相对于文件头的偏移量在内存和磁盘文件中是不同的。而那些磁盘对齐值0x1000与内存页相同的区块,同一数据在磁盘文件中的偏移与内存中的偏移相同,因此不需要转换。当PE文件被载入时,Windows加载器的工作之一就是定位所有被输入的函数和数据,并让正在载入的文件可以使用那些地址,这项工作是通过PE文件的导入表Import Table完成的。节表后面就是节的内容。
2024-08-08 07:35:31 684
原创 解决hook汇编代码时空间不足的一种方法
思路:如下图,使用两条jmp指令。原内存地址使用一条jmp指令跳转到新开辟的内存空间(VirtualAlloc或者VirtualAllocEx函数),在新开辟的内存空间完成处理之后再使用jmp指令跳转到原。内存地址合适的位置(通常是原内存处被hook为jmp指令的下一条指令的地址),这样只需要动一条jmp指令大小的空间,对原程序改动最小。参考链接:《51hook软件安全培训教程》
2024-07-29 07:26:15 143
原创 ollydbg找不到进程的一种解决办法
可以考虑通过OD打开进程进行附加,但是这个游戏本身是全屏的,如果通过OD打开全屏的游戏,在OD中下了断点之后,游戏进程是无法处理任何事件的,也就无法从游戏界面切换到OD界面中。OD在打开进程时还提供了参数选项,只需要在打开游戏时加上参数-window,就可以将全屏游戏缩小成窗口(有的游戏内没有提供改分辨率的选项,如我正在学习使用的剑侠情缘2白金版)。如图,OD附加找不到进程。
2024-07-26 07:58:22 424
原创 《设计模式之美》读书笔记2
2、分层与模块化:不同模块之间使用接口进行通信,模块之间的耦合很小,每个团队聚焦于一个独立的高内聚模块来开发,最终像搭积木一样将各个模块组装起来构成一个复杂的系统。统一的访问方式能够简化上层代码的编写,并且使代码更容易复用。除此之外,抽象和封装还能有效控制代码复杂性的蔓延,将复杂性封装在局部代码中,隔离实现的易变性,提供简单、统一的访问接口,其他模块使用会更简单。1、封装与抽象:封装了不同类型设备的访问细节,抽象为统一的文件访问方式,更高层的代码就能基于统一的访问方式,来访问底层不同类型的设备。
2024-07-22 15:15:06 393
原创 《设计模式之美》学习笔记1
模块化是构建复杂系统常用的手段,对于一个大型复杂的系统来说,没有人能够掌控所有的细节,因此将系统划分成各个独立的模块,让不同的人负责不同的模块,这样即使在不了解全部细节的情况下,管理者也能协调各个模块,让整个系统有效运转。不同的应用场景、不同阶段的需求背景下,对同一个类的职责是否单一的判定可能都是不一样的。大型重构指的是对顶层代码设计的重构,包括系统、模块、代码结构、类与类之间的关系等的重构,重构的手段有分层、模块化、解耦、抽象可复用组件等,使用的重构工具包括设计思想、原则和模式。
2024-07-20 16:32:04 415
原创 Windows PE文件浅析
4、数据目录:Windows下的可执行文件是PE中的一种,这种文件除了包含代码及数据段的相关数据以外还包含了许多与文件执行有关的其他数据。Windows操作系统在加载可执行文件时,会为这些具有不同属性怼的数据分别分配标记有不同属性的页面(当然,相同属性的数据可能会被放到同一个页面中),以确保程序运行时的安全。相对虚拟内存地址RVA是相对于基地址的偏移,几RVA是虚拟内存中用来定位某个特定未知的,该地址的值是这个特定位置距离某个模块基地址的偏移量。RVA是相对于模块而言的,VA是相对于进程而言的。
2024-07-18 08:08:49 597
原创 《面向对象分析与设计》读书笔记2
3、UML元素(包括包)之间的依赖关系是用一个虚拟的开房间头来表示的,箭头的尾部位于具有依赖性的元素(客户),箭头位于支持这种依赖的元素(提供者)。13、好的软件架构通常具有以下一些共性:1)它们由定义良好的抽象层构成,每层代表了一种内聚的抽象,提供了定义良好的、受控的接口,并且建立在同样定义良好的、受控的底层抽象设施之上。在某种程度上,系统的架构基本上与系统的最终用户无关,但是对于构建可理解、可扩展、可重新组织、可维护和可测试的系统而言,拥有“清晰的内部结构”是很关键的。8、分析关注的是行为而不是形式。
2024-07-10 15:57:07 767
原创 《面向对象分析与设计》学习笔记1
随着系统的演变,曾经被认为是复杂的对象就变成了基础对象,在这些基础对象的基础上构建更复杂的系统。24、关键抽象反映了问题域的抽象,而机制是设计的灵魂,在设计过程中,开发者不仅必须考虑单个类的设计,还需要考虑这些类的实例如何一起工作。2.1层次结构:复杂性常常以层次结构的形式存在,复杂的系统由一些相关的子系统组成,这些子系统又有自己的系统,如此下去,直到达到某种低层次的基本组件。18、类和对象的设计是一个增量、迭代的过程,坦白的说,除了那些最不重要的抽象,我们从来没有第一次就完全正确的定义一个类。
2024-07-05 15:04:42 514
原创 条件断点在找call中的应用
以TLBB为例,在2024.6.24附近左右的时间段,游戏窗口切换时就会有两个左右的call,在x64dbg下断点之后切换回游戏窗口,很难分辨出哪个是我们需要的动作引起的call,因此在send函数处下条件断点:$breakpointcounter % 4 == 3。断点启用后,成功找到了召唤坐骑的call。
2024-06-26 08:09:11 228
原创 UML与设计模式
节点是应用程序的部署单元。组合关系是用一条带实心菱形箭头的直线表示的,组合关系用于类图,特别用于表示实体对象关系,表达整体拥有部分的语义,组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也将消亡。例如在分析一个商业过程的时候,对象的规模(粒度)大到如银行、工厂、商场的程度,不论它有多么巨大,只要我们认为它是对象,它与其他对象交互时就是一个整体,不能分割。换言之,通过一个场景,我们仅能得到对象的一个侧面的信息,如图2.4所示,如果以每一个场景为坐标(维度),那么对象实例就是对象在该坐标上的投影。
2024-06-15 10:59:50 1372
原创 《Intel开发手册卷3》读书笔记3
中断和异常是强制性的执行流的转移,从当前正在执行的程序或任务转移到一个特殊的称作句柄的例程或任务。当硬件发出信号时,便产生中断,中断的产生同正在执行的程序是异步的,即中断的产生是随机的。其用于处理处理器的外部事件,比如为外设服务的请求。使用INTn指令,软件也可以产生中断。异常是在处理器执行指令的过程中发现错误而产生的,比如除数为零。处理器可以检测出多种不同的错误,包括保护异常,页错误,内部机器错误。当处理器收到中断信号或检测到异常时,便挂起当前正在运行的进程或任务,而转去执行中断或异常处理例程。
2024-05-29 13:35:30 696
原创 《intel开发手册卷3》读书笔记1
1)实模式:8086的寄存器只有16位,我们也习惯于称8086的工作模式为1·6位模式。后续的CPU为了保持兼容性,在芯片上了电以后,还必须运行于16位模式之下。这种模式还有个正式的名字叫做实模式。在实模式下,程序是不能通过内存管理单元间接访问物理内存的,而是直接访问物理内存。访问方式是通过“段寄存器:段内偏移”这种形式,计算方式为: 物理地址 = 段寄存器
2024-05-13 19:03:15 813 1
原创 《intel开发手册卷1》学习笔记3
—Call(调用过程)和RET(从过程返回)指令允许从一个过程(或子例程)跳转到另一个过程(或子例程),并随后跳转回(返回)到调用过程。因此,字符串操作可以从较高的地址开始,然后向较低的地址移动,也可以从较低的地址开始,然后向较高的地址移动。LDS(使用 DS 加载远指针)、LES(使用 ES 加载远指针)、LFS(使用 FS 加载远指针)、LGS(使用 GS 加载远指针)和 LSS(使用 SS 加载远指针)将远指针从内存加载到段寄存器和通用通用寄存器中。目标操作数指定目标指令的地址(指令指针)。
2024-05-10 13:58:19 501
原创 x64dbg中类似于*.exe+地址偏移
在CE和xdb中,形如*.exe+数字偏移形式的地址被称为模块地址,CE附加到进程后点击查看内存,显示如下图。但是xdbg如何关闭,倒不是很清楚,不过最新版本的xdbg sub后面的就是绝对虚拟地址。CE中可以关闭,从而显示绝对的虚拟地址,如下图所示。
2024-05-09 23:47:04 331
原创 《intel开发手册卷1》学习笔记1
在 IA-32 处理器上运行的任何程序或任务都有一组资源,用于执行指令和存储代码、数据及状态信息。这些资源(如图 3-1 所示)构成了 IA-32 处理器的基本执行环境。英特尔 64 处理器支持 IA-32 处理器的基本执行环境,以及 IA-32e 模式下的类似环境,它可以执行 64 位程序(64 位子模式)和 32 位程序(兼容性子模式)。基本执行环境由处理器上运行的应用程序和操作系统或执行程序共同使用。地址空间:在 IA-32 处理器上运行的任何任务或程序都可以寻址最大 4 GB 字节(
2024-05-08 16:22:55 776
原创 《intel开发手册卷1》学习笔记2
向量 32 至 255 为软件定义中断,可用于软件中断或可屏蔽硬件中断。请注意,处理器还定义了几个不指向 IDT 中条目的额外中断;其中最著名的是 SMI 中断。异常被分类为故障、陷阱或中止,具体取决于异常的报告方式以及导致异常的指令是否可以在不丢失程序或任务连续性的情况下重新启动。1)故障— 故障是一种通常可以纠正的异常,并且一旦纠正,就可以重新启动程序而不会失去连续性。当报告错误时,处理器将机器状态恢复到开始执行错误指令之前的状态。
2024-05-08 14:23:07 848
原创 MFC DLL注入失败一些错误总结
以下是dll绝对路径中均含有中文字符,会报错误:注入dll失败 Force load module failed:没有查找到地址OLEAUT32!尽量确保编程时路径全为英文字符,中文字符实在是难搞。
2024-05-07 23:34:11 543
原创 《深入解析Windows操作系统》第12章读书笔记
2、可恢复性:原子性事务是一种用来处理数据库修改的技术,其目标是,系统的失败不会影响到数据库的正确性或者完整性。原子性事务的基本原则是,有些称为事务的数据库操作,是“要么全部完成,要么全部不做”的任务(事务被定义为一个“改变了文件系统数据护理者改变了卷目录结构的IO操作”)。构成一个事务的那些独立磁盘更新必须按照原子方式来执行,也就是说,一旦失误开始执行,它的所有磁盘更新就必须被完成。1、日志系统:一个数据库或者日志文件系统实现的日志语义,经常需要跟踪那些在文件或者项目包含的数据或者元数据上所做的修改。
2024-05-07 14:20:46 263
原创 《深入解析WIndows操作系统》第10章读书笔记
对于运行在内核中的代码,我们期望它比用户模式代码有更少的递归调用,同时能更充分地利用变量,并保持较小的栈缓冲区,因为内核栈位于系统地址空间中(通常是所有进程共享的),因此它们的内存使用会对整个系统带来较大的影响。这正是字节偏移量域的目的。4)如果PTE中的“有效”位是空白的,则会触发一个页面异常(内存管理错误),操作系统的内存错误处理器找到该页面并试图将其变成有效的页面,然后进行第5步,如果该页面不能或者不应该变成有效位(如页面保护错误),则内存管理错误处理器产生一个访问违例或者错误检验。
2024-05-07 12:46:14 616
原创 《深入解析WIndows操作系统》第9章读书笔记
NOR闪存在操作上最接近RAM,它的每个字节都可以被独立地寻址,而NAND闪存则被组织成以块为单位,就像磁盘一样。NOR类型的闪存用来设计保存计算机主板上的BIOS,而NAND类型的闪存被用在SSD中。相比较于RAM和磁盘,闪存应当被视为一种有限生命周期的存储介质。闪存也无法被原地更新,再写入一个快之前,整个块都必须被擦除(即使是NOR类型的闪存也是这样)。Windows包含了多路径IO的支持,以便吧多路径磁盘按照单个磁盘来管理,但是它依赖于一个叫DSM模块(与设备相关的模块)的第三方驱动程序。
2024-04-30 16:29:52 345
原创 《深入解析Windows操作系统》第8章读书笔记
需要注意的是,在发出了一个异步IO操作以后,该线程必须非常小心,在IO设备完成IO操作之前,应用程序的这个线程不能访问该IO操作中的任何数据,并且这个线程必须监视一个“可在该IO操作完成时能被信号通知到的同步对象(事件对象、IO完成端口或者对象本身)”,以便将 线程对该IO的数据的访问操作 和 IO请求 同步起来。1、同步IO:应用程序发出的大多数IOI操作都是同步的(默认的),也就是说,在IO设备执行数据操作的过程中,应用程序一直等待,直到IO操作完成,设备返回一个状态码。
2024-04-30 15:46:45 192
原创 《深入解析Windows操作系统》第7章读书笔记
然后存根调用RPC运行时过程,这些RPC运行时过程可以找到远程过程所在的RPC服务器、确定RPC服务器使用哪些传输机制、然后将参数序列化后的二进制流以RPC请求的方式发送给RPC服务器。重定向器将该操作传递给远程文件系统,RPC客户端上的存根过程与RPC服务器上的远程过程具有相同的函数名和函数参数(即两者的函数签名是一致的),但是存根过程(RPC客户端)并不处理所请求的操作,相反地,它(位于RPC客户端)将传递给它的参数进行序列化(参数一一取出来并转变成一个二进制的数据流)以便通过网络传输到RPC服务端。
2024-04-30 11:56:06 381
原创 《深入解析Windows操作系统》第5章节学习笔记
但是这种分配方法假定了一个进程内的线程完成的是等量的工作。另外,对于那些已经调用了任一Windows子系统USER或者GDI函数的线程,Windows子系统的内核模式部分(Win32.sys)为每个这样的线程维护了一个数据结构,称为W32THREAD结构,线程的KTHREAD结构指向了W32THREAD结构。Windows调度代码是在内核中实现的,然而,内核中不存在单独的“调度器”模块或者例程——调度代码散步在内核中凡是会发生与调度相关的事件的各处,执行这些任务的例程合起来称为内核的“分发器”。
2024-04-30 10:40:01 681
原创 《深入解析Windows操作系统》第3章读书笔记
中断对象包含了所有“供内核将一个设备的ISR与一个特定级别的中断关联起来而需要”的信息,包括该ISR的地址、设备中断时所在的IRQL,以及内核中与该ISR关联的IDT项。此类汇编指令被称为分发代码。每个对象头也有一个索引,指向一个被称为类型对象的特殊对象,该对象包含的信息对于它的每个实例是公共的。8.2、内核对象:指由Windows内核实现的一组更为基本的对象,这些对象对用户模式代码不可见,它们只是在执行体内部被创建和使用,内核对象提供了最为基本的能力,比如同步等,执行体对象的功能是建立在内核对象之上。
2024-04-28 13:32:55 729
原创 《深入解析Windows操作系统》第2章读书笔记
2)内核模式设备驱动程序(Win32.sys),它包括如下支持:窗口管理程序(控制窗口显示、管理屏幕输出、采集来外设的输入、将用户消息传递给应用程序)、图形设备接口GDI(专门针对图形输出设备的函数库,包括线段、文本和图形的绘制函数以及图形控制函数)、Directx功能的包装函数(Windows对DirectX的支持是在另一个内核驱动程序(Dxgkml.sys)中实现的);内核中的许多函数也在WDK中有相应的文档描述(通过搜索以Ke打头的函数可以找到),因为在实现设备驱动程序的时候也需要用到他们。
2024-04-25 12:38:08 648
原创 《深入解析windows操作系统》第1章读书笔记
低半部分的地址空间的映射关系会发生变化,以便总是反映出当前正则执行的进程的虚拟地址空间,而高半部分的地址空间的映射关系总是由操作系统的的虚拟内存使用。作业对象的主要功能是,使一组进程被当做一个整体i来管理和维护,通过作业对象,可以对特定的属性进行控制,也可以对一个进程或者所有与作业相关的进程进行限制。6、虽然线程有自己的执行环境,但是同一个进程内的所有线程共享该进程的虚拟地址空间(以及属于该进程的其他资源)。对象类型由系统定义的数据类型、在该数据类型的实力上进行操作的一组函数,以及一组对象属性构成。
2024-04-24 15:21:54 499
原创 CE 搜索游戏背包技巧
4、重复以上步骤直到备选列表数量小于100。5、xdbg观察确定背包栏数组起始地址。1、游戏里移动或者交换第1格技能栏对象。3、第1格为空时,搜索数值0。6、分析背包栏数组的基址偏移。2、CE搜索变动的数值。
2024-04-21 07:47:13 280
原创 汇编语言学习笔记
CMP指令对标志位的影响如下:假想减法操作完成之后,CMP指令会根据运算结果修改溢出标志位、符号标志位、零标志位、进位标志位、辅助进位标志位和奇偶标志的值。12、NEG指令(negate):该指令通过将数字转换为相应的补码而求得其相反数(正数的原码、反码和补码相同,负数的反码=除符号位外,原码按位取反,负数的补码=负数的反码+1);8、XCHG指令(exchange data):该指令交换两个操作数的内容,注意它不接受立即操作数,除此之外,XCHG指令的操作数与MOV指令的操作数遵循同样的规则;
2024-04-19 22:00:26 1759
原创 汇编指令笔记
jmp x ) 其中x表示跳转地址,也会导致esp=esp-4。jmp [esp] ) ,ret指令会导致ep=esp+4。2、pop x 除了将esp指向的数据弹出栈外,还有一个隐含作用:add esp, 4。1、push x 除了将x压入栈外,还有一个隐含作用:sub esp,4。
2024-03-28 23:08:30 125
原创 植物大战僵尸更改阳光代码
在执行了“是什么访问了这个地址“指令”后(一定要找mov指令),需要去掉mov指令中的偏移量得到地址A,然后将地址A添加到地址列表并继续搜索地址A。原理感觉和操作系统中的多级页面很相似,不知猜测是否准确。CE中需要不停地重复:搜索数值====>找出是什么访问了这个地址 这两个步骤,反复尝试直到找出绿色的静态基址即表示完成。
2024-03-27 07:54:09 369
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人