
没有分析出来
C# 的系统dll

运行的时候 并没有发现有什么网络请求
发现IDA识别出来很多函数

看了一下字符串也没看到啥有用的
主函数一堆乱七八糟的

仔细看主函数 一堆乱七八杂的判断和 if,但是 在这里面 它肯定要调用函数,我只发现了一个调用点

进去分析发现了类似的代码结构(有点像llvm过的代码),它调用了InternetOpenA(导入表中有一些 winiNet http请求的函数)然后又jmp走了
winiNetHttp请求参考网址:151K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0P5g2)9J5k6h3!0K6j5$3S2A6L8X3q4Q4x3X3g2F1k6i4c8Q4x3V1k6S2L8r3I4W2L8Y4N6W2L8W2)9J5c8X3u0D9L8$3N6Q4x3V1j5$3z5o6f1#2y4K6x3`.


直接下断 InternetConnectA,HttpOpenRequestA 看一下它的请求


url: pastebin.com:443(0x1BB)/raw/nrSZnmgc Get Https(443)
返回值很像base64

base64解密之后 发现 开头就是 e9 0a 05 00 00 很像jmp (怀疑是shellcode)
动态调试下断点:InternetReadFile 函数返回结束的地方

因为返回值是base64加密,而且是shellcode,所以怀疑出去之后解密数据,解密完之后把shellcode贴到内存中
直接下memcpy,发现程序都运行起来了 它都没有copy...
所以只能慢慢跟
找到它贴shellcode的地方,然后下断点,动态跟踪
动态调试shellcode的时候发现了C加载C#的函数
C内存运行C#dll-参考地址:678K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4F1j5X3I4G2k6%4y4Q4x3X3g2U0L8$3#2Q4x3V1k6X3L8s2W2p5M7X3g2S2L8e0p5J5x3K6p5#2i4K6u0r3M7q4)9J5c8U0j5H3y4U0t1&6x3U0m8Q4x3X3g2Z5N6r3#2D9
LoadLibrary("mscoree.dll");

LoadLibrary("wininet.dll");

LoadLibrary("oleaut32.dll");

网络拉取shellcode base64解密 是个PE文件 esp+104 = PeDll

CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (VOID**)&pMetaHost);



ICLRMetaHost:

IUnknown:

(pMetaHost)+0xC的位置 pMetaHost->GetRuntime(runtimeVersion, IID_ICLRRuntimeInfo, (VOID**)&pRuntimeInfo);

ICLRRuntimeInfo:

(pRuntimeInfo)+0x28的位置 pRuntimeInfo->IsLoadable(&load);

(pRuntimeInfo)+0x24的位置 pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_ICLRRuntimeHost, (VOID**)&pRuntimeHost);

ICorRuntimeHost:

(pRuntimeHost)+0x28的位置 pRuntimeHost->Start()

(pRuntimeHost)+0x34的位置 pRuntimeHost->GetDefaultDomain(&pAppDomain)

(pAppDomain) 第一个函数 pAppDomain->QueryInterface(IID__AppDomain, (VOID**)&pDefaultAppDomain);

SAFEARRAY* pSafeArray = SafeArrayCreate(0x11,1,pData)
SafeArrayCreate函数相关参考地址:0b2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8X3A6A6M7%4g2S2L8X3A6A6P5s2g2Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0f1&6y4e0V1I4z5o6j5`.

esp+0x110 单步进去发现是 SafeArrayAccessData(pSafeArray,&pvData)

有一块循环赋值的地方,把PEdll的数据复制到了pvData中

又是一个call,单步直接进去是 SafeArrayUnaccessData(pSafeArray)

esp+0x14 = pDefaultAppDomain,(pDefaultAppDomain)+0xB4 pDefaultAppDomain->Load_3(pSafeArray, &pAssembly); 加载C#dll

pAssembly(_Assembly) (pAssembly)+0x40 pAssembly->get_EntryPoint(&pMethodInfo) 获取入口函数

[esp+12C] (verctorArg) = SafeArrayCreateVector(8,0,1)

esi(verctor2) = SafeArrayCreateVector(0xC,0,1)

这个shellcode进来的时候有个参数,eax = SysAllocString(arg)

SafeArrayPutElement(verctorArg,&int(0),eax)

SafeArrayPutElement(verctor2,&int(0),一个变量)

esp+C = pMethodInfo pMethodInfo->Invoke_3(obg,verctor2,&retVal) 执行程序入口函数 mian

[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2021-10-25 15:55
被还我六千雪币编辑
,原因: