逆向
文章平均质量分 61
learn112
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
如何使用PostMessage向指定窗口发送消息
PostMessage的第一个参数就是一个HWND类型的窗口句柄这里假设一个场景:使用spy++已经得到窗口句柄的值,如何使用PostMessage1.spy++得到的句柄值是16进制数,需要将其装换为10进制2.将得到的10进制数强转为(HWND)类型3.将转换为HWND类型的10进制数赋值给PostMessage的hWnd即可...原创 2021-01-31 02:02:34 · 1413 阅读 · 0 评论 -
代码注入
代码注入代码注入的核心就是注入可以独立运行的代码什么叫可独立运行的代码?就是代码与数据同时注入,且代码中并没有直接使用API,也不直接使用字符串,而是以引用的方式使用API和字符串(意思就是说间接的先使用一个地址,然后这个地址里面放着数据),而不是直接硬编码数据(直接硬编码会造成在当前进程有效,但是换一个进程,数据地址就变了,那么直接硬编码就出引用错误的地址)这样才能保证代码可以独立运行(也就是说这个代码放到任意一个进程中都可以运行)DLL注入为什么可以直接调用API和数据?因为DLL注入是将原创 2021-01-17 17:01:24 · 519 阅读 · 0 评论 -
WindowsAPI笔记
WindowsAPI笔记GetModuleHandleAHMODULE GetModuleHandleA( LPCSTR lpModuleName);1.如果参数为空,那么返回当前进程的句柄注意:返回的句柄就是该进程在内存中的基址(ImageBase)句柄->基址------牢记2.如果指定了参数,不给扩展名(如:.exe,.dll),那么默认是dll文件该函数就会在程序进程中查找与参数相同的模块字符串找到了,就返回该模块的句柄没找到,返回NULLGetModuleFile原创 2021-01-17 00:29:44 · 367 阅读 · 0 评论 -
通过修改PE文件导入DLL
通过修改PE文件导入DLL修改思路实例1.查看IDT信息图1由上图我们可以得到以下信息:IDT的RVA信息在文件偏移160h处,值为84CCIDT的大小信息在文件偏移164h处,值为64h1.1转到IDT处查看具体信息转到84CC也就是文件偏移76CC共有5个IID结构体(每个IID20个字节,对应一个DLL相关信息),最后一个IID为NULL由上图我们发现并没有足够空间添加我们的DLL,那么转移IDT2.转移IDT由图1可知IDT在.rdata节区,查看.rdata节区原创 2021-01-17 00:21:14 · 1152 阅读 · 0 评论 -
DLL注入
DLL注入什么是DLL注入DLL注入指的是向运行中的其他进程插入我们指定的DLL文件,它是渗透其他进程的最简单有效的方法,借助DLL注入技术,可以钩取API,改进程序,修复BUG等DLL注入基本原理DLL注入的核心就是使目标程序调用LoadLibrary()API,来加载我们的DLL,从而自动执行DLLMain入口函数内的代码DLL注入实现的常见方法1.创建远程线程(利用CreateRemoteThread()API)2.注册表注入(AppInit_DLLs值)3.Windows消息钩取(S原创 2021-01-03 16:48:54 · 557 阅读 · 0 评论 -
Windows消息钩取
Windows消息钩取什么是Windows消息钩取Windows消息钩取就是利用Windows的消息机制,将消息在发往应用程序之前拦截,从而完成我们需要的一些功能,再将消息发给应用程序。举个例子:当我按下键盘的时候,OS会将消息放大消息列表,然后查看是哪个应用程序中发生了消息事件,然后将消息发给应用程序;应用程序将OS发过来的消息放到自己的消息队列中;应用程序监视自己的消息队列,发现OS发过来的消息后,再调用相应的事件处理程序。那么消息钩取就是在这中间做文章,利用SetWindowsHookE原创 2021-01-03 12:09:00 · 361 阅读 · 0 评论 -
内嵌补丁
内嵌补丁需求有时候我们直接修改OEP代码是不行的,因为该区域有可能被运行时压缩或者被加密过,直接改会引发程序异常,这个时候我们可以换个思路,将写好的补丁放入内存中空的区域,然后再解密之后,先JMP到我们配置的区域,完成了我们的代码后再JMP到OEP处运行程序运行时压缩流程1.很多个解压缩循环(解码OEP)2.配置IAT3.JMP到OEP加密代码执行流程1.解密(解密OEP代码)2.校验解密之后的和3.如果校验和正确,则JMP到OEP,不正确,则程序异常开始内嵌补丁之旅解密循环首先原创 2021-01-01 22:37:47 · 405 阅读 · 0 评论 -
UPack PE文件分析
UPack PE文件分析UPackUPack 是一个运行时压缩器,它会将PE文件打乱,使正常PE文件变形,从而让分析者摸不清头脑,另外,经过UPack压缩的PE文件会小很多经过UPack压缩的PE文件打开经过UPack压缩的PE文件,我们可以看到文件结构与普通PE文件大不一样(包括文件头,文件节区),如下图:DOS头有,但是只有一个签名5A4D(MZ)DOS存根没有了看到00004550(PE)说明NT头有,但是这个NT头距离DOS头也太近了。。。NT头的签名后面接着就是文件头(20个字节原创 2020-12-31 16:54:25 · 600 阅读 · 0 评论 -
基址重定位表
基址重定位表基址重定位表(BASE RELOCATION Table)位于可选头最后一个成员的第6个元素转到基址重定位表将基址1000+424(低12位)得到1424,这个RVA就是在文件中的硬编码的地址转到1424(位于第一个节区)1424地址对应的值为010010C8将010010C8-01000000(基址)=10C8再将10C8+00D90000(实际加载地址)=00D910C8得到程序硬编码的实际映射地址这个地址(00D910C8)其实就是IAT在映射中的地址基址重定原创 2020-12-30 15:09:09 · 280 阅读 · 0 评论 -
PE文件中的IAT和IET
PE文件中的IAT和IETIATIAT中文名叫导入地址表在IAT中存放的是导入的函数的RVA数组,每个元素对应一个函数的地址(RVA)通过这个RVA即可找到导入函数的位置所以说我们必须先知道IAT在哪1.找到可选头结构体的最后一个成员可选头结构体的最后一个成员是DataDirectory它是一个结构体数组typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE M原创 2020-12-29 16:43:38 · 1237 阅读 · 0 评论 -
如何查找函数的参数个数
如何查找函数的参数个数1.当在函数外面时,已经运行到该函数位置(还没调用),观察当前栈中内存情况,记下当前栈顶位置如上,当前ESP为EBP-78然后F8直接调用并跳过函数,再观察栈顶位置可以看到ESP变为EBP-70(这个就是压参前的ESP位置)由此,我们可以推断7400A294地址处的函数有2个参数,并且能够知道该函数采用的是stdcall调用约定该函数内部在返回的时候将ESP+8,使ESP恢复到调用函数前(应该说是压入参数前)的位置这里验证一下,进入7400A294地址处的函数:可原创 2020-12-28 01:04:15 · 2839 阅读 · 0 评论 -
函数调用约定
函数调用约定栈栈其实就是进程中的一块内存空间,其大小被记录在PE头中,也就是说当进程运行时,栈的大小就已经确定了栈主要是用来存放常量,变量,函数参数以及函数返回地址等当函数执行完的时候,ESP的值要恢复到调用前的值,这样才能保证栈的大小不会变化怎样才能保证ESP的值恢复?有三种主要方式,也就是函数调用约定三种调用约定cdecl主要是在C语言中使用的约定,由调用者负责处理栈看一下这里的CALL 401020;在调用函数之前压入了3个参数到栈,这个时候ESP是往上(低地址)移动了12个字原创 2020-12-27 20:40:58 · 305 阅读 · 0 评论 -
关于函数返回地址与EBP的关系总结
关于函数返回地址与EBP的关系总结当前EBP地址的值是上一个函数(就是调用当前函数的函数)的基址指针,这个值(一个地址)的值就是上一个函数刚开始调用时EBP所持有的值当前EBP地址的下一个地址(也就是EBP+4,根据环境不同而不同,还可能是EBP+8)的值,就是当前函数的返回地址当前EBP地址的值(也就是上一个函数的基址指针)的下一个地址的值就是上一个函数的返回地址每次进入函数,首先压入的就是该函数的返回地址,然后生成栈帧,压入上个函数的基址指针(也就是上个函数的EBP的地址)总结:每个函数内部原创 2020-12-27 14:14:08 · 3019 阅读 · 0 评论 -
IA-32寄存器基本介绍
IA-32寄存器基本介绍什么是寄存器寄存器就是CPU内部用来存放数据的一些小型存储区域特点:由于距离CPU近,它的读写速度非常快,常用来暂时存储数据寄存器的种类Basic program execution registers->基本程序运行寄存器x87 FPU registersMMX registersXMM registersControl registers->控制寄存器Memory management registers->内存管理寄存器Debug re原创 2020-12-27 12:48:38 · 1875 阅读 · 0 评论 -
小端序标记法
小端序标记法什么是字节序字节序就是多字节数据在计算机内存中存放的字节顺序分为小端序排序法和大端序排序法BYTE b = 0x12;WORD w = 0x1234;DWORD dw = 0x12345678;char str[] = "abcdef";当数据是一个字节时,不管是小端序还是大端序,排列的结果都是一样的当数据是多字节时,小端序采用逆序排序,大端序采用顺序排序大端序排序多用于大型UNIX服务器和RISC系列的CPU中,网络传输中也多用大端序小端序中在内存低位存原创 2020-12-25 19:17:19 · 396 阅读 · 0 评论 -
逆向分析之基本知识点
逆向分析之基本知识点EPEnterPoint 入口点EP是windows可执行文件的代码入口点,是程序的最先执行的代码的起始位置,它依赖于CPU(就是用OD打开exe最初始的位置)可以看到一个CALL和JMP指令CALL指令调用的函数里面就是程序的启动函数启动函数并不是我们写的,而是编译器(VS)为了保证程序的运行自动添加的启动函数里面通常有许多系统API(红色注释部分)启动函数不只是CALL 0040270c这条指令,JMP 0040104F跳转的0040104F地址处也是启动函数注原创 2020-12-25 18:48:58 · 798 阅读 · 0 评论 -
WOW64机制
Windows64位计算环境WOW64机制什么是WOW64机制WOW64(Windows on Windows 64)机制就是一种在64位OS中支持运行32位应用程序的机制起源:微软认为64位OS的核心就是要向下兼容32位OS,所以创造了一个WOW64机制,使得32位应用程序能够很好的移植在64位OS中WOW64机制的原理在Windows 64位OS中,64位应用程序会加载kernel32.dll(64位)和ntdll.dll(64位),32位应用程序会加载kernel32.dll(32位原创 2020-12-18 00:51:15 · 1612 阅读 · 0 评论 -
PE32+与PE32的PE头的区别
PE32+与PE32的PE头文件的区别NT头NT头的区别64位与32位PE头最大的区别就在NT头的第三个成员,也就是可选头(IMAGE_OPTIONAL_HEADER)PE32+的NT头PE32的NT头可以看出,这两个NT头的区别主要在第三个成员:可选头另外文件头也稍有不同主要体现在机器码Machine的值上X64中的文件头Machine值(机器标签)为8664X86中的文件头Machine值为014CIA-64(不向下兼容32位的64位操作系统)中的文件头Machine值为02原创 2020-12-16 16:53:51 · 4862 阅读 · 0 评论
分享