首页
学习
活动
专区
工具
TVP
发布

Eureka的技术时光轴

专栏作者
338
文章
690209
阅读量
39
订阅数
PE文件学习笔记(五):导入表、IAT、绑定导入表解析
导入表是记录PE文件中用到的动态连接库的集合,一个dll库在导入表中占用一个元素信息的位置,这个元素描述了该导入dll的具体信息。如dll的最新修改时间、dll中函数的名字/序号、dll加载后的函数地址等。而一个元素即一个结构体,一个导入表即该结构体的数组,其结构体如下所示:
战神伽罗
2022-03-30
1.1K0
NDIS 6 Net Buffer Lists and Net Buffers
NDIS 6.0 introduced a new way of representing network packet data. The new data structures, a combination of Net Buffer Lists (NBLs), Net Buffers (NBs) and Memory Descriptor Lists (MDLs) have significant advantages over the old NDIS 5.X way of describing packets i.e. NDIS_PACKET and NDIS_BUFFER structures. This document describes the functionality provided by NBLs, NBs, MDLs and their usage in NDIS 6.X drivers on Windows Vista and later versions of Windows.
战神伽罗
2021-03-08
1.1K1
通过x64分页机制的PTE Space实现内核漏洞利用x64中的分页机制重映射原语(概览)深入重映射机制:一些问题:猜测CR3总结
在研究NVIDIA DxgDdiEscape Handler的漏洞时,可以非常明显的感觉到过去几年中讨论的GDI原语的方法对于可靠的利用此漏洞毫无帮助。
战神伽罗
2021-01-07
1.2K0
fs 的一些参考
经常在r3 下调试经常会看到 mov eax,fs:[18h] ;获取TEP 其实就只指向自己fs:[0] mov eax,[eax+30h] ;获取PEB 这样的语句。 fs段在用户模式(R3)和系统模式(R0)分别指向两个最重要的系统结 构: Ring3: fs --> TEB (Thread Environment Block)结 构表 --> 7FFDE000即“线程环境块”。 Ring0: fs --> KPCR (Kernel Processor Control Region) 结构表 --> FFFDF000 即“内核处理器控制域”。 通常在其r3 下fs被用于获取kernel32.dll的基地址 或者其他有关于程序线程和进程的信息。 以下是一些参考资料 FS:[0x00] Win9x and NT Current SEH frame FS:[0x04] Win9x and NT Top of stack FS:[0x08] Win9x and NT Current bottom of stack FS:[0x10] NT Fiber data FS:[0x14] Win9x and NT Arbitrary data slot FS:[0x18] Win9x and NT Linear address of TIB(TEB--- 也叫做线程信息块 TIB) FS:[0x20] NT Process ID FS:[0x24] NT Current thread ID FS:[0x2C] Win9x and NT Linear address of the thread local storage array FS:[0x30] Pointer to PEB FS:[0x34] NT Current error number FS:[0x38] CountOfOwnedCriticalSections FS:[0x3c] CsrClientThread FS:[0x40] Win32ThreadInfo FS:[0x44] Win32ClientInfo[0x1f] FS:[0xc0] WOW32Reserved FS:[0xc4] CurrentLocale FS:[0xc8] FpSoftwareStatusRegister FS:[0xcc] SystemReserved1[0x36] FS:[0x1a4] Spare1 FS:[0x1a8] ExceptionCode FS:[0x1ac] SpareBytes1[0x28] FS:[0x1d4] SystemReserved2[0xA] FS:[0x1fc] GDI_TEB_BATCH FS:[0x6dc] gdiRgn FS:[0x6e0] gdiPen FS:[0x6e4] gdiBrush FS:[0x6e8] CLIENT_ID FS:[0x6f0] GdiCachedProcessHandle FS:[0x6f4] GdiClientPID FS:[0x6f8] GdiClientTID FS:[0x6fc] GdiThreadLocaleInfo FS:[0x700] UserReserved[5] FS:[0x714] glDispatchTable[0x118] FS:[0xb74] glReserved1[0x1A] FS:[0xbdc] glReserved2 FS:[0xbe0] glSectionInfo FS:[0xbe4] glSection FS:[0xbe8] glTable FS:[0xbec] glCurrentRC FS:[0xbf0] glContext FS:[0xbf4] NTSTATUS FS:[0xbf8] StaticUnicodeString FS:[0xc00] StaticUnicodeBuffer[0x105] FS:[0xe0c] DeallocationStack FS:[0xe10] TlsSlots[0x40] FS:[0xf10] TlsLinks FS:[0xf18] Vdm FS:[0xf1c] ReservedForNtRpc FS:[0xf20] DbgSsReserved[0x2] FS:[0xf28] HardErrorDisabled FS:[0xf2c] Instrumentation[0x10] FS:[0xf6c] WinSockData FS:[0xf70] GdiBatchCount FS:
战神伽罗
2020-12-09
9040
Kernel to User land: APC injection
When running in Kernel mode, it may be necessary to inject code into a User-land process. There are two ways that Asynchronous Procedure Calls (APCs) can be used to accomplish this goal.
战神伽罗
2019-11-07
9180
Win32 Thread Information Block
In computing, the Win32 Thread Information Block (TIB) is a data structure in Win32 on x86 that stores information about the currently running thread. This structure is also known as the Thread Environment Block (TEB).[1]
战神伽罗
2019-07-24
1.1K0
浅谈FS段寄存器在用户层和内核层的使用
在R0和R3时,FS段寄存器分别指向GDT中的不同段:在R3下,FS段寄存器的值是0x3B,在R0下,FS段寄存器的值是0x30.分别用OD和Windbg在R3和R0下查看寄存器(XP3),下图:
战神伽罗
2019-07-24
2.4K0
原来... 反调试技术揭秘(转)
在调试一些病毒程序的时候,可能会碰到一些反调试技术,也就是说,被调试的程序可以检测到自己是否被调试器附加了,如果探知自己正在被调试,肯定是有人试图反汇编啦之类的方法破0解自己。为了了解如何破0解反调试技术,首先我们来看看反调试技术。
战神伽罗
2019-07-24
8280
手动脱壳VMP
个人在学习脱VMP加壳的过程中总结的一个步骤。按照这个步骤,包括VMP1.6—2.0在内应该有70%-80%能脱壳。脱不了的也别问我,我也刚开始学习。我还想找人问呢。 想要脱VMP的壳,首要工作当然是要找一个强OD啦!至于是什么版本的OD自己多试验几个,网上大把大把的,一般来说只要加载了你想脱的VMP加壳程序不关闭都可以。 其次就是StrongOD.dll这个插件了,现在用的比较多的就是海风月影,同样网上也是大把大把的。下载回来后复制到你的OD程序所在的文件夹里面的plugin里。StrongOD的设置选项搞不懂就全部打钩。 接下来要做的工作就是搞清楚我们要脱壳的程序编程的语言了,可以用PEID或者fastscanner查看,如果在这里看不到也可以在OD载入以后通过里面的字符串判断了。例如VB的程序会出现MSVB----/VC的会出现MSVC---等等。这些都是程序运行所需要的windows链接文件。 做完这些预备工作接下来当然是用OD载入文件啦。文件载入后在反汇编窗口CTRL+G搜索VirtualProtect(注意V跟P要大写,至于为什么要搜索这个别问我)。一般来说搜索的结果会出现以下的类似: 7C801AE3 E8 75FFFFFF call kernel32.VirtualProtectEx 我们在这里下F2断点。然后F9运行到我们下的这个断点。接下来我们就要注意观察堆栈窗口了。一般来说当我们F9运行到我们上面下的断点的时候在堆栈窗口会出现以下类似: 0012F66C 00401000 |Address = TradeCen.00401000 0012F670 000280D1 |Size = 280D1 (164049.) 0012F674 00000004 |NewProtect = PAGE_READWRITE 0012F678 0012FF98 \pOldProtect = 0012FF98 我们要注意观察的就是在接下来我们F9运行的时候,ADDRESS和NEWPROTECT这两行的变化。按F9-速度别太快,直到NewProtect项变为PAGE_READONLY,这时候程序就释放完毕了。 0012F66C 0042A000 |Address = TradeCen.0042A000 0012F670 000069DE |Size = 69DE (27102.) 0012F674 00000002 |NewProtect = PAGE_READONLY 0012F678 0012FF98 \pOldProtect = 0012FF98 现在可以取消刚才我们下的断点了。接下来就是找OEP了。找OEP的时候我个人的一个经验就是OEP一般就在接近上面的ADDRESS地址的附近。例如上面的地址是0042A000,我一般就在这个基础上减到420000搜索程序的特征段,当然我们也可以直接跳到401000开始搜索。虽然我们搜索的范围比较大,但是因为我们搜索的是命令序列,所以工作量还不是很大。 废话不多说,CTRL+G--上面的地址,然后CTRL+S 查找命令序列。命令序列的内容就是我们用查到的编程语言的特征段。我们可以在特征段里面选择两三句固定不变的命令查找。例如VC++6.0的特征段是 0046C07B U> 55 push ebp 0046C07C 8BEC mov ebp,esp 0046C07E 6A FF push -1 0046C080 68 18064C00 push UltraSna.004C0618 0046C085 68 F8364700 push UltraSna.004736F8 0046C08A 64:A1 00000000 mov eax,dword ptr fs:[0] 0046C090 50 push eax 0046C091 64:8925 00000000 mov dword ptr fs:[0],esp 0046C098 83EC 58 sub esp,58 0046C09B 53 push ebx 0046C09C 56 push esi 0046C09D 57 push edi 我们可以只搜索前三条命令。找到符合前三条命令的,我们在对照接下来的命
战神伽罗
2019-07-24
3.5K0
Delphi异常机制与SEH
介绍SEH机制的文章很多,但基本都是C++的,关于Delphi的很少。最近项目需要,仔细阅读了VCL关于异常的处理,有些心得体会,希望和大家一起分享。
战神伽罗
2019-07-24
1.1K0
用单步异常检测OllyDbg的巧妙方法
SEH大概算得上是WINDOWS下公开的秘密了,什么?您还不知道?没关系,下面我来简单地介绍一下。SEH即结构化异常处理(Structured Exception Handling),简单地说就是当程序出现错误时,系统把当前的一些信息压入堆栈,然后转入我们设置好的异常处理程序中执行,在异常处理程序中我们可以终止程序或者修复异常后继续执行。异常处理处理分两种,顶层异常处理和线程异常处理,下面我们要用到的是线程异常处理。具体做法是,每个线程的FS:[0]处都是一个指向包含异常处理程序的结构的指针,这个结构又可以指向下一个结构,从而形成一个异常处理程序链。当发生异常时,系统就沿着这条链执行下去,直到异常被处理为止。我们可以使FS:[0]指向我们自己写的异常处理程序,从而自己处理异常。这里只是关于异常处理的简单介绍,具体内容请参考看雪学院的《加密与解密》及相关的windows编程书籍。 我们都知道用调试器(下面的介绍都以当前流行的调试器OllyDbg为例)可以设置断点,那么当设置断点时调试器究竟是怎样工作的呢?这要分几种情况了,一种是代码断点,即Cracker在某行代码上下断点,这时调试器自动把这行代码的首字节改为CC(即INT3中断,这个修改在OD中不会显示)这样每当程序运行到这里都会产生中断,而调试器可以接管这个中断,从而实现对程序的控制;另一种是内存断点,即当程序对某处内存有操作(读或写)时产生中断,这是直接利用CPU的调试寄存器DRx来完成的;还有一种不太像中断的“中断”,即单步中断,也就是说当你在调试器中选择“步过”某条指令时,程序自动在下一条语句停下来,这其实也属于一种中断,而且可以说是最常用的一种形式了,当我们需要对某段语句详细分析,想找出程序的执行流程和注册算法时必须要进行这一步。是80386以上的INTEL CPU中EFLAGS寄存器,其中的TF标志位表示单步中断。当TF为1时,CPU执行完一条指令后会产生单步异常,进入异常处理程序后TF自动置0。调试器通过处理这个单步异常实现对程序的中断控制。持续地把TF置1,程序就可以每执行一句中断一次,从而实现调试器的单步跟踪功能。 讲到这里,不知聪明的您看出什么问题没有:如果我们的程序本身就含有对单步异常的处理程序会怎么样呢?呵呵,据笔者的实验是,OD会不理睬我们程序自己的单步异常处理程序而自顾自地把异常处理接管了。这其实就给了我们一种很巧妙的方法,我们可以自己把TF置1,然后把注册算法中十分关键的运算放在我们程序自己的单步异常处理程序中。这样当程序在正常条件下执行时,一旦产生单步异常就会转到我们自己写好的异常处理中继续进行而不会受到影响,如果程序被调试,而Cracker选择了按F8步过这段程序,那么这时产生的单步异常会被调试器忽略,这样那些关键的代码就得不到执行,从而产生令人十分迷惑的结果。 好了,说了这么多,下面看一个实际的例子:(MASM32 8.2下编译通过)
战神伽罗
2019-07-24
1.2K0
几种跳转指令和对应的机器码
几种跳转指令和对应的机器码 0xE8 CALL 后面的四个字节是地址 0xE9 JMP 后面的四个字节是偏移 0xEB JMP 后面的二个字节是偏移 0xFF15 CALL 后面的四个字节是存放地址的地址 0xFF25 JMP 后面的四个字节是存放地址的地址 0x68 PUSH 后面的四个字节入栈 0x6A PUSH 后面的一个字节入栈 shellcode跳转
战神伽罗
2019-07-24
2.4K0
树莓派摄像头简单试用
树莓派官方推出的摄像头Camera Module,能够拍摄500万像素图片和录制1080p的视频,使用的是树莓派板子上的csi接口。
战神伽罗
2019-07-24
2.3K0
nodejs -- promise的返回
[javascript] view plain copy const a = async () => { return Sequelize.findAll({}) //这里返回一个promise,"aaaaa"也行 } const b= async ()=>{ const result =await a() ; //这样就能拿到数据了 } OR [javascript] view plain copy const a = async () =>
战神伽罗
2019-07-24
1.3K0
mov fs:[0],esp的含义
lea eax,SEH1[ebp] ;自己的异常处理函数地址 push eax ;把该异常处理函数地址压栈 push fs:[0] ;fs:[0]指向的是TIB[Thread information Block]结构中的 ;EXCEPTION_REGISTRATION 结构 mov fs:[0],esp ;让fs:[0]指向一个新的EXCEPTION_REGISTRATION 结构(就像链表插入一个新节点) mov esi,0 ;这两行指令就是用来处罚这个异常处理函数被调用的代码 mov eax,[esi];make a error for SEH
战神伽罗
2019-07-24
2.5K0
没有更多了
社区活动
RAG七天入门训练营
鹅厂大牛手把手带你上手实战
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档