Notes for process: UnPackMe 2009-2-15 2:19:52
003F157B >/$ BD 082A3F00 mov ebp, 003F2A08 ;OD载入的入口点
003F1580 |. C745 00 2C013>mov dword ptr [ebp], 003F012C
003F1587 |. FF4D 08 dec dword ptr [ebp+8]
003F158A |. C645 0C 05 mov byte ptr [ebp+C], 5
003F158E |. 8D7D 14 lea edi, dword ptr [ebp+14]
003F1591 |. 31C0 xor eax, eax
003F1593 |. B4 04 mov ah, 4
003F1595 |. 89C1 mov ecx, eax
003F1597 |. F3:AB rep stos dword ptr es:[edi]
003F1599 |. BF E4FC3F00 mov edi, 003FFCE4
003F159E |. 57 push edi
003F159F |. BE 6C163F00 mov esi, 003F166C ;第一次压栈,也可以在这里用ESP定律
003F15A4 |> /31C9 xor ecx, ecx
003F15A6 |. |41 inc ecx
003F15A7 |. |FF4D 0C dec dword ptr [ebp+C]
003F15AA |> |8D9C8D A00000>/lea ebx, dword ptr [ebp+ecx*4+A0] ; 一个循环
003F15B1 |. |FFD6 |call esi
003F15B3 |. |10C9 |adc cl, cl
003F15B5 |.^|73 F3 \jnb short 003F15AA
003F15B7 |. |FF45 0C inc dword ptr [ebp+C] ; 这里F4
003F15BA |. |91 xchg eax, ecx
003F15BB |. |AA stos byte ptr es:[edi]
003F15BC |. |83C9 FF or ecx, FFFFFFFF
003F15BF |> |8D5C8D 18 /lea ebx, dword ptr [ebp+ecx*4+18]
003F15C3 |. |FFD6 |call esi
003F15C5 |.^\74 DD |je short 003F15A4 ; 又调回去了,不让它跳
003F15C7 |. E3 17 |jecxz short 003F15E0 ; 这里F4
003F15C9 |. 8D5D 1C |lea ebx, dword ptr [ebp+1C]
003F15CC |. FFD6 |call esi
003F15CE |. 74 10 |je short 003F15E0
003F15D0 |. 8D9D A0080000 |lea ebx, dword ptr [ebp+8A0]
003F15D6 |. E8 EC000000 |call 003F16C7
003F15DB |. 8B45 10 |mov eax, dword ptr [ebp+10]
003F15DE |. EB 42 |jmp short 003F1622
003F15E0 |> 8D9D A0040000 |lea ebx, dword ptr [ebp+4A0]
003F15E6 |. E8 DC000000 |call 003F16C7
003F15EB |. 49 |dec ecx
003F15EC |. 49 |dec ecx
003F15ED |. 78 40 |js short 003F162F
003F15EF |. 8D5D 20 |lea ebx, dword ptr [ebp+20]
003F15F2 |. 74 03 |je short 003F15F7
003F15F4 |. 83C3 40 |add ebx, 40
003F15F7 |> 31D2 |xor edx, edx
003F15F9 |. 42 |inc edx
003F15FA |> E8 BE000000 |/call 003F16BD
003F15FF |. 8D0C48 ||lea ecx, dword ptr [eax+ecx*2]
003F1602 |. F6C2 10 ||test dl, 10
003F1605 |.^ 74 F3 |\je short 003F15FA
003F1607 |. 41 |inc ecx ; 这里F4
003F1608 |. 91 |xchg eax, ecx
003F1609 |. 8D9D A0080000 |lea ebx, dword ptr [ebp+8A0]
003F160F |. E8 B3000000 |call 003F16C7
003F1614 |. 3D 00080000 |cmp eax, 800
003F1619 |. 83D9 FF |sbb ecx, -1
003F161C |. 83F8 60 |cmp eax, 60
003F161F |. 83D9 FF |sbb ecx, -1
003F1622 |> 8945 10 |mov dword ptr [ebp+10], eax
003F1625 |. 56 |push esi
003F1626 |. 89FE |mov esi, edi
003F1628 |. 29C6 |sub esi, eax
003F162A |. F3:A4 |rep movs byte ptr es:[edi], byte pt>
003F162C |. 5E |pop esi
003F162D |.^ EB 90 \jmp short 003F15BF
003F162F |> BE 3D004000 mov esi, 0040003D ; 这里F4
003F1634 |. BB 20293F00 mov ebx, <&KERNEL32.LoadLibraryA>
003F1639 |. 55 push ebp
003F163A |> 46 inc esi
003F163B |. AD lods dword ptr [esi]
003F163C |. 85C0 test eax, eax
003F163E |. 74 2A je short 003F166A ; 这里跳出去就解密完成了
003F1640 |. 97 xchg eax, edi
003F1641 |. 56 push esi
003F1642 |. FF13 call dword ptr [ebx]
003F1644 |. 85C0 test eax, eax
003F1646 |. 74 16 je short 003F165E
003F1648 |. 95 xchg eax, ebp
003F1649 |> AC /lods byte ptr [esi]
003F164A |. 84C0 |test al, al
003F164C |.^ 75 FB \jnz short 003F1649
003F164E |. 3806 cmp byte ptr [esi], al
003F1650 |.^ 74 E8 je short 003F163A
003F1652 |. 78 0E js short 003F1662
003F1654 |. 56 push esi
003F1655 |> 55 push ebp
003F1656 |. FF53 04 call dword ptr [ebx+4]
003F1659 |. AB stos dword ptr es:[edi]
003F165A |. 85C0 test eax, eax
003F165C |.^ 75 EB jnz short 003F1649
003F165E |> 40 inc eax
003F165F |. 5B pop ebx
003F1660 |. 59 pop ecx
003F1661 |. C3 retn
003F1662 |> 46 inc esi
003F1663 |. 31C0 xor eax, eax
003F1665 |. 66:AD lods word ptr [esi]
003F1667 |. 50 push eax
003F1668 |.^ EB EB jmp short 003F1655
003F166A |> 5D pop ebp ; 来到这里解密就完成了,所以就在这里F4比较直接
003F166B \. C3 retn ; 继续F8
如果直接在第一个压栈的地方用ESP定律,就可以省去上面的麻烦,好了,继续往下看:
003FFCE4 . BF 00104000 mov edi, 00401000
003FFCE9 . 89FB mov ebx, edi
003FFCEB . 81EB 04000000 sub ebx, 4
003FFCF1 . 895D 58 mov dword ptr [ebp+58], ebx
003FFCF4 . 31C0 xor eax, eax
003FFCF6 . 8945 5C mov dword ptr [ebp+5C], eax
003FFCF9 . 8945 64 mov dword ptr [ebp+64], eax
003FFCFC . 40 inc eax
003FFCFD . 8945 60 mov dword ptr [ebp+60], eax
003FFD00 . 8945 68 mov dword ptr [ebp+68], eax
003FFD03 . 8D5E 58 lea ebx, dword ptr [esi+58]
003FFD06 . 31C9 xor ecx, ecx
003FFD08 > AD lods dword ptr [esi]
003FFD09 . 895C8D 00 mov dword ptr [ebp+ecx*4], ebx
003FFD0D . 01C3 add ebx, eax
003FFD0F . 41 inc ecx
003FFD10 . 80F9 16 cmp cl, 16
003FFD13 .^ 75 F3 jnz short 003FFD08
003FFD15 . 8B75 04 mov esi, dword ptr [ebp+4] ; 这里F4
003FFD18 . 8775 00 xchg dword ptr [ebp], esi
003FFD1B . 57 push edi
003FFD1C . 8DBD 68040000 lea edi, dword ptr [ebp+468]
003FFD22 . AC lods byte ptr [esi]
003FFD23 . 0FB6C8 movzx ecx, al
003FFD26 . BB 3DFF3F00 mov ebx, 003FFF3D
003FFD2B > 89F0 mov eax, esi
003FFD2D . AB stos dword ptr es:[edi]
003FFD2E . 31C0 xor eax, eax
003FFD30 . AC lods byte ptr [esi]
003FFD31 . 3C 66 cmp al, 66
003FFD33 . 75 01 jnz short 003FFD36
003FFD35 . AC lods byte ptr [esi]
003FFD36 > 3C 0F cmp al, 0F
003FFD38 . 75 03 jnz short 003FFD3D
003FFD3A . AC lods byte ptr [esi]
003FFD3B . B4 01 mov ah, 1
003FFD3D > D1E8 shr eax, 1
003FFD3F . D7 xlat byte ptr [ebx+al]
003FFD40 . 73 03 jnb short 003FFD45
003FFD42 . C0E8 04 shr al, 4
003FFD45 > A8 02 test al, 2
003FFD47 . 74 01 je short 003FFD4A
003FFD49 . 46 inc esi
003FFD4A >^ E2 DF loopd short 003FFD2B ; 这里个循环,就在下面F4就好
003FFD4C . 5F pop edi
003FFD4D > 31C0 xor eax, eax
003FFD4F . 3945 64 cmp dword ptr [ebp+64], eax
003FFD52 . 74 04 je short 003FFD58
003FFD54 . 8745 64 xchg dword ptr [ebp+64], eax
003FFD57 . 96 xchg eax, esi
003FFD58 > 3B75 00 cmp esi, dword ptr [ebp]
003FFD5B . 0F84 9F190000 je 00401700 ; 看到了哦,这里有个长跳,就在这里F4
这个跳转没有实现,所以,我们在这个指令上按回车,就可以来到还没有被填好的OEP上了!
00401700 > \0000 add byte ptr [eax], al
00401702 . 0000 add byte ptr [eax], al
00401704 . 0000 add byte ptr [eax], al
00401706 . 0000 add byte ptr [eax], al
00401708 . 0000 add byte ptr [eax], al
0040170A . 0000 add byte ptr [eax], al
0040170C . 0000 add byte ptr [eax], al
0040170E . 0000 add byte ptr [eax], al
00401710 . 0000 add byte ptr [eax], al
00401712 . 0000 add byte ptr [eax], al
00401714 . 0000 add byte ptr [eax], al
00401716 . 0000 add byte ptr [eax], al
在命令行里输入: HE 00401700 下个硬件执行断点,然后SHIFT+F9,就OK了,至于修复没特别的,不多说!