IAT加密我就来提一下吧
以前完整的跟踪过一次 现在都忘了
OD载入 直接F9
005D406C 77EF9C2D gdi32.CombineRgn
005D4070 77EFC42D gdi32.ExtEscape
005D4074 77EF5A6A gdi32.GetDeviceCaps
005D4078 77EFB329 gdi32.GetSystemPaletteEntries
005D407C 77EFB479 gdi32.GetPixel
005D4080 77EFB4FF gdi32.SetPixel
005D4084 77EF61EF gdi32.CreateBitmap
005D4088 77EF6F79 gdi32.BitBlt
005D408C 00000000
005D4090 003F0000
005D4090 这里就是已经加密过了的kernel32库函数
对此下写入断点 一直F9到写入003F0000的时候
000314BE A9 00000080 TEST EAX,80000000
000314C3 74 09 JE SHORT 000314CE
000314C5 25 FFFFFF7F AND EAX,7FFFFFFF
000314CA 6A 00 PUSH 0
000314CC EB 0E JMP SHORT 000314DC
000314CE 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8]
000314D1 0341 08 ADD EAX,DWORD PTR DS:[ECX+8]
000314D4 33C9 XOR ECX,ECX
000314D6 66:8B08 MOV CX,WORD PTR DS:[EAX]
000314D9 51 PUSH ECX
000314DA 40 INC EAX
000314DB 40 INC EAX
000314DC 50 PUSH EAX
000314DD FF75 FC PUSH DWORD PTR SS:[EBP-4]
000314E0 FF93 0A210010 CALL DWORD PTR DS:[EBX+1000210A] //获取函数地址 跟进
000300E6 E8 00000000 CALL 000300EB
000300EB 5B POP EBX ; 000300EB
000300EC 81EB FE103E00 SUB EBX,3E10FE
000300F2 FF75 10 PUSH DWORD PTR SS:[EBP+10]
000300F5 FF75 0C PUSH DWORD PTR SS:[EBP+C]
000300F8 FF75 08 PUSH DWORD PTR SS:[EBP+8]
000300FB FF93 2F103E00 CALL DWORD PTR DS:[EBX+3E102F] //GetProcAddress
00030101 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00030104 8B8B 61103E00 MOV ECX,DWORD PTR DS:[EBX+3E1061]
0003010A 3B4D 08 CMP ECX,DWORD PTR SS:[EBP+8] //ecx存放着kernel32模块的基地址
[ebp+8] 为当前模块的基地址
0003010D 75 63 JNZ SHORT 00030172 //下面就是进行简单的加密 所以把这里的jnz改为jmp就可以跳过kernel32函数的加密了 到时候dump出来就完整了