三个小技巧(二)

admin 2025年2月5日23:58:00评论7 views字数 1887阅读6分17秒阅读模式
技巧1、TEA加密常数
在逆向的过程中如果看到【0x5B4B9F9E】或【0x9E3779B9】这样的常数,可以推测它可能是 TEA 族算法的一个变种或自定义实现,这种常数的出现通常与加密算法中的 轮密钥加 或 轮函数 有关。这些常数的高位和低位通常有一定的规律性。
三个小技巧(二)

技巧2、PE EXE为32位or64位的魔术字

三个小技巧(二)
三个小技巧(二)

红色框住的是PE结构的magic魔术字

说明文件类型:10B --- 32位下的PE文件     20B --- 64位下的PE文件

上面的Exeinfo识别为64位,说明是通过这个魔术字来的,但下面的DIE不一样,仍然识别出来为32位,

三个小技巧(二)

技巧3、SEH链的运用

SEH:Structured Exception Handling,结构化异常处理, 是一种用于处理硬件异常和软件异常的机制。int 3 是一条汇编指令,用于触发一个调试断点异常(Breakpoint Exception)。当 int 3 被执行时,操作系统会调用注册的 SEH 异常处理函数来处理该异常。

以下是一段汇编代码示例,展示了如何使用 SEH 处理 int 3 触发的异常:

section .data

    ; 定义一些数据

    msg db "SEH Exception Handled!", 0

section .text

    global _start

extern __imp_MessageBoxA@16  ; 导入 MessageBoxA 函数

extern __imp_ExitProcess@4   ; 导入 ExitProcess 函数

_start:

    ; 设置 SEH 异常处理函数

    push seh_handler        ; 将异常处理函数的地址压入栈

    push dword [fs:0]        ; 异常处理结构体指针压栈保存当前的 FS:[0](旧的SEH 链)

    mov dword [fs:0], esp  ; 将新的 SEH 处理函数地址存入 FS:[0],利用该指针跳转到seh_handler

    ; 触发一个断点异常(int 3),程序到except块查找回调函数,

    int 3

    ; 如果没有异常发生,继续执行

    ; 这里可以放置正常逻辑代码

    ; 恢复旧的 SEH 链

    pop dword [fs:0]          ; 恢复 FS:[0] 为旧的 SEH 链

    add esp, 4                ; 清理栈

    ; 正常退出程序

    push 0

    call __imp_ExitProcess@4

seh_handler:

    ; 异常处理函数

    ; 获取异常信息

    mov eax, [esp + 0x0C]     ; 获取 EXCEPTION_RECORD 结构指针

    mov ebx, [eax + 0x04]     ; 获取异常代码(ExceptionCode)

    cmp ebx, 0x80000003       ; 检查是否是断点异常(STATUS_BREAKPOINT)

    jne not_handled           ; 如果不是断点异常,跳转到未处理逻辑

    ; 如果是断点异常,显示消息框

    push 0                    ; MB_OK

    push msg                  ; 消息内容

    push msg                  ; 标题

    push 0                    ; hWnd

    call __imp_MessageBoxA@16 ; 调用 MessageBoxA

    ; 继续执行程序

    mov eax, 0xFFFFFFFF       ; EXCEPTION_CONTINUE_EXECUTION

    ret

not_handled:

    ; 如果不是断点异常,继续搜索其他异常处理函数

    mov eax, 0x00000000       ; EXCEPTION_CONTINUE_SEARCH

    ret

问题一:程序执行时会触发int 3转而seh吗?

答:会的,这是显示调用int3,程序到这里会转去执行seh_handler;

问题二:如OD调试器到这里时会执行seh吗?

答:两种情况,

(1)无调试器:程序运行到 int 3 时,会触发断点异常,操作系统会调用 seh_handler,显示消息框并继续执行。

(2)有调试器(OllyDbg):默认情况下,调试器会捕获 int 3 异常并暂停程序,不会跳转到 seh_handler。如果调试器设置为 "Pass to program",则会将异常交给 seh_handler 处理。

后记:为什么将SEH单独作为一个技巧来讲,因为在上一篇《天堂之门》技术中讲到如何从x86切换到x64时用到了一些特定代码,但在实际运用中不会这么直白,不会让你这么轻易地识别到,会采用很多的隐藏手法,其中有一种就是用SEH异常来作一个处理,隐藏天堂之门的特定入口,不让你轻易地发现。

原文始发于微信公众号(MicroPest):三个小技巧(二)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月5日23:58:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   三个小技巧(二)https://cn-sec.com/archives/3691718.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息