|
006E5934 mov dword ptr ds:[6D4E77],ebx 006E593A push dword ptr ds:[6D4E77] 006E5940 mov dword ptr ss:[esp],eax 006E5943 pop dword ptr ds:[6D4EE3] ; KERNEL32.77E887E7 006E5949 push dword ptr ds:[6D4EE3] 006E594F mov dword ptr ss:[esp],edx 006E5952 mov dword ptr ss:[esp],esi //stolen code第6行,push esi的变形 006E5955 push esi 006E5956 mov dword ptr ss:[esp],ebx 006E5959 mov dword ptr ss:[esp],ACProtec.004CBFF8 006E5960 pop dword ptr ds:[6D4EDF] ; KERNEL32.77E887E7 006E5966 push dword ptr ds:[6D4EDF] 006E596C pop dword ptr ds:[6D4F03] ; KERNEL32.77E887E7 006E5972 push dword ptr ds:[6D4F03] 006E5978 mov eax,dword ptr ss:[esp] //stolen code第7行,mov eax,4cbff8的变形 006E597B pop dword ptr ds:[6D4EFF] ; KERNEL32.77E887E7 006E5981 nop 006E5982 nop 以上代码要一步一步按F7跟踪,注意执行前后各寄存器值的变化以及堆浅esp的变化,以便确认是附值还是push,从而得出正确的stolen code,并作好纪录。到006e5981后按F9继续运行。出现int3异常中断: 006E2CFE int3 006E2CFF nop 006E2D00 pop dword ptr fs:[0] ; 0012FFE0 006E2D06 add esp,4 006E2D09 pushad 006E2D0A call ACProtec.006E2D0F 006E2D0F pop esi ; 0012FFE0 006E2D10 sub esi,6 006E2D13 mov ecx,5B 006E2D18 sub esi,ecx 006E2D1A mov edx,8C98BB7 006E2D1F shr ecx,2 006E2D22 sub ecx,2 006E2D25 cmp ecx,0 006E2D28 jl short ACProtec.006E2D44 006E2D2A mov eax,dword ptr ds:[esi+ecx*4] 006E2D2D mov ebx,dword ptr ds:[esi+ecx*4+4] 006E2D31 xor eax,ebx 006E2D33 ror eax,12 006E2D36 add eax,edx 006E2D38 sub edx,7D69989C 006E2D3E mov dword ptr ds:[esi+ecx*4],eax 006E2D41 dec ecx 006E2D42 jmp short ACProtec.006E2D25 006E2D44 popad 006E2D45 popad 006E2D46 retn //在此处按F2,然后按shift-F9,停在此处再按F2取消,F7走1步 此时再次察看ESP=12FF90,去转存窗口,Ctrl+G:0012FF90 到达0012FF90内存处,在0012FF90处的4个字节上,下硬件访问->DWord 断点.F9运行,断下。 由于执行以下代码包含许多call,会影响程序代码和数据的变化,因此在这儿用LordPE完全DUMP进程。
上一页 [1] [2] [3] [4] [5] 下一页 |