Skip to content

作者厉害!原版的加载我的dll有问题,用你这个成功了,不过运行一段时间后断言失败 #23

Open

Description

@shadowbanewuha

if (MmpGlobalDataPtr->MmpTls->MmpTlsList.Flink != &MmpGlobalDataPtr->MmpTls->MmpTlsList) { assert(NtCurrentTeb()->ThreadLocalStoragePointer == nullptr); }

file: MmpTls , line:378

不知道啥原因

Activity

  1. self-assigned this
    on Mar 8, 2023
  2. bb107 commented on Mar 8, 2023

    @bb107
    Owner

    你好,这个问题可能是由“带线程局部存储的TppWorkerThread”引起的,最新的提交已修复。#58379ac

  3. shadowbanewuha commented on Mar 9, 2023

    @shadowbanewuha
    Author

    非常感谢!!

  4. shadowbanewuha commented on Mar 16, 2023

    @shadowbanewuha
    Author

    最近发现在使用GdiPlus这个系统库时,可能引起崩溃
    MmpTls.cpp
    Line: 283

    ` ++MmpGlobalDataPtr->MmpTls->MmpActiveThreadCount;
    LeaveCriticalSection(&MmpGlobalDataPtr->MmpTls->MmpTlspLock);

    __skip_tls:
    return Context.ThreadStartRoutine(Context.ThreadParameter);
    }`

    这个可以解决嘛

  5. shadowbanewuha commented on Mar 16, 2023

    @shadowbanewuha
    Author

    我屏蔽了这里的HOOK,暂时好像不崩溃了,就是不知道有什么影响没 //DetourAttach((PVOID*)&MmpGlobalDataPtr->MmpTls->Hooks.OriginRtlUserThreadStart, HookRtlUserThreadStart);

  6. bb107 commented on Mar 16, 2023

    @bb107
    Owner

    可以提供详细的异常状态吗?

  7. shadowbanewuha commented on Mar 17, 2023

    @shadowbanewuha
    Author

    Critical error detected c0000374
    0x7776C97F (ntdll.dll) (TestDemo.exe 中)处有未经处理的异常: 0xC0000374: 堆已损坏。 (参数: 0x777AA918)。

  8. bb107 commented on Mar 17, 2023

    @bb107
    Owner

    你是直接从内存加载的gdiplus?还是通过内存dll间接加载的?我没有复现出来,能提供一个简单的示例吗?

  9. shadowbanewuha commented on Mar 17, 2023

    @shadowbanewuha
    Author

    我测试了下gidplus崩溃的这个是跟 windows.storage.dll有关,我先手动加载windows.storage.dll后就没出现过了。
    但是还是出现了0x7776C97F (ntdll.dll) 这个崩溃。

    然后我在内存加载之前,手动加载了另外几个系统dll,
    LoadLibrary("C:\\Windows\\SysWOW64\\windows.storage.dll"); LoadLibrary("C:\\Windows\\SysWOW64\\ntdll.dll"); LoadLibrary("C:\\Windows\\SysWOW64\\WindowsCodecs.dll"); LoadLibrary("C:\\Windows\\SysWOW64\\WinTypes.dll"); LoadLibrary("C:\\Windows\\SysWOW64\\msctf.dll"); HMODULE handle = LoadLibrary("engine.dll"); //这个dll里面使用了内存加载核心dll
    现在崩溃概率大大降低了, 但昨天运行了十几分钟后还是出现过一次崩溃,就是这里:MmpTls.cpp
    Line: 283,等再崩溃了我发你详细一点的信息

  10. shadowbanewuha commented on Mar 17, 2023

    @shadowbanewuha
    Author

    顺便问下 ,关闭这个有影响吗?
    //DetourAttach((PVOID*)&MmpGlobalDataPtr->MmpTls->Hooks.OriginRtlUserThreadStart, HookRtlUserThreadStart);
    我现在开启状态会引起偶尔崩溃,关闭后好像没出现过

  11. bb107 commented on Mar 17, 2023

    @bb107
    Owner

    顺便问下 ,关闭这个有影响吗? //DetourAttach((PVOID*)&MmpGlobalDataPtr->MmpTls->Hooks.OriginRtlUserThreadStart, HookRtlUserThreadStart); 我现在开启状态会引起偶尔崩溃,关闭后好像没出现过

    关闭后会导致新线程无法使用内存模块的tls数据,并且新线程退出时会在HookLdrShutdownThread处崩溃

  12. shadowbanewuha commented on Mar 17, 2023

    @shadowbanewuha
    Author

    嗷嗷,那影响还是挺大的,等我完全搭好了环境,把代码和dll都发你试试哈

  13. bb107 commented on Mar 18, 2023

    @bb107
    Owner

    我修复了一个错误,你更新一下看看问题解决了没

  14. shadowbanewuha commented on Apr 7, 2023

    @shadowbanewuha
    Author

    我试了下,还是会偶尔崩溃,但崩溃位置变了,好像跟lock有关。
    但如果在内存加载前先手动加载几个系统dll,则不会崩溃,不知道长久运行时会不会崩溃。
    LoadLibrary("C:\Windows\SysWOW64\windows.storage.dll");
    LoadLibrary("C:\Windows\SysWOW64\ntdll.dll");
    ........

  15. bb107 commented on Apr 7, 2023

    @bb107
    Owner

    或许是跟Wow64进程的native64线程有关,我没有处理64位TEB的TLS。需要发出详细的异常状态才能进一步判断。

  16. shadowbanewuha commented on Apr 7, 2023

    @shadowbanewuha
    Author

    有两种情况的崩溃:
    第一种报错是这个:
    onecore\net\netprofiles\service\src\nsp\dll\namespaceserviceprovider.cpp(550)\nlansp_c.dll!717A84C8: (caller: 7740E326) LogHr(2) tid(4d7c) 8007277C 此服务不存在。在指定的命名空间中找不这个服务。
    0x7775F514 (ntdll.dll)处(位于 TestDemo.exe 中)引发的异常: 0xC0000005: 读取位置 0x011BAD1F 时发生访问冲突。

    第二种是在 locks.cpp 这个文件里面崩溃:
    extern "C" void __cdecl __acrt_lock(_In_ __acrt_lock_id _Lock) { EnterCriticalSection(&__acrt_lock_table[_Lock]); }
    报错是: HEAP[TestDemo.exe]: Invalid address specified to RtlValidateHeap( 01270000, 012A4BF0 )

  17. bb107 commented on Apr 14, 2023

    @bb107
    Owner

    有用其他加载器(如BlackBone)试过吗?我感觉不像是TLS的问题。我最新的提交添加了原始处理TLS的方法(特征码定位LdrpHandleTlsData),使用stdafx.h中的MMPP_USE_TLS宏来控制。你试一下,看看使用ntdll的TLS处理方法是否会崩溃。

  18. shadowbanewuha commented on May 4, 2023

    @shadowbanewuha
    Author

    OKOK,现在暂时没碰到崩溃了,如果出现了再采用你这个~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions