摘要: IDA中导入函数以粉色显示在函数列表中: start+E4↓p 表示start+E4的地方引用了_main,下箭头表示引用代码在下面,p表示函数过程proc _main↑j 表示_main的地方引用了_main_0,上箭头表示引用代码在上面,j表示jmp 左侧亮蓝色的地址表示运行时库代码或框架代码, 阅读全文
posted @ 2020-11-03 21:20 八转达人 阅读(717) 评论(0) 推荐(0) 编辑
摘要: Fs:[0x18]找到TEB TEB+0x30找到PEB PEB+C处是loader,值为 7747FBE0 Loader(7747FBE0)+0xC处是模块信息表的地址: 模块信息表中是双向环形链表的节点,可以看到上一个节点,下一个节点,hInstance,AddressOfEntryPoint和 阅读全文
posted @ 2020-11-03 21:18 八转达人 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 找到资源并使用: HRSRC hSrc = FindResource(NULL, TEXT("RollName"), TEXT("Exe"));//遍历结构直到获得数据而非目录 DWORD dwSize = SizeofResource(NULL, hSrc); HGLOBAL hResLoaded 阅读全文
posted @ 2020-11-03 21:17 八转达人 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 手动把dll映射到进程空间,需要修复导入表和重定位表,优点是遍历dll的API无法遍历到,有隐藏dll的效果。系统的GetProcAddress也无法找到地址,需要自己实现此功能。 多个dll互相调用需要递归加载。 阅读全文
posted @ 2020-11-03 21:15 八转达人 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 一种重定位方法: g_dwVar dd ? call @F @@: pop ebx sub ebx, offset @B ;运行时的eip减去编译时的eip,算出偏移 mov eax, [ebx + offset g_dwVar] /DLL和/FIXED:NO选项都会产生重定位表,一般会多出一个.r 阅读全文
posted @ 2020-11-03 21:14 八转达人 阅读(188) 评论(0) 推荐(0) 编辑
摘要: VC6中,以下文件libc.lib是静态版,带D的是Debug版,带I的是Import版,带MT的是MultiThread版,带P的是CPP版。 此函数宏的定义有些不同,MASM错把GetEnvironmentStringsA当成了函数 LPCH WINAPI GetEnvironmentStrin 阅读全文
posted @ 2020-11-03 21:12 八转达人 阅读(169) 评论(0) 推荐(0) 编辑
摘要: DEF文件如下所示: EXPORTS Inject @12 MyAdd @14 MySub @17 MyMul @11 NONAME MyDiv @19 g_szInject @15 用调试器加载编译好的dll文件,查看导出信息: 用十六进制编辑器打开dll文件,定位到导出表,可以发现导出的字符串是 阅读全文
posted @ 2020-11-03 21:11 八转达人 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 步骤: 1. 链接选项设置基地址为目标PE的基地址,例如/BASE:0x01000000 2. 从目标PE文件中分析出SizeOfImage,并在自己程序的.code段预留足够的空间,用来把目标程序的代码映射过来 2.1 汇编代码可用org 01000000h预留空间,相当于byte 0100000 阅读全文
posted @ 2020-11-03 21:09 八转达人 阅读(185) 评论(0) 推荐(0) 编辑
摘要: typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; // 0 for terminating null import descriptor DWORD OriginalFirstThunk; // RVA 阅读全文
posted @ 2020-11-03 21:08 八转达人 阅读(213) 评论(0) 推荐(0) 编辑
摘要: typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; //说明性 union { DWORD PhysicalAddress; DWORD VirtualSize; //内存中节的大小,但不一定准 } M 阅读全文
posted @ 2020-11-03 21:05 八转达人 阅读(96) 评论(0) 推荐(0) 编辑
摘要: Portable Executable file format 从命名上看,微软想让PE文件可移植。 注意,虽然IMAGE_OPTIONAL_HEADER结构体总大小0xE0字节,但IMAGE_OPTIONAL_HEADER结构体的最后是数组,数组中究竟有几个元素,可以手动修改。 所以是exe的中I 阅读全文
posted @ 2020-11-03 21:04 八转达人 阅读(93) 评论(0) 推荐(0) 编辑
摘要: VirtualQueryEx可遍历某进程的内存。 内存断点通过VirtualProtectEx设置内存属性实现,当断点命中时,检查访问地址是否在地址表设定范围内,是则等待用户指令,否则将内存属性还原并设单步,单步中断是把内存属性改回去,然后继续运行。 内存断点要注意页边界问题,可禁止用户跨越页边界设 阅读全文
posted @ 2020-11-03 20:56 八转达人 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 一.DR7的情况: R/W0 ~ R/W3: 00 执行对应地址的指令时中断 01 向对应地址写入数据时中断 10 I/O读写时中断,忽略,暂时用不到 11 向对应地址读写数据时都中断,但是从该地址读取指令除外 LEN0 ~ LEN3: 00 1字节长 01 2字节长 10 8字节长(奔腾4或至强) 阅读全文
posted @ 2020-11-03 20:54 八转达人 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 一般断点要满足的3个要求: 1. 运行到指定地址时可挂起程序,此时能提供环境数据给用户,并等待用户操作或命令。 2. 当用户希望继续执行时,能像正常程序一样继续执行。 3. 当再次执行到断点时,还能像步骤1一样挂起程序。 例如用int3,sti, cli等指令替换原机器码,都能实现断点效果。 OD的 阅读全文
posted @ 2020-11-03 20:53 八转达人 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 相关API: DebugBreakProcess LOAD_DLL_DEBUG_INFO中的lpImageName是被调试进程中的 阅读全文
posted @ 2020-11-03 20:52 八转达人 阅读(80) 评论(0) 推荐(0) 编辑