膜拜菊苣的LM2

胡言乱语而已。

光那个Loader就看得我瞎眼了。那个LocaleEmulator.dll更搞得狗眼都睁不开了啊。。。
Loader就不多说了,也是改远程进程的EIP调用LdrLoadDll来载入LocaleEmulator.dll的,虽然我不懂为什么用上了Dbg相关的API,而且CreateProcess是用带有DBG标志来创建的。。
这个新的LM应该是不支持Win7以下系统的。

LocaleEmulator.dll的DllMain:
LdrDisableThreadCalloutsForDll -> 这个就不多说了。。。
GetKernel32Ldr -> 应该是取得KERNEL32的Ldr链表地址,然后给flags加上个LDRP_PROCESS_ATTACH_CALLED,没猜错的话应该是为后面接收Dll载入通知准备的一个玩意。
GlobalData->Initialize():
OpenOrCreateLePeb -> 不懂是啥,大概是在Peb里面抓点地方添加自己的信息,Heap指针啥的吧,猜的。
下面是一些改PEB数据的。
下面是根据Nls文件调用RtlInitNlsTables载入Nls表。(菊苣以前那个LM是用RtlInitCodePageTable通过NlsSection载入的,RtlInitNlsTables内部也是调用RtlInitCodePageTable)
RtlResetRtlTranslations真不懂干啥的,看代码貌似是重设ntdll的那3个导出的Nls相关data指针(就不用手动修改了?!)
然后修改PEB中的3个Nls相关值。
LdrRegisterDllNotification是注册Dll载入Callback,菊苣在Callback中判断user32、gdi32、kernel32,并分别进行HookModule。
然后就是针对ntdll自身的Hook -> HookNtdllRoutines。
HookNtdllRoutines里面Hook了3个函数:LeNtCreateUserProcess注入子进程、LeNtQuerySystemInformation时区、LeNtInitializeNlsFiles不懂干啥的,看代码Call原来的NtInitializeNlsFiles玩后,改了人家的DefautLocaleId,缺德啊。

然后在Dll载入通知的callback:DllNotification
RtlEqualUnicodeString对比那3个dll,有就飞到HookModule。
比较有意思的是,HookModule里面没看到对kernel32的处理。。仔细一看,在callback里面菊苣判断了一下LDRP_PROCESS_ATTACH_CALLED标志,如果存在的就把dll的入口点改飞到DelayInitDllEntry了。。。想必这个是处理kernel32的吧。

HookModule里面分别调用对user32、gdi32的HookRoutines,对kernel32倒是没啥处理(可能是我太弱了无法理解吧。
gdi32的Hook比较平常,关键是那个user32的Hook:
StubNtUserCreateWindowEx
StubNtUserMessageCall
StubNtUserDefSetText
直接把人家切内核的函数给ooxx了,缺德啊。
NtUserCreateWindowEx对win7和win8的原形分别做了不同的处理。

先来看看菊苣如何找到那些Stub的地址的:
FindNtUserCreateWindowEx -> 通过IAT搜索调用RtlQueryInformationActiveActivationContext,判断0xE8,就是CALL stub,因为CreateWindowExW里里面的一个函数call NtUserCreateWindowEx的时候,上面有一个call RtlQueryInformationActiveActivationContext的。
FindNtUserMessageCall2 -> 真的看不懂了,貌似是从那个啥内核飞到用户的user32 callback函数指针表里面拿地址的。
然后来看看Hook:
LeNtUserCreateWindowEx -> 判断ANSI的窗口,然后用TEB里面的被菊苣当Tls用的AativeFrame存储点数据,然后SetWindowsHookExA一个本线程CBT钩子。CBTProc里面进行子类。
子类函数里面进行淫荡的我看不懂的call,LeNtUserMessageCall也看不懂。。。看代码应该是可以根据指定的WndProc进行消息call,以及,貌似不少都是跟那个fnXXX的表函数有关的玩意。菊苣还配了个巨大的MessageTable。。。
LeNtUserDefSetText也不懂干啥的,看样子像是设置标题文本的。

RtlSetUnhandledExceptionFilter -> 顶端SEH处理。为了写出一个MiniDump。
LeGlobalData -> 一个全局信息的class,转码信息啊,Hook函数啊,内部函数啊啥的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值