首页
社区
课程
招聘
[原创][原创]网络拉取内存加载C#木马-流程分析
2020-9-22 09:03 5016

[原创][原创]网络拉取内存加载C#木马-流程分析

2020-9-22 09:03
5016

1. 拖到查壳中

20200830213008
没有分析出来

2. 直接用火绒剑看一下调用

C# 的系统dll

 

20200830213824

 

运行的时候 并没有发现有什么网络请求

3. 直接拖IDA

发现IDA识别出来很多函数

 

20200830214328

 

看了一下字符串也没看到啥有用的

 

主函数一堆乱七八糟的

 

20200830214745

 

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

 

20200830220934

 

进去分析发现了类似的代码结构(有点像llvm过的代码),它调用了InternetOpenA(导入表中有一些 winiNet http请求的函数)然后又jmp走了

 

winiNetHttp请求参考网址:https://my.oschina.net/allenwen/blog/685573

 

20200830221505

 

20200830222438

4. x32dbg动态调试

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

 

20200830222746

 

20200830222834

 

url: pastebin.com:443(0x1BB)/raw/nrSZnmgc Get Https(443)

 

返回值很像base64
20200830223107

 

base64解密之后 发现 开头就是 e9 0a 05 00 00 很像jmp (怀疑是shellcode)

1
![20200830223552](https://cdn.jsdelivr.net/gh/qinghuabumo/imgPicGo/20200830223552.png)

动态调试下断点:InternetReadFile 函数返回结束的地方

 

20200830225214

 

因为返回值是base64加密,而且是shellcode,所以怀疑出去之后解密数据,解密完之后把shellcode贴到内存中

 

直接下memcpy,发现程序都运行起来了 它都没有copy...

 

所以只能慢慢跟

 

找到它贴shellcode的地方,然后下断点,动态跟踪

 

动态调试shellcode的时候发现了C加载C#的函数
C内存运行C#dll-参考地址:www.cnblogs.com/flyDream12315/p/6062920.html

 

LoadLibrary("mscoree.dll");

 

20200831143947

 

LoadLibrary("wininet.dll");

 

20200831144059

 

LoadLibrary("oleaut32.dll");

 

20200831144203

 

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

 

20200831174901

 

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

 

20200831144957

 

20200831114401

 

ICLRMetaHost:

 

20200831151410

 

IUnknown:

 

20200831151507

 

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

 

20200831145446

 

ICLRRuntimeInfo:

 

20200831164548

 

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

 

20200831152322

 

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

 

20200831164318

 

ICorRuntimeHost:

 

20200831164913

 

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

 

20200831164713

 

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

 

20200831165342

 

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

 

20200831165917

 

SAFEARRAY* pSafeArray = SafeArrayCreate(0x11,1,pData)

 

SafeArrayCreate函数相关参考地址:https://blog.csdn.net/jisuanjixu/article/details/5959186

 

20200831170537

 

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

 

20200831171733

 

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

 

20200831175554

 

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

 

20200831172307

 

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

 

20200831172517

 

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

 

20200831173056

 

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

 

20200831180104

 

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

 

20200831180326

 

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

 

20200831180527

 

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

 

20200831180744

 

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

 

20200831181824

 

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

 

20200831184317

 

总结:全流程就是exe运行了一个shellcode shellcode中执行了C#的dll,所以主程序只是一个加载器而已,当获取到C# pedll的时候,其实就可以直接拉dnspy里面查看


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-10-25 15:55 被还我六千雪币编辑 ,原因:
收藏
点赞5
打赏
分享
最新回复 (8)
雪    币: 165
活跃值: (8429)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
学技术打豆豆 1 2020-9-22 10:19
2
0
666
雪    币: 753
活跃值: (3898)
能力值: ( LV6,RANK:98 )
在线值:
发帖
回帖
粉丝
还我六千雪币 2020-9-22 10:58
3
0
雪    币: 12605
活跃值: (14315)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
wmsuper 7 2020-9-22 14:50
4
0
大佬厉害
雪    币: 753
活跃值: (3898)
能力值: ( LV6,RANK:98 )
在线值:
发帖
回帖
粉丝
还我六千雪币 2020-9-22 23:29
5
0
wmsuper 大佬厉害
师傅说笑了 
雪    币: 85
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
墨瑾萱 2020-9-28 23:13
6
0
大佬 6666
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2020-9-29 07:34
7
0
经典OLLVM执行流平坦化
雪    币: 1519
活跃值: (1987)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
Chords 2020-9-30 23:47
8
0
布墨牛逼
雪    币: 753
活跃值: (3898)
能力值: ( LV6,RANK:98 )
在线值:
发帖
回帖
粉丝
还我六千雪币 2020-10-12 12:49
9
0
hzqst 经典OLLVM执行流平坦化
又到了知识盲区
游客
登录 | 注册 方可回帖
返回