能力值:
( LV3,RANK:20 )
|
-
-
7 楼
无聊,粗略拖到OD过了一遍.
加壳选项应该加的有问题吧.
只为帮LZ的回复页数增加贡献一份力量 ..
没细看具体是啥了..
struct ImportTab
{
unsigned int n;
unsigned int IatOffset;
ApiStr apis[0];
};
struct ApiStr
{
n;
apiname;
};
00417550 > $ 60 pushad
00417551 . BE 15604100 mov esi,00416015 ; 这里是处理以后的代码加壳选项的问题吧,这里的代码只是处理了E8和摸了导入表,其他的压缩等操作都没有
00417556 . 8DBE EBAFFEFF lea edi,dword ptr ds:[esi+FFFEAFEB] ; 这块buffer用来存放shell解完以后的代码
0041755C . 57 push edi
0041755D . EB 0B jmp short 0041756A
0041755F 90 nop
00417560 > 8A06 mov al,byte ptr ds:[esi] ; esi中为代码,该循环操作将函数拷贝到另一块buffer中,下面用了两层循环来处理
00417562 . 46 inc esi
00417563 . 8807 mov byte ptr ds:[edi],al
00417565 . 47 inc edi
00417566 > 01DB add ebx,ebx
00417568 . 75 07 jnz short 00417571
0041756A > 8B1E mov ebx,dword ptr ds:[esi]
0041756C . 83EE FC sub esi,-4
0041756F . 11DB adc ebx,ebx
00417571 >^ 72 ED jb short 00417560
00417573 . B8 01000000 mov eax,1
00417578 > 01DB add ebx,ebx
0041757A . 75 07 jnz short 00417583
0041757C . 8B1E mov ebx,dword ptr ds:[esi]
0041757E . 83EE FC sub esi,-4
00417581 . 11DB adc ebx,ebx
00417583 > 11C0 adc eax,eax
00417585 . 01DB add ebx,ebx
00417587 .^ 73 EF jnb short 00417578
00417589 . 75 09 jnz short 00417594
0041758B . 8B1E mov ebx,dword ptr ds:[esi]
0041758D . 83EE FC sub esi,-4
00417590 . 11DB adc ebx,ebx
00417592 .^ 73 E4 jnb short 00417578
00417594 > 31C9 xor ecx,ecx
00417596 . 83E8 03 sub eax,3
00417599 . 72 0D jb short 004175A8
0041759B . C1E0 08 shl eax,8
0041759E . 8A06 mov al,byte ptr ds:[esi]
004175A0 . 46 inc esi
004175A1 . 83F0 FF xor eax,FFFFFFFF
004175A4 . 74 74 je short 0041761A
004175A6 . 89C5 mov ebp,eax
004175A8 > 01DB add ebx,ebx
004175AA . 75 07 jnz short 004175B3
004175AC . 8B1E mov ebx,dword ptr ds:[esi]
004175AE . 83EE FC sub esi,-4
004175B1 . 11DB adc ebx,ebx
004175B3 > 11C9 adc ecx,ecx
004175B5 . 01DB add ebx,ebx
004175B7 . 75 07 jnz short 004175C0
004175B9 . 8B1E mov ebx,dword ptr ds:[esi]
004175BB . 83EE FC sub esi,-4
004175BE . 11DB adc ebx,ebx
004175C0 > 11C9 adc ecx,ecx
004175C2 . 75 20 jnz short 004175E4
004175C4 . 41 inc ecx
004175C5 > 01DB add ebx,ebx
004175C7 . 75 07 jnz short 004175D0
004175C9 . 8B1E mov ebx,dword ptr ds:[esi]
004175CB . 83EE FC sub esi,-4
004175CE . 11DB adc ebx,ebx
004175D0 > 11C9 adc ecx,ecx
004175D2 . 01DB add ebx,ebx
004175D4 .^ 73 EF jnb short 004175C5
004175D6 . 75 09 jnz short 004175E1
004175D8 . 8B1E mov ebx,dword ptr ds:[esi]
004175DA . 83EE FC sub esi,-4
004175DD . 11DB adc ebx,ebx
004175DF .^ 73 E4 jnb short 004175C5
004175E1 > 83C1 02 add ecx,2
004175E4 > 81FD 00F3FFFF cmp ebp,-0D00
004175EA . 83D1 01 adc ecx,1
004175ED . 8D142F lea edx,dword ptr ds:[edi+ebp]
004175F0 . 83FD FC cmp ebp,-4
004175F3 . 76 0F jbe short 00417604
004175F5 > 8A02 mov al,byte ptr ds:[edx]
004175F7 . 42 inc edx
004175F8 . 8807 mov byte ptr ds:[edi],al
004175FA . 47 inc edi
004175FB . 49 dec ecx
004175FC .^ 75 F7 jnz short 004175F5
004175FE .^ E9 63FFFFFF jmp 00417566 ; 1循环
00417603 90 nop
00417604 > 8B02 mov eax,dword ptr ds:[edx]
00417606 . 83C2 04 add edx,4
00417609 . 8907 mov dword ptr ds:[edi],eax
0041760B . 83C7 04 add edi,4
0041760E . 83E9 04 sub ecx,4
00417611 .^ 77 F1 ja short 00417604
00417613 . 01CF add edi,ecx
00417615 .^ E9 4CFFFFFF jmp 00417566 ; 2循环
0041761A > 5E pop esi
0041761B . 89F7 mov edi,esi
0041761D . B9 4B000000 mov ecx,4B
00417622 > 8A07 mov al,byte ptr ds:[edi] ; 刚解过来的函数
00417624 . 47 inc edi
00417625 . 2C E8 sub al,0E8
00417627 > 3C 01 cmp al,1
00417629 .^ 77 F7 ja short 00417622 ; 查找E8,下面当然就是修复E8了
0041762B . 803F 00 cmp byte ptr ds:[edi],0
0041762E .^ 75 F2 jnz short 00417622 ; 这里的判断是为了call eip+5这个特例,跳过这个特例
00417630 . 8B07 mov eax,dword ptr ds:[edi]
00417632 . 8A5F 04 mov bl,byte ptr ds:[edi+4]
00417635 . 66:C1E8 08 shr ax,8
00417639 . C1C0 10 rol eax,10
0041763C . 86C4 xchg ah,al
0041763E . 29F8 sub eax,edi
00417640 . 80EB E8 sub bl,0E8
00417643 . 01F0 add eax,esi
00417645 . 8907 mov dword ptr ds:[edi],eax
00417647 . 83C7 05 add edi,5
0041764A . 88D8 mov al,bl
0041764C .^ E2 D9 loopd short 00417627 ; 循环修复E8
0041764E . 8DBE 00500100 lea edi,dword ptr ds:[esi+15000] ; 这里定位到导入表信息了,这个导入表从结构上看来是自定义的
00417654 > 8B07 mov eax,dword ptr ds:[edi]
00417656 . 09C0 or eax,eax
00417658 . 74 45 je short 0041769F
0041765A . 8B5F 04 mov ebx,dword ptr ds:[edi+4] ; 从下面两条指令来看,这里取的自然是IAT的偏移了
0041765D . 8D8430 C47802>lea eax,dword ptr ds:[eax+esi+278C4]
00417664 . 01F3 add ebx,esi ; RVA + ImageBase 获取 IAT的VA地址
00417666 . 50 push eax
00417667 . 83C7 08 add edi,8
0041766A . FF96 28790200 call dword ptr ds:[esi+27928] ; 加载DLL
00417670 . 95 xchg eax,ebp
00417671 > 8A07 mov al,byte ptr ds:[edi]
00417673 . 47 inc edi
00417674 . 08C0 or al,al
00417676 .^ 74 DC je short 00417654
00417678 . 89F9 mov ecx,edi
0041767A . 79 07 jns short 00417683
0041767C . 0FB707 movzx eax,word ptr ds:[edi]
0041767F . 47 inc edi
00417680 . 50 push eax
00417681 . 47 inc edi
00417682 B9 db B9
00417683 . 57 push edi ; api string
00417684 . 48 dec eax
00417685 . F2:AE repne scas byte ptr es:[edi]
00417687 . 55 push ebp ; dll base
00417688 . FF96 2C790200 call dword ptr ds:[esi+2792C] ; GetProcAddress 获取函数地址
0041768E . 09C0 or eax,eax
00417690 . 74 07 je short 00417699 ; 获取失败了
00417692 . 8903 mov dword ptr ds:[ebx],eax ; 填充IAT
00417694 . 83C3 04 add ebx,4 ; 指向下一个IAT项,看到这个就敏感..
00417697 .^ EB D8 jmp short 00417671 ; 自然是循环填充IAT了.
00417699 > FF96 3C790200 call dword ptr ds:[esi+2793C]
0041769F > 8BAE 30790200 mov ebp,dword ptr ds:[esi+27930]
004176A5 . 8DBE 00F0FFFF lea edi,dword ptr ds:[esi-1000]
004176AB . BB 00100000 mov ebx,1000
004176B0 . 50 push eax
004176B1 . 54 push esp
004176B2 . 6A 04 push 4
004176B4 . 53 push ebx
004176B5 . 57 push edi
004176B6 . FFD5 call ebp ; 修改PE头的属性,为了下面进行修复节名操作
004176B8 . 8D87 9F010000 lea eax,dword ptr ds:[edi+19F]
004176BE . 8020 7F and byte ptr ds:[eax],7F
004176C1 . 8060 28 7F and byte ptr ds:[eax+28],7F ; 修复节名,修复为`UPX1
004176C5 . 58 pop eax
004176C6 . 50 push eax
004176C7 . 54 push esp
004176C8 . 50 push eax
004176C9 . 53 push ebx
004176CA . 57 push edi
004176CB . FFD5 call ebp ; 上面修完了,应该改回去了。。
004176CD . 58 pop eax
004176CE . 61 popad
004176CF . 8D4424 80 lea eax,dword ptr ss:[esp-80]
004176D3 > 6A 00 push 0
004176D5 . 39C4 cmp esp,eax
004176D7 .^ 75 FA jnz short 004176D3 ; 开辟一块局部变量内存出来
004176D9 . 83EC 80 sub esp,-80
004176DC .- E9 EF9EFEFF jmp 004015D0 ; Over
|
能力值:
( LV15,RANK:520 )
|
-
-
8 楼
[QUOTE=NiGHter;969175]无聊,粗略拖到OD过了一遍.
加壳选项应该加的有问题吧.
只为帮LZ的回复页数增加贡献一份力量 .. 没细看具体是啥了..
struct ImportTab
{
unsigned int n;
unsigned int IatOffset;
ApiStr apis[0...[/QUOTE]
谢谢酱油哥顶贴
|