|
发表于 2024-9-19 14:40:08
|
显示全部楼层
广西壮族自治区贵港市
本帖最后由 wlp 于 2024-9-19 15:08 编辑
自己在系统函数前面下个断点
一般是
mov eax, 系统函数偏移
...
...
call xxx 调用系统函数外壳
004032E6 | 68 04000000 | push 4 |
004032EB | BB 48010000 | mov ebx,148 |
004032F0 | E8 59000000 | call 1.40334E |
004032F5 | 83C4 34 | add esp,34 |
红色一般是固定的,蓝色是不确定的,只要提取hex字节码搜索就找到这个函数了
提取后应该是,
68 04000000
BB 48010000
E8 59000000
83C4 34
再把蓝色换成通配符就是
68 04000000
BB ?? ?? ?? ??
E8 ?? ?? ?? ??
83C4 34
然后就是 call 1.40334E这个函数分析,看红色部分
1002DE49 | 55 | push ebp |
1002DE4A | 8BEC | mov ebp,esp |
1002DE4C | A1 30F01610 | mov eax,dword ptr ds:[1016F030] |
1002DE51 | 0318 | add ebx,dword ptr ds:[eax] | ebx:ComparePYQuickStrLeader+BCAC8
1002DE53 | 8D4424 0C | lea eax,dword ptr ss:[esp+C] |
1002DE57 | 83EC 0C | sub esp,C |
1002DE5A | 50 | push eax |
1002DE5B | FF7424 18 | push dword ptr ss:[esp+18] |
1002DE5F | 33C0 | xor eax,eax |
1002DE61 | 894424 08 | mov dword ptr ss:[esp+8],eax | [esp+08]:L"ニ@"
1002DE65 | 894424 0C | mov dword ptr ss:[esp+C],eax |
1002DE69 | 894424 10 | mov dword ptr ss:[esp+10],eax |
1002DE6D | 8D5424 08 | lea edx,dword ptr ss:[esp+8] | [esp+08]:L"ニ@"
1002DE71 | 52 | push edx |
1002DE72 | FF13 | call dword ptr ds:[ebx] | [ebx]:GetNewSock+B770
函数表地址(eax) = 指针到整数(0x1016F030) -》 mov eax,dword ptr ds:[1016F030]
函数偏移(ebx)= 148 -》mov ebx,148
函数地址偏移 =函数偏移 + 指针到整数(函数表地址) -》add ebx,dword ptr ds:[eax]
函数地址 = 指针到整数(函数地址偏移) -》call dword ptr ds:[ebx]
调用函数(函数地址)
ds:[1016F030] 然后分析这个表就能得到全部的子程序地址,配合上面的通配符搜索得到函数序号
|
|