随笔分类 - 逆向工程
摘要:C、C++对应的汇编结构 1、对裸函数的反汇编 对应的汇编 从上面的反汇编代码来看,主函数中调用Function(1,2,3); 从Function(1,2,3)直接jmp到ret返回到主函数空间。 2、对普通空函数的反汇编 普通空函数 对应的汇编结构 这里普通的函数与裸函数对比来看,普通函数编译器
阅读全文
摘要:直接调用0环函数实现ReadProcessMemory&WriteProcessMemory函数 工具 IDA VC++6.0 步骤 一、实现ring0调用ReadProcessMemory 1、ALT+T 找到ReadProcessMemory 2、找到NtReadVirtualMemory(nt
阅读全文
摘要:"转载地址" 最近在研究IAT加密壳,需要获取API的地址来保证shellcode的通用性。 1)利用PEB结构来查找 原理:FS段寄存器作为选择子指向当前的TEB结构,在TEB偏移0x30处是PEB指针。而在PEB偏移的0x0c处是指向PEB_LDR_DATA结构的指针,位于 PEB_LDR_DA
阅读全文
摘要:导入表 导入表是什么? 记录一个可执行文件所用到的其他模块的导出的函数 记录信息:dll列表及其所用用到的函数 在PE中的结构 这3个结构的关系如下图 如图可知,PE加载前和加载后是有些不同的——IAT表中的地址变为模块的RVA或绝对地址 导入表有什么作用? 通过导入表中提供的dll所依赖的函数清单
阅读全文
摘要:逆向笔记——临界区、互斥体、事件、信号量 这些都是什么? 有什么作用,有不同的使用场景,是什么特性/技术让这种场景得以实现的? 临界区、互斥体、事件、信号量是线程同步与互斥的4种方式。只有多个线程同时操作同一公共资源才会产生线程同步与互斥的需求。 多个线程访问引发的线程安全问题 首先来看临界区。 临
阅读全文
摘要:重定位表 什么是重定位表? 用于程序在加载依赖模块时,发生地址冲突的情况下,用来进行模块基址修正的表。 重定位表的结构 数据目录项的第六个就是重定位表结构 通过RVA转FOA,定位第一个IMAGE_BASE_RELOCATION 上图看看重定位表数据 1、内存的块数如何确定:if判断 Virtual
阅读全文
摘要:静态链接库 OD查看模块,没有 TestStaticLib.lib 模块 OD 查看汇编,找到Plus方法,发现 静态链接库编译在调用它的exe中,并没有实现真正的模块化 Plus方法 代码 编译lib stdafx.h stdafx.cpp 把.lib文件放在新工程目录下,调用lib main.c
阅读全文
摘要:1、如何定位导出表: 数据目录项的第一个结构,就是导出表. typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, PIMAGE_DATA_DIRECTORY;
阅读全文
摘要:手工 编译一个带有全局变量的exe 这是代码 打印出来的是全局变量globalVar 在内存中的地址 VA=424a30 PETool看基址=00400000,RVA=VA ImageBase=424a30 00400000 = 24a30 再看看在内存中、文件中的对齐方式 1、如果在内存中和文件中
阅读全文
摘要:备注:添加代码这个原理与加壳、恶意代码的原理类似 基本步骤 1、NoOfSection 数量不要超过 节数量 2、相应节的文件对齐空间要足够代码Code存放 3、找到程序的OEP 3、计算IMAGEBUFF和FILEBUFF之间节的位置转化关系 4、算出JMP CALL〈MessageBoxW〉把位
阅读全文
摘要:平台:winxp, 编译:VC++6.0 工具:PETool PE结构也可以通过PETool查看,比较直观
阅读全文
摘要:周笔记整理——脱壳 什么是壳? 壳是一种软件加密保护软件,它能够保护软件不被非法修改或编译的程序。 壳载入的过程 1、保存入口参数 保证外壳程序执行完后,能够跳转到正确执行的入口。 2、获取壳本身需要使用的API地址 3、解密源程序各个区块的数据 壳一般按区块加密,只有在执行时才能解密,解密完后,把
阅读全文
摘要:概述:寄存器 & 汇编之间的联系 寄存器 是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果。 汇编指令 是汇编语言中使用的操作符合助记符,还包括一些伪指令。 汇编指令 借助 寄存器和存储器完成数据的传输。 一、寄存器 寄存器为了完成数据的 清除、接收、存储、输出、移位
阅读全文
摘要:Window环境下编写Shellcode 一、 什么是shellcode a) 定义 是一段可注入的指令(opcode),可以在被攻击的程序内运行。 b) 特点 独立存在,无需任何文件格式的包装,因为shellcode直接操作寄存器和函数,所以opcode必须是16进制形式。因此也不能用高级语言编写
阅读全文
摘要:32位指令集 1、一般传送指令 MOV指令: 格式: MOV目的-->除CS、IP以外的寄存器或存储器 源-->寄存器、存储器、立即数 ex : MOV ECX ,EDX ; EDX->ECX ECX =00000034H EDX =00000052H 指令执行结果: ECX = 00000052H
阅读全文
摘要:汇编语言 记忆符代替指令的操作码 数字、符号代替操作数或操作数存放位置的一种程序设计语言 采用高级语言使用的数据结构,支持用32位汇编指令进行编程。 汇编程序 汇编语言编写的程序——>机器语言程序 汇编语言源程序 ——> 目标代码或目标程序 汇编语言的特性与机器的特性密切相关: <——CPU工作模式
阅读全文