08 2020 档案

摘要:PEB 结构体也很庞大,与代码逆向分析相关的有: ① BeingDebugged Win 7 kernel32.dll 中此 API 检查当前进程是否处于调试状态: 先找到 TEB ,再找到 PEB ,最后找到该值。 ② ImageBaseAddress GetModuleHandle() API 阅读全文
posted @ 2020-08-29 16:42 Rev_omi 阅读(168) 评论(0) 推荐(0)
摘要:TEB(Thread Environment Block,线程环境块),此结构体包含进程中运行的线程的各种信息,进程中的每个线程都对应一个 TEB 结构体。 由于微软的符号服务器无法正常访问,因此在没有符号的情况下,无法查看自己系统中 TEB 结构体。 TEB 结构体成员众多且结构复杂,在用户模式下 阅读全文
posted @ 2020-08-29 15:42 Rev_omi 阅读(283) 评论(0) 推荐(0)
摘要:TLS(Thread Local Storage,线程局部存储)回调函数(Callback Function)常用于反调试。 TLS 回调函数的调用运行要先于 EP 代码的执行。它是各线程独立的数据存储空间,可修改进程的全局/静态数据。 若在编程中启用了 TLS,PE 头文件中会设置 TLS 项目, 阅读全文
posted @ 2020-08-27 22:44 Rev_omi 阅读(1301) 评论(0) 推荐(0)
摘要:启动函数 Win32 应用程序源码中,都会有一个 WinMain 函数.但 Windows 程序的执行并非是从 WinMain 函数开始的.这段代码由编译器生成,完成进程初始化. 函数返回值后,进行一些必要的处理,最后调用 ExitProcess() 函数. 函数 call 指令会奖其之后的指令地址 阅读全文
posted @ 2020-08-25 15:30 Rev_omi 阅读(325) 评论(0) 推荐(0)
摘要:由于从 Win 7 开始引入了会话机制,因此使得之前通过 CreateRemoteThread() API 注入的旧方法对某些进程(服务进程)不再适用. 注入非0级的会话层能够成功,而对于0级会话的进程,例如 svchost.exe 会注入失败. 探索一下原因: 在 OD 中打开程序,并输入参数( 阅读全文
posted @ 2020-08-24 16:08 Rev_omi 阅读(374) 评论(0) 推荐(0)
摘要:会话( Session )指登录后的用户环境.大部分OS允许多个用户同时登录,并为每个用户提供独立的用户环境. Win 7 以前, 登录用户的会话 ID 从0开始, Win 7 及以后用户的会话 ID 从1开始. 取而代之的是,系统会话 ID 为0. 由于会话0中的进程并未完全隔离,因此会话1中的进 阅读全文
posted @ 2020-08-20 13:46 Rev_omi 阅读(105) 评论(0) 推荐(0)
摘要:WOW64Test_x86.exe: 多熟悉熟悉程序的流程,多看,多调试. ①被调试者是一个控制台应用程序,那么会调用 GetCommandLine() 返回当前程序的路径. ②main() 函数前会有 argc 与 argv 的压栈, 一个是参数个数,一个是带有程序名字的路径指针. WOW64Te 阅读全文
posted @ 2020-08-19 10:35 Rev_omi 阅读(90) 评论(0) 推荐(0)
摘要:内核调试: 微软公开了 Windows 系统库的符号文件,可以用 WinDbg 调试. ①本地内核调试: cmd 窗口中输入 " bcdedit -debug on " -> 重启 -> 打开 WinDbg -> File -> Kernel Debugging -> Local -> 确定. ②2 阅读全文
posted @ 2020-08-18 20:41 Rev_omi 阅读(198) 评论(0) 推荐(0)
摘要:PE32+ 是 Windows OS 使用的可执行文件格式. 64位 Windows OS 中进程的虚拟内存为16TB,其中低位的8TB供用户模式使用.高位的8TB供内核模式使用. IMAGE_NT_HEADERS IMAGE_FILE_HEADER x86 PE32 固定为 014C. x64 P 阅读全文
posted @ 2020-08-17 17:03 Rev_omi 阅读(679) 评论(0) 推荐(0)
摘要:64位系统中内存地址为64为,因此含有绝对地址的指令大小比原来增加4个字节. 64位可以表示的数为 264 = 16EB .考虑到实际性能,减少内存管理的开销.实际没用到这么多. 通用寄存器 通用寄存器大小扩展到64位,数量也增加到18个( 新增 R8~R15 寄存器 ).同时,64位本地模式不使用 阅读全文
posted @ 2020-08-14 18:50 Rev_omi 阅读(209) 评论(0) 推荐(0)
摘要:Intel 64 一般用于高性能服务器,平常很少见到. 所以32位源码移植到64位系统时,只需要转换一下指针的类型就可以了. WOW64: 两个文件夹中的 DLL 文件 的名字都一样,大小不同. 即32位程序返回的文件夹名会被修改成64位的文件夹名,但是文件内容依然是32位的. 并不是直接将上述的文 阅读全文
posted @ 2020-08-12 16:22 Rev_omi 阅读(158) 评论(0) 推荐(0)
摘要:Win 7 中 Process explorer 中 IE 浏览器所加载的 DLL 文件: 如何查看库文件的导出函数: 下载 VS 后直接在搜索栏输入 VS (第一个和第三个都可以),打开命令窗口,输入 命令 " dumpbin /exports 库文件绝对路径 " 就可以看到函数. 若后面再加上" 阅读全文
posted @ 2020-08-10 19:54 Rev_omi 阅读(500) 评论(0) 推荐(0)
摘要:OllyDbg 是有 Oleh Yuschuk 编写的一款具有可视化界面的用户模式调试器.可以在各种版本的 Windows 上运行,但在 NT 架构上是最好的. plugin 目录中存放插件,直接将插件放里面,OD即可检测到. Debug -> Select Import Librariers ,可 阅读全文
posted @ 2020-08-09 13:40 Rev_omi 阅读(919) 评论(0) 推荐(0)
摘要:前面的方法会频繁的进行脱钩和挂钩操作,并且在多线程环境中容易导致代码错误.因此使用 "热补丁" 技术就很必要了. 热补丁(Hot Patch/Fix ) 又称为7字节代码修改技术. 可以看到,前面七个字节并无实际意义.微软使用这种方法就是为了方便在不关机的情况下临时修改库文件,重启时修改的目标库文件 阅读全文
posted @ 2020-08-08 16:19 Rev_omi 阅读(261) 评论(0) 推荐(0)
摘要:全局钩取 API : ①Kernel32.CreatProcess() ,可以用来创建新进程,其它启动运行进程的 API ( WinExec() , ShellExecute() , system() ) 在其内部也是调用此 API . explorer.exe是 Windows 程序管理器或者文件 阅读全文
posted @ 2020-08-06 16:22 Rev_omi 阅读(303) 评论(0) 推荐(0)
摘要:x86系列的CPU采用 Little-ending 字节序,而网络协议采用的是 Big-ending. 用于16位 Windwos 的API称为 Win16 , 32/64位 的 API 称为 Win32 . Windows 运转的核心是动态链接. ①kernel32.dll 主要负责操作系统核心功 阅读全文
posted @ 2020-08-04 15:40 Rev_omi 阅读(129) 评论(0) 推荐(0)
摘要:隐藏进程(Stealth Process)在代码逆向分析领域中的专业术语为RootKit.它是指通过修改(hooking)系统内核来隐藏进程、文件、注册表等的一项技术. IAT钩取是通过修改IAT值来实现,而API代码修改则是通过将API代码的前五个字节修改为JMP xxxxxxx 指令来钩取API 阅读全文
posted @ 2020-08-03 14:24 Rev_omi 阅读(593) 评论(0) 推荐(0)
摘要:需要明确自己要修改的功能对应的API函数,这个需要经验积累. IAT钩取通过修改IAT中保存的API地址来钩取某个API. 大致流程如下: 1. 通过InjectDll 将自己写的DLL文件注入目标进程. 2. 在自己写的Dll Main函数中获取本进程中的 SetWindowTextW 的函数地址 阅读全文
posted @ 2020-08-02 21:34 Rev_omi 阅读(312) 评论(0) 推荐(0)
摘要:调试器进程经过注册后,每当调试者发生调试事件(Debug Event)时,OS就会暂停其运行,并向调试器报告相应事件.调试器处理事件后,被调试者继续运行. 调试器必须处理EXCEPTION_BREAKPOINT异常,对应汇编指令为INT3,IA-32 编码为0xCC. 调试器只需要在断点的起始位置将 阅读全文
posted @ 2020-08-02 20:45 Rev_omi 阅读(211) 评论(0) 推荐(0)