随笔分类 -  ReverseCore 学习笔记

摘要:调试器进程经过注册后,每当调试者发生调试事件(Debug Event)时,OS就会暂停其运行,并向调试器报告相应事件.调试器处理事件后,被调试者继续运行. 调试器必须处理EXCEPTION_BREAKPOINT异常,对应汇编指令为INT3,IA-32 编码为0xCC. 调试器只需要在断点的起始位置将 阅读全文
posted @ 2020-08-02 20:45 Rev_omi 阅读(203) 评论(0) 推荐(0)
摘要:钩取的流程: 1.使用反汇编/调试器把握程序的结构和工作原理. 2.开发需要的"钩子"代码,用于修改Bug,修改程序功能. 3.灵活操作可执行文件与进程内存,设置"钩子"代码. 使用场景: 程序无源代码或难以修改. API: Application Programming Interface,应用程 阅读全文
posted @ 2020-07-29 15:05 Rev_omi 阅读(410) 评论(0) 推荐(0)
摘要:说白了就是将汇编指令直接转换为IA-32的16进制格式.// CodeInjection2.cpp // reversecore@gmail.com // http://www.reversecore.com #include "windows.h" #include "stdio.h" typed 阅读全文
posted @ 2020-07-28 21:26 Rev_omi 阅读(300) 评论(0) 推荐(0)
摘要:实现代码注入不仅需要将需要执行的代码写入对应的进程,还需要将对应的数据也写入其中. 代码注入是一个可执行程序对另一个程序的注入,main函数通过调用InjectCode函数实现注入 BOOL InjectCode(DWORD dwPID) { HMODULE hMod = NULL; THREAD_ 阅读全文
posted @ 2020-07-27 20:13 Rev_omi 阅读(144) 评论(0) 推荐(0)
摘要:前面的代码没有什么特别的意义,了解即可.需要注意的是dummy这段代码. 前面的代码主要是为了执行想要的功能,在一加载DLL时就能执行.而dummy()函数是为了保证此DLL文件能够顺利的添加到TextView.exe文件的导入表中(然后由程序在执行时会加载此DLL文件). PE文件中的IDT(Im 阅读全文
posted @ 2020-07-27 00:36 Rev_omi 阅读(463) 评论(0) 推荐(0)
摘要:DLL卸载是通过调用 FreeLibrary() API. 每个内核对象( Kernel Object )都拥有一个引用计数( Reference Count ),代表对象的被使用的次数. 使用LoadLibrary() 会 +1, FreeLibrary() 会 -1.FreeLibrary() 阅读全文
posted @ 2020-07-25 16:38 Rev_omi 阅读(299) 评论(0) 推荐(0)
摘要:使用LoadLibrary()API加载某个Dll时,Dll会被加载到进程,然后会自动运行DllMain()函数. OS会将已注册的Dll直接注入目标进程,这也是上一章能成功的原因. Dll注入主要使用以下三种方法: 1.创建远程线程 CreatRemoteThread(). 2.使用注册表( Ap 阅读全文
posted @ 2020-07-24 23:20 Rev_omi 阅读(284) 评论(0) 推荐(0)
摘要:Windows向用户提供GUI,以事件驱动的方式工作. 常规的Windows消息流: 发生键盘输入事件时,WM_KeyDown消息被添加到OS消息队列. OS判断哪个应用程序发生了事件,然后从OS消息队列重取出消息,添加到应用程序的消息队列中. 应用程序监视自身的消息队列,发现新添加的消息后,调用相 阅读全文
posted @ 2020-07-22 22:27 Rev_omi 阅读(327) 评论(0) 推荐(0)
摘要:4010F5 - 401249 xor 44 401007 - 401086 xor 7 4010F5 - 401249 xor 11 4010F5 - 401249 校验和 40124A - 401280 xor 17 程序很简单,循环做几个xor , 一个校验和. 两种思路,第一是将代码写到不被 阅读全文
posted @ 2020-07-21 20:45 Rev_omi 阅读(128) 评论(0) 推荐(0)
摘要:PE头在进程装载的时候使用格式比较固定,从中找到需要的信息后不必过多关注,只需要找到还原后的节区体即可。 从文件中的EntryPoint找到进程入口: 占用不需要的元素,其在节区如下区域中插入代码: 蓝色框中是可选头所占区域,其余的到16F为多余的区域。 这条命令将ESI所指的区域中的27个Dwor 阅读全文
posted @ 2020-07-19 21:26 Rev_omi 阅读(206) 评论(0) 推荐(1)
摘要:对两个PE文件进行对比分析: 可以发现,对各个结构体进行了重叠。首先观察PE头,DOS存根被省掉。 从3C地址处,找到NT头地址,在10H处。即DOS头和NT头进行了重叠。 文件头倒数第二个元素(SizeOfOptionalHeader)的值为148H。 由值10B找到可选头,下面一行即为Entry 阅读全文
posted @ 2020-07-15 22:03 Rev_omi 阅读(118) 评论(0) 推荐(0)
摘要:PE重定位 使得硬编码在程序中的内存地址随当前加载地址的变化而变化就是PE重定位. 若不添加重定位,而加载时内存地址被占用,则会出现"内存地址引用错误",使得程序异常终止. PE重定位的操作原理: 查找硬编码地址需要用到重定位表(Relocation Table),它是记录硬编码地址偏移的列表.是P 阅读全文
posted @ 2020-07-06 19:03 Rev_omi 阅读(268) 评论(0) 推荐(0)
摘要:PE重定向 向进程的虚拟内存加载PE文件时,文件会被加载到PE头的ImageBase所指向的地址处时.存在地址被占用的风险. EXE文件会优先被加载到内存,所以不用担心重定位问题. 在Windows Vista之后的版本引入了ASLR安全机制,运行程序exe都会被加载到不同的地址. 此处应注意(在w 阅读全文
posted @ 2020-07-03 15:42 Rev_omi 阅读(404) 评论(0) 推荐(0)
摘要:对UPX压缩的Notepad.exe程序进行分析. 如图分析,第一个节区UPX0,可以看出,VirtualSize的值为10000H,而SizeOfRawData为0. 第一个节区内目前是没有任何数据的,但是虚拟地址的大小却为10000H,可以推测,它后面会放入数据 即解压后的数据. 跟踪程序执行的 阅读全文
posted @ 2020-07-01 15:57 Rev_omi 阅读(155) 评论(0) 推荐(0)
摘要:TinyPe是为了挑战做出更小的PE文件而出现的,现在对它进行分析.从书上的网站中找到网址并下载. 可以看到这个PE文件的大小已经被减少到了84H字节. 且可以正常运行: PE知识可知:DOS头的大小为40字节,NT头为F8字节,此处必然进行了删减和覆盖. 先观察DOS头,由于DOS头的数据中,重要 阅读全文
posted @ 2020-06-27 16:22 Rev_omi 阅读(461) 评论(1) 推荐(1)
摘要:EAT 是一种核心机制,使不同的应用程序可以调用库文件中提供的函数.PE中的结构体Image_Export_Directory保存着导出信息,且只有一个结构体. DataDirectory[0]结构体中的第一个元素是地址,第二个是大小. 有下面几个重要的成员: 1#.NumberOfFunction 阅读全文
posted @ 2020-06-26 14:29 Rev_omi 阅读(388) 评论(0) 推荐(0)
摘要:DLL(Dynamic Linked Library) 加载DLL的方式实际有两种:一种是显示链接(Explicit Linking),程序使用DLL时加载,函数使用完毕时再释放内存; 一种是隐式链接(Implicit Linking),程序开始时就加载DLL,程序终止时再释放占用的内存. 而IAT 阅读全文
posted @ 2020-06-24 13:09 Rev_omi 阅读(2347) 评论(0) 推荐(0)
摘要:一年前看过一次,但没有实实在在的理解,这次争取结合实际的PE文件再看看. 一般来说,很多文件为了提高使用率,都会使用一个"最小基本单位"的概念.PE文件中各节区的起始位置在某个最小单位的倍数上. 若不够,则空白区域用NULL填充. 相对虚拟地址(RVA):从某个基准地址开始的相对地址. 虚拟地址(V 阅读全文
posted @ 2020-06-23 17:17 Rev_omi 阅读(416) 评论(0) 推荐(0)
摘要:首先拿到程序,先跑一遍,看看大致的流程. 程序一启动会弹出一个NAG,要去除它. 一般来说,只要是启动窗口都会调用函数名字里有MessageBox的函数.于是在跨模块调用中搜索: 可以发现,这些函数都是user32.dll中的函数,属于系统函数,因为VB的特性,它最终会调用系统函数,所以在此处断应该 阅读全文
posted @ 2020-06-20 18:28 Rev_omi 阅读(499) 评论(0) 推荐(0)
摘要:VB文件的使用名为MSVBVN60.DLL,是VB的专用引擎.应注意,VB语言使用的是Unicode字符串 使用VB文件可以编译为本地代码(Native-Code)与伪代码(Pseudo-code). 本地代码使用易于调试器解析IA-32指令;伪指令是一种解释器(interpreter)语言,它使用 阅读全文
posted @ 2020-06-18 20:56 Rev_omi 阅读(286) 评论(0) 推荐(0)