逆向学习
文章平均质量分 84
骑着驴子追宝马
这个作者很懒,什么都没留下…
展开
-
PE-重定位表
按照上述思路,可写代码打印重定位表的信息(不打印具体项,但按照上面公式打印具体项的数量)但这里注意一个问题,就是遍历这个重定位表,是根据这一块的 VirtualAddress 和 SizeOfBlock 结束后,下一块 VirtualAddress 和 SizeOfBlock 是否全0 来判断重定位表是否结束的。1、每个程序都有一个独立的4G内存空间,当你双击一个程序时,操作系统就为你开辟一个虚拟的4g内存空间,然后就开始贴图,将各个PE文件贴到内存空间,当贴完之后,eip指向程序入口点就开始跑了。原创 2022-10-27 14:56:33 · 930 阅读 · 0 评论 -
PE-导出表
为什么要分成3张表? 1、函数导出的个数与函数名的个数未必一样.所以要将函数地址表和函数名称表分开. 2、函数地址表是不是一定大于函数名称表? 未必,一个相同的函数地址,可能有多个不同的名字. 3、如何根据函数的名字获取一个函数的地址?正在上传…重新上传取消4、如何根据函数的导出序号获取一个函数的地址?正在上传…重新上传取消为了再巩固一下,这里再举一个真实的例子,根据上面的规则自己走一遍。.dll 导出函数由以下def 文件导出,可见序号为 2 3 5 6EXPORTS。原创 2022-10-27 14:54:10 · 247 阅读 · 0 评论 -
静态-动态链接库
在学习导入表、导出表之前,由于导入导出表需要用到静态链接库或者库,所以先来学习一下我们学过如果一个功能的代码需要被我们自己反复使用,即复用,那么可以定义成函数现在如果要多人实现代码的复用,比如我写的一段代码要给别人用,不可能直接把代码复制一份发给别人,这样如果很多人要使用,就不方便,所以可以通过下面的两种方式实现:静态链接库动态链接库。原创 2022-10-27 14:46:47 · 1757 阅读 · 0 评论 -
数据目录表
我们当时解析可选PE头时,有一个字段为DWORD,的值为多少,说明下面的_;这种类型的结构体就有多少个我们编写一个程序,这个程序的PE结构分节,有代码节,数据节等等节,但是不能理解成一个这些节中只有我们写的代码或者定义的变量等,编译器也会替我们往每一个节中加很多重要的内容:比如我们写代码时会使用一写系统提供的函数,那么编译器就需要添加这个函数的相关信息,告诉系统需要去哪里找到这个函数;一个程序不仅可以使用别的函数,也可以提供函数给别人程序或人使用,所以此时编译器会添加此程序中供别人使用的函数相关信息。原创 2022-10-27 14:44:26 · 556 阅读 · 0 评论 -
新增节-添加代码
8.修改在文件中对齐的大小SizeOfRawData,这个值和内存中对齐前的一样 9.修改在文件中的偏移PointerToRawData,实际就是上一个节的在文件中的偏移PointerToRawData+在文件中对齐后的尺寸SizeOfRawData 10.修改最后一个节 Characteristics ,节的属性,60000020 表示代码节属性。2、如果第一条的空间也不足, 就扩大最后一个节的尺寸,扩大最后一个节不影响其它节。扩大节的步骤: (Ex 新增节的大小)添加节并实现插入shellcode。原创 2022-10-27 14:22:44 · 472 阅读 · 0 评论 -
代码节空白区添加代码
和上述过程类似,但是直接在ImageBuffer中改我们计算E8和E9后面的值就可以不用再将文件地址转为内存地址了,在哪里添加硬编码,直接取这个地址代到公式中进行计算即可,更方便一些,但是winhex工具目前为止无法实现,虽然可以修改,但是最后没办法保存,因为如果保存,只能保存此时的全部数据,即运行时拉伸过的全部数据到一个新的文件中,但是我们保存到硬盘上,是需要没有拉伸的,即文件对齐的,所以可以改,但是最后没法保存,不信就往下看。它不是C函数库的标准函数,而是一个API,我们可以用C语言调用API函数。原创 2022-10-27 14:21:43 · 726 阅读 · 3 评论 -
PE加载过程 FileBuffer-ImageBuffer
PE加载过程 FileBuffer-ImageBuffer原创 2022-09-22 22:19:01 · 743 阅读 · 0 评论 -
扩大节-合并节
注意:扩大节最好在最后节扩展 不然要修改好多东西一:扩大节1、拉伸到内存2、分配一块新的空间:SizeOfImage+Ex3、将最后一个节的SizeOfRawData 和 VirtualSize改成NN = (SizeOfRawData或者Virtualsize 内存对齐后的值)+Ex4、修改sizeofimage大小。原创 2022-10-19 17:55:14 · 184 阅读 · 0 评论 -
内存分配-文件读写
一、无参数的宏定义的一般形式为:# define 标识符 字符序列C程序->替换(预编译时)->编译->链接->硬编码(0x21)int fun(){}{}{//....printf("测试信息");}1.只作字符序列的替换工作,不作任何语法的检查 2.如果宏定义不当,错误要到预处理之后的编译阶段才能发现测试验证代码{}{}{//....}{fun3();return 0;}原创 2022-10-27 14:09:58 · 1395 阅读 · 0 评论 -
PE头解析-字段说明
Windows平台:PE(Portable Executable)文件结构Linux平台:ELF(Executable and Linking Format)文件结构。原创 2022-10-27 14:14:14 · 2181 阅读 · 1 评论 -
节表(40字节)
节表:相当于这本书的目录{");puts("申请失败");if(!n){printf(" 读取数据失败!");}}{{printf("不是有效的MZ标志\n");return;}printf("********************DOC头********************\n");printf("MZ标志:%x\n",pDosHeader->e_magic);原创 2022-10-27 14:17:27 · 455 阅读 · 0 评论