逆向工程
文章平均质量分 80
1390811049
这个作者很懒,什么都没留下…
展开
-
Windows对异常的处理
异常处理异常产生后,首先是要记录异常信息(异常的类型、异常发生的位置等),然后要寻找异常的处理函数,称为异常的分发,最后找到异常处理函数并调用,称为异常处理。异常的分类cpu产生的异常执行指令时检测到的错误,除0,GP,无效指令Machine Check Exceptions, 总线错误,ECC错误,Cache错误预先埋伏的,int 3,调试异常程序产生RaiseException,Win32 APIC++,throw Exception,编译器会翻译为对RaiseException原创 2021-11-06 00:05:28 · 615 阅读 · 0 评论 -
调试器的原理
软件断点int3指令机器码为1字节,即0xCC没有数量限制局限性属于代码类断点,即可以让CPU执行到代码段内的某个地址时停下来,不适用于数据段和I/O空间对于在ROM(只读存储器)中执行的程序(比如BIOS或者其他固件程序),无法动态增加软件断点。因为目标内存是只读的无法动态写入断点指令。这时就要使用我们后面要介绍的硬件断点。实验是用windbg给MessageBoxW下断点,windbg只有在程序运行的时候才会把断点的地方改为int30:011> u user32!Mess原创 2021-11-05 23:20:46 · 939 阅读 · 0 评论 -
x64汇编
x64是AMD64与Intel64的合称,是指与现有x86兼容的64位CPU。在64位系统中,内存地址为64位。x64为环境下寄存器有较大的变化。x64系统通用寄存器的名称,第1个字母从"E"改为"R"(例如"RAX"), 大小扩展到64位,数量增加了8个(R8~R15), 扩充了8个128位XMM寄存器(在64位程序中,XMM寄存器经常被用来优化代码)。64位寄存器与x86下的32位寄存器兼容,例如RAX(64位)、EAX(32位)、AX(低16位)、AL(低8位)、AH(8-15位)。x64新扩展的原创 2020-09-15 00:27:15 · 7058 阅读 · 1 评论 -
IDA的使用
简介ida可以分析的文件格式也非常多 包括windows下的pe格式文件(.exe .dll .sys)linux 下的elf文件(.elf .so )mac系统的常见文件格式,以及一些不常见到系统的文件格式。ida的功能强大,对于一般的无壳保护,无混淆代码的程序ida能直接反汇编出位代码(F5快捷键),在一定程度上减少了逆向分析的难度和门槛。ida分为32位和64位,在进行逆向分析时选择32-bit IDA分析32位程序,64-bit IDA 分析64位程序。一般来说直接ok打开,ida会帮你原创 2020-09-12 00:57:28 · 3453 阅读 · 1 评论 -
X64Dbg使用教程
读取内存数据字节/字/双字/四字/指针(ptr)ReadByte,Byte,byte(addr):从 addr 读取一个字节,并返回该值。ReadWord,Word,word(addr):从 addr 读取一个字(2字节),并返回该值。ReadDword,Dword,dword(addr):从 addr 读取双字(4字节),并返回该值。ReadQword,Qword,qword(add...原创 2020-04-08 23:35:30 · 39260 阅读 · 2 评论 -
InlineHook
HooK MessageBoxA#include <windows.h>#include <iostream>#define DN_PATCH_LENGTH 5DWORD g_dwRetAddress;DWORD g_dwHookAddress;void MessageBoxProc(HWND hWnd, LPCSTR lpText,LPCSTR lp...原创 2020-05-03 14:08:48 · 124 阅读 · 0 评论 -
IAT HOOK
IAT Hook原理在windows系统下编程,应该会接触到api函数的使用,常用的api函数大概有2000个左右。今天随着控件,stl等高效编程技术的出现,api的使用概率在普通的用户程序上就变得越来越小了。当诸如控件这些现成的手段不能实现的功能时,我们还需要借助api。最初有些人对某些api函数的功能不太满意,就产生了如何修改这些api,使之更好的服务于程序的想法,这样api hook就自...原创 2020-05-03 01:38:30 · 277 阅读 · 0 评论 -
VirtualTable(虚函数表)Hook
HOOKHOOK是用来获取,更改程序执行时的某些数据,或者用于更改程序执行流程的一种技术INLINE HOOK直接修改函数的代码虚函数表的HOOK在c++中虚函数的继承会生成一个虚函数表,来确定父类指针指向子类对象时所需要调用的具体的方法,用以实现多态。那么可不可以像静态方法一样直接调用类中的虚函数呢,答案是可行的虚函数表在内存中的分布大致原理如下:实验...原创 2020-05-03 00:56:22 · 1101 阅读 · 0 评论 -
ShellCode注入
注意点:1. 不能有全局变量2. 不能使用常量字符串 ,可以使用这种形式 szTitle = {'a', 'b', 'c', 0};3. 不能使用系统调用,比如不能直接使用MessageBox,因为生成的汇编是 Call [0xxxxxx],这个0xxxxx是导入表的地址,注入的程序导入表地址不同而且导入表中不一定有这个函数,可以使用LoadLibrary配合GetProcAddres...原创 2020-05-03 00:10:45 · 1468 阅读 · 0 评论 -
PE文件结构
什么是可执行文件可执行文件(executable file)指的是可以由操作系统进行加载执行的文件windows平台:PE(Portable Executable)文件结构 Linux平台:ELF(Executable and Linking Format)文件结构一些用到的概念地址空间:这个地址空间指的是PE文件被加载到内存的空间,是一个虚拟的地址空...原创 2020-04-19 18:18:10 · 3938 阅读 · 1 评论 -
硬编码X86
硬编码:机器指令说明:一共有六部分,第一部分前缀指令,只管自己,Opcode是这六部分的核心,Opcod决定ModR/M,ModR/M决定SIB,这三部分是这整条指令的核心,后面两部分属于“配角”,(偏移量和立即数)由核心决定一.前缀指令(“:”)分组:定义 说明 指令 LOCK和REPEAT前缀指令 LOCK(锁地址总线,多核情况下某时刻只允许一个核读...原创 2020-04-12 18:16:42 · 1159 阅读 · 0 评论 -
TEB和PEB
TEB(Thread Environment Block,线程环境块)线程环境块中存放着进程中所有线程的各种信息TEB的访问方法ntdll.NtCurrentTeb() 函数用来返回当前线程的TEB结构体指针NtCurrentTeb() 函数所返回的结构体指针即为 fs:[0x18] 的值,里面的值即为TEB的结构体指针,fs:[0]的值即为TEB的起始地址nt!_TEB ...原创 2020-04-11 17:34:55 · 3104 阅读 · 1 评论 -
植物大战僵尸分析
查找产生僵尸的CALL使用CE搜索地图上僵尸的数量,找到保存僵尸数量的地址,然后CE附件找到增加僵尸数量的语句,因为产生僵尸后一定会增加僵尸的数量。CE附加找访问该地址的代码使用OD在 0043678F - 01 46 10 - add [esi+10],eax 下断点产生僵尸时,断下,查看栈在反汇编窗口中查看第一个CALL,返回这个CALL没有参数,产生僵尸的CA...原创 2020-08-09 14:12:34 · 1438 阅读 · 1 评论 -
DLL注入技术
远程线程注入在一个进程中,调用CreateThread或CreateRemoteThreadEx函数,在另一个进程内创建一个线程(因为不在同一个进程中,所以叫做远程线程)。创建的线程一般为Windows API函数LoadLibrary,来加载一个动态链接库(DLL),从而达到在另一个进程中运行自己所希望运行的代码的目的。BOOL InjectDll(DWORD dwPID, LPCTS...原创 2020-04-05 22:13:47 · 175 阅读 · 0 评论 -
C++与汇编
普通对象class CTest{public: int a; int b; char c; CTest() {} void print() { printf("%d\n%d\n%d\n", a, b, c); }};int main(){ CTest test; test.print(); printf("%d\n%d\n%d\n", test.a...原创 2020-03-29 20:14:50 · 325 阅读 · 0 评论 -
C语言与汇编
函数调用int plus(int x, int y){ return x + y;}int main(){ plus(1, 2); return 0;}对应的汇编分析plus(1, 2);00231DAF push 2 将参数2压入堆栈 参数的...原创 2020-03-22 23:37:30 · 782 阅读 · 0 评论 -
汇编基础
数字在计算中的表示计算机中所有数都是以补码形式存储的,正数的原码、反码、补码相同,负数的反码等于原码取反,补码等于反码加1无符号数: 0000 0001 表示 1 1000 1101 表示 141有符号数: 第一位用于表示符号位 0 正数 1负数 ...原创 2020-03-17 23:17:09 · 916 阅读 · 0 评论 -
Detours库Windows API Hook
什么是Detours简单地说,Detours是微软提供的一个开发库,使用它可以简单、高校、稳定地实现APIHOOK的功能。 Detours是一个可以在x86、x64和IA64平台上测试任意Win32函数的程序开发库。它可以通过为目标函数重写在内存中的代码而达到拦截Win32函数的目的。Detours还可以将任意的DLL或数据片段(称之为有效载荷)注入到任意Win32二进制文件中。Det...原创 2020-02-24 14:50:02 · 7306 阅读 · 1 评论