- 博客(75)
- 收藏
- 关注
原创 直接调用本地API(NTAPI)
然而,存在另一种方式,即直接调用本地API(NTAPI),这种方式允许应用程序绕过WinAPI的封装,直接与操作系统内核通信。这些函数是实现WinAPI的底层机制,但与WinAPI不同,NTAPI并不是为最终用户设计的,而是为操作系统内部使用。中提供的一个API,这个DLL是Windows操作系统中最关键的组件之一,因为它向应用程序暴露了WinAPI,因此几乎所有的应用程序都会加载这个DLL。的WinAPI函数。提供的,这个DLL是用户模式下的最后一层,它负责创建从用户模式到内核模式的过渡。
2024-11-23 20:47:45
1275
原创 汇编语言中的test指令研究
在计算机科学中,汇编语言提供了对硬件的低级访问,允许程序员执行精细的控制和优化。test指令是许多汇编语言中的一个基本指令,用于执行逻辑AND操作并设置相应的标志寄存器,但不存储结果。本文旨在探讨test指令的用法、功能和实际应用,以及它如何在不同的上下文中提高程序性能和安全性。汇编语言是一种低级编程语言,它允许开发者直接控制硬件。每个汇编指令通常对应一个特定的CPU机器码指令。test。
2024-11-21 20:25:20
1781
原创 x64dbg无法定位main函数的解决方案
在debug模式下,x64程序从main反推调用过程中汇编特征,如jmp、call、movzx、test、jz等指令,根据这些特征找到main函数。:在x64dbg中,使用快捷键Ctrl + G打开“转到地址”功能,然后将从IDA中找到的main函数地址粘贴进去,x64dbg会自动跳转到该地址。:在IDA中,通过交叉引用从main反推到入口函数mainCRTStartup,从而找到main函数的地址。:在main函数的地址处设置断点,以便在程序运行到此处时暂停,进行进一步的分析。
2024-11-21 11:30:05
519
原创 为什么汇编语言当中要用 test eax, eax
想象一下,你有一个开关(eax寄存器),这个开关可以处于两种状态:开(非零值)或关(零值)。这条指令就像是检查这个开关是否处于“关”状态的动作。test指令的作用是检查eax寄存器中的值,然后根据这个值更新一些内部的信号灯(状态标志寄存器)。这些信号灯会告诉程序的其他部分这个开关是开还是关。假设你在家里有一个智能灯泡,这个灯泡可以通过一个开关来控制。这个开关有两个状态:开(灯泡亮)和关(灯泡灭)。现在,你想编写一个规则,如果灯泡是关的(开关处于“关”状态),就去做某件事情(比如打开另一个灯)。
2024-11-20 16:39:21
1912
原创 kali解压7z文件,以及7z的简单介绍
7-Zip更新到16.04版本,加入了对于高压缩率的Pavlov编码、多核心压缩、无损压缩等新特性,提升了压缩和解压缩的功能。:7-Zip的首个版本发布,正式向用户提供了文件压缩和解压缩功能。:随着7-Zip升级到4.42版本,加入了对于多核处理器的优化支持,进一步提高了其在处理大文件时的性能表现。:Igor Pavlov开始了7-Zip的开发工作,最初的目标是设计一款能够提供高压缩比的文件压缩软件。:7-Zip添加了对7z压缩格式的支持,这种新的压缩算法为用户提供了更高的压缩比和更好的性能。
2024-11-20 16:02:49
1582
原创 lea 和 mov 的区别
lea(Load Effective Address)和mov是汇编语言中两种不同的指令,它们在处理数据和地址时有不同的用途和效果。
2024-11-20 15:40:24
1538
原创 ebp和局部变量,参数存储的关系
在C语言中,函数的参数和局部变量是存储在栈上的。当一个函数被调用时,它的参数首先被推入栈中,紧接着是局部变量。这些值的存储顺序是从右到左,也就是说,最后声明的参数或局部变量实际上是存储在栈的较低地址处。这种机制使得在函数调用过程中,可以动态地访问和操作这些值,而不需要知道它们的确切内存地址。在函数的局部变量和参数的存储中,的正偏移和负偏移分别用于访问栈帧的不同部分。的偏移量可以是正的也可以是负的,这取决于你是在访问。(基指针寄存器)用于指向当前函数的栈帧的基地址。在x86架构的汇编语言中,
2024-11-20 15:38:32
435
原创 深入解析Kernel32.dll与Msvcrt.dll
在Windows操作系统中,动态链接库(DLL)扮演着至关重要的角色,它们为应用程序提供了丰富的API函数,以实现与操作系统的交互。本文将深入探讨两个核心DLL:Kernel32.dll和Msvcrt.dll,分析它们的功能、作用以及在程序开发中的重要性。
2024-11-19 16:33:56
1332
原创 软件断点和硬件断点
这些断点对于调试程序非常有用,因为它们允许你在特定的代码位置暂停程序执行,从而可以检查程序的状态和变量。(设置断点)命令在特定的写入函数上设置断点,然后在断点命中的时候检查写入的值和地址。处理器断点(也称为硬件断点或数据断点)和软件断点是调试过程中用来暂停程序执行的两种主要类型的断点。通过这些命令,你可以非常灵活地控制程序的执行,以便在关键点检查程序状态,这对于诊断复杂的程序行为和错误非常有帮助。:当断点命中时,检查传递给函数的参数,确定它们是否与你想要监控的内存地址和大小相匹配。否则,直接继续执行。
2024-11-16 18:25:45
1501
原创 windbg修改内存,查找地址
请注意,修改内存中的指令可能会导致程序行为异常,特别是如果你修改的是正在执行的代码。在例子中,将 “hello” 写入到指令指针指向的地址可能会导致程序在尝试执行这些字节时崩溃,因为它们不是有效的指令。这个地址处的内存内容以十六进制形式显示,紧接着的是 ASCII 表示的字符串 “hello”,后面跟着几个。是 32 位架构中的指令指针寄存器的名称,在 64 位架构中,指令指针寄存器的名称是。指向的地址,这通常是你当前正在执行的指令的地址。命令来搜索内存中的字符串。,这是一个故意的断点,通常用于调试目的。
2024-11-16 11:05:46
1080
原创 windbg的线程信息dt命令
TEB 是一个重要的数据结构,每个线程都有自己的 TEB,它包含了线程的各种信息,如线程的ID、环境变量、局部存储等。(Display Type)命令的结果,它显示了当前线程的线程环境块(TEB)的结构和一些关键字段的值。TEB 是一个重要的数据结构,它包含了线程的各种信息,如线程的ID、环境变量、局部存储等。:这是 TEB 的第一个成员,它是一个结构体,包含了线程的基本信息,如异常链表、栈基址和栈限制等。的详细信息时,你需要确保你提供了正确的符号路径,并且已经加载了相应的模块和符号。
2024-11-15 22:01:36
1027
原创 windows二进制安全零基础(二)
在x86架构中,栈(Stack)是一个非常重要的内存区域,它用于支持线程的短期数据需求,如函数调用、局部变量存储和程序控制信息。
2024-11-15 20:41:39
1677
原创 windows安全零基础教学(一)
在x86架构中,函数调用和返回是通过栈来管理的。当一个函数被调用时,当前函数的返回地址(下一条指令的地址)会被推入栈中。WinDbg是一个强大的调试工具,它可以用来分析内存转储文件、调试实时用户模式和内核模式代码。使用WinDbg时,你可以查看和修改CPU寄存器的值、单步执行代码、查看内存内容等。在32位的x86架构中,内存地址从最低的0x00000000到最高的0x7FFFFFFF。当一个二进制应用程序被执行时,它会在现代计算机使用的内存边界内以一种非常特定的方式分配内存。
2024-11-15 19:52:35
305
原创 windbg 关于L10比L9多更多行,和poi的含义
当你对调试器说“我想看从这个地址开始的10个电话号码”,调试器就会打开电话簿,找到那个地址,然后给你看从那个地址开始的10个电话号码。指向的地址开始的10个字节,但如果这10个字节没有填满一行(16个字节),调试器会继续显示那一行剩下的字节,直到一行结束。简而言之,WinDbg 会显示你请求的字节数,但如果这些字节没有填满一行,它会显示额外的字节来完成那一行。寄存器指向的地址开始的10个字节的内容。),同样的事情会发生,但因为你请求的字节数更少,所以调试器只需要显示更少的额外字节来填满那一行。
2024-11-15 16:26:44
566
原创 ELF头文件介绍和概念辨析
ELF文件格式是UNIX系统V应用二进制接口(ABI)的标准文件格式,用于定义程序的可执行文件、可重定位文件、共享库和核心转储(core dumps)的格式。e_ident数组是ELF文件的头部信息,它包含了识别和描述ELF文件的重要信息。EI_MAG(0-3): 幻数,用于标识文件为ELF格式。通常是0x7F后跟’E’,‘L’,‘F’。EI_CLASS(4): 表示文件的“类”,即文件是32位(ELFCLASS32)还是64位(ELFCLASS64)。EI_DATA。
2024-11-14 17:32:05
1241
原创 elf文件简单介绍
ELF文件格式是UNIX系统实验室开发的,用于定义应用程序二进制接口(ABI)。可重定位文件(Relocatable):由编译器和汇编器生成的.o文件,供链接器处理。可执行文件(Executable):链接器处理.o文件后生成的文件,用于创建进程映像。共享对象文件(Shared Object):动态库文件,如.so文件。ELF头部(ELF Header):包含文件的基本信息,如体系结构和操作系统等,并指出节区头表和程序头表的位置。程序头表(Program Header Table)
2024-11-14 16:27:42
955
原创 AES加密原理
由于AES处理的是128位数据,我们可以将其视为一个4x4的字节矩阵。因此,我们需要定义两个4x4的二维数组,一个用于存储明文分组,另一个用于存储密钥。
2024-11-11 16:27:10
1168
原创 c语言安全分析(一)——字符串(1)
嗨,我是艾丽卡,很高兴和你聊聊C语言中的字符串和数组。想象一下,字符串就像一列小火车,每个车厢代表一个字符,而最后一个特别的车厢——空字符'\0'——告诉我们火车到站了,也就是字符串的结束。界限(Bound)这就像数火车车厢的数量,包括那个告诉我们火车结束的特别的车厢。低位地址(Lo)这是火车队列的第一个车厢的地址,也就是字符串的第一个字符。高位地址(Hi)这是最后一个车厢的地址,也就是空字符的地址。TooFar这就像是火车队列结束后,我们再往前多走一步的位置。
2024-11-06 22:03:51
1289
原创 TVM OpcodeTable c++
这是虚拟机执行流程中的关键步骤,因为它允许虚拟机根据指令流中的操作码来确定要执行的具体指令。方法的实现,它的作用是完成指令表的构建过程,确保所有的操作码都被正确地映射到对应的指令上,并且没有任何间隙。在虚拟机的上下文中,操作码的位数通常是指操作码所需的位数,这个位数可能小于或等于操作码可能的最大位数(的值实际上是在之前的步骤中确定的,通常是通过分析指令集架构或运行时环境来确定的。的值是由虚拟机的设计和指令集架构决定的,它代表了操作码所需的位数,这个值在执行期间用于正确地提取和解释操作码。
2024-11-05 20:24:29
681
原创 LZMA算法
LZMA算法,全称为Lempel-Ziv-Markov chain Algorithm,是一种用于无损耗数据压缩的算法。它由Igor Pavlov在1996年或1998年开发,并首次应用于7-Zip压缩软件的7z格式中。LZMA算法使用字典压缩方案,与1977年由Abraham Lempel和Jacob Ziv发表的LZ77算法相似,但LZMA在比特级别而非字节级别上应用修改后的LZ77算法。高压缩比:LZMA通常能够比bzip2、DEFLATE等其他算法获得更好的压缩效果。可变字典大小。
2024-11-05 11:31:57
2827
1
原创 查看一个压缩包
这段代码是用汇编语言编写的,并且已经被反汇编成了可阅读的形式。下面是对这段代码的逐行解释:这些指令设置了编译器的指令集和内存模型。 表示使用Pentium Pro(686)指令集, 表示启用MMX指令集, 表示使用平坦内存模型。这里定义了一个名为的段,指定为和,意味着这是一个公开的32位代码段。指令用于设置寄存器的默认段。定义了三个数据库字节,分别是十六进制的37(十进制的55),7A和BC。是一个标签,是扫描字符串指令,是十进制调整指令,是减法指令,将58(ASCII码中的’X’)加到寄存器上。然
2024-11-03 22:21:36
743
原创 TON茶余饭后——TVM简单入门(一)
这里是全新的一次TVM入门课程,此前读者将TVM白皮书汉化后,效果并不理想。许多人没有足够的计算机底层水平,与逻辑理解的培训。所有就有了这个十分简洁的栏目,我们会根据源代码的片段内容通过十分透彻简洁的重点概括+举例子的方式讲解TON虚拟机的设计原理。原文TVM单元的定义:TVM的内存和持久化存储由单元(cells)组成。每个单元可以包含最多1023位的数据和最多四个对其他单元的引用。数据和引用的结构:从低级单元操作的角度来看,数据位和单元引用不会混合在一起。
2024-10-16 12:07:38
1090
原创 TL语言讲解
3. 命名规则: 在复合构造中,点号后面的部分需要遵循特定的命名规则:类型标识符的首字母应该是大写的,而构造函数标识符的首字母应该是小写的。这就像在建造城堡的时候,你可能会突然想到还需要一些特殊形状的积木块,这时你可以拿出一张新的图纸,上面写着 "--types---",然后列出所有额外需要的积木块类型。总结来说,这段话强调了在TL语言中,你可以使用通用的构造函数来处理不同类型的向量,并且TL语言提供了一种简洁的泛型类型表示法,使得定义和使用这些类型更加方便。你会按照一定的顺序和方式将这些积木块组合起来。
2024-10-15 15:58:53
744
原创 ton fift的c++程序设计与实现(二)
public:定义了一个类,它可能代表 Fift 语言中的一个继续(continuation)对象。public关键字表示类的公共接口,这些方法可以被外部访问。是一个引用参数,用于输出到流(如控制台或文件)。是一个常量引用参数,用于传递一个上下文对象,而不需要复制它。bool返回类型表示方法执行成功或失败。
2024-10-15 10:20:07
383
原创 TON(六)——fift算法,注释的改写
fift是一门十分强大的栈编程语言,它可以实现自身的拓展,在TON中它是由c++编译而成的语言,可自身依然具有很高的拓展性。接下来为大家演示几个有趣的算法,今天先来改个注释玩玩。
2024-10-14 11:21:14
809
原创 TON(五)——main函数的基本初始操作
b>:这个操作接受一个构建器作为输入,并将其转换成一个新的单元(Cell),这个单元包含了构建器中所有的数据。开始一个构建器build,在 Fift 语言中, 是两个用于操作构建器(Builder)的原语(primitives)。在 Fift 语言中,元组(Tuples)和列表(Lisp-style lists)是两种不同的数据结构,但只是语义上的不同,实际上两者底层是互通的。列表是 Fift 中用来表示序列的一种数据结构,它是由一系列元素组成的,每个元素都可以是任意类型。
2024-10-12 17:16:44
1027
原创 TON(四)底层编译——PROGRAM{
这次我们将详细讲解PROGRAM{,在上一期我们介绍了 PROC 这次将介绍一下对于fift程序的识别接口。PROCGRAM{例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
2024-10-12 12:50:14
971
原创 TON(三)空合约Func汇编为fift的底层(1)——PROC指令
在上文中我们详细介绍了toncli的编译命令,这次我们将深入底层来剖析一下,一个空的func合约是在做什么PROC@def-procsbitsidict!:这个词的作用是将一个值v(一个切片)与一个整数键x一起添加到字典D中。:这是idict!的栈效应,描述了操作前后栈的变化。v:要添加到字典中的值,通常是一个切片(Slice)。x:与值v关联的键,是一个有符号的大端整数。D:要添加键值对的字典,可以是一个单元(Cell)或者空值(Null)。n:键x的位数,表示键是一个n位的整数。D′。
2024-10-11 20:19:03
1031
原创 TVM虚拟机白皮书翻译中文文档(上)
本文是作者对TVM虚拟机文档的精翻,我将编写简单的markdown文档,将一些注释通过括号[ ]表示,并结合自己的理解来做一些扩充,之所以选择CSDN平台,是因为这里的中国用户人口基数大,网站不需要代理即可访问,其次希望自己的热爱和分享可以为TON提供支持。后续本人建立关于ton fift 拓展开发,fiftbase文档,以及程序设计的相关课程本文翻译为2020年,tvm白皮书原作者: 尼古拉·杜罗夫 2020年3月23日翻译 : krasha摘要。
2024-09-25 21:33:29
1150
原创 TVM和EVM的比较
TVM和EVM是目前主流的两大区块链虚拟机,我们今天要来讲解一下他们的异同TON区块链的TVM(TON虚拟机)与以太坊的EVM(以太坊虚拟机)在多个关键方面有所不同,这些差异为开发者提供了独特的优势。1. 资源计量:TVM使用“能量”单位而非EVM的“gas”,提供了更为稳定的费用结构。2. 智能合约地址:TVM中使用 CREATE2 指令创建的合约地址前缀为 0x41 ,与EVM的 0xff 不同。3. 预编译合约:TVM在执行某些预编译合约时,如 Ripemd160 ,会采用不同的计算方法。
2024-09-18 12:01:12
832
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人