标签:
1,打开文本记事本【这里必须是32位的文本记事本程序】,因为目前的OD无法调试64位程序。。。
2,打开之后,用OD附加,按F9运行,因为本实例是用远程注入线程的模式启动注入代码的,所以断一下线程加载。选项-》调试设置-》事件-》中断于新线程
3,打开cmd控制台,CD到文件夹路径,输入程序.exe pid,pid为记事本的进程ID,运行一下,OD会断在注入线程的开始处。
CE0000中存放的是线程回调函数的参数,为这样的一个结构体
typedef struct _THREAD_PARAM
{
FARPROC pFunc[2]; // LoadLibraryA(), GetProcAddress()
} THREAD_PARAM, *PTHREAD_PARAM;
当然这个地址是随机的哈,系统自己选择合适的地址分配的内存。
运行到第七行,再看图
紧接着第七行,PUSH ESP,ESP中存放的是"USER32.DLL“,将这个字窜指针压入了栈,下一行CALL 【ESI】,ESI的值是CE0000,不正好是LOADLIBRARY函数的起始地址么。看到这儿我真想说,尼妈,真高级!太奇妙了。
接下来猜一下吧,如法炮制调用GETPROCADDRESS吧。跟踪一下。
标签:
原文地址:http://www.cnblogs.com/DJ0322/p/4511905.html