函数调用顺序为:KERNEL32!7c817077-mainCRTStartup-main
通常情况下,在调试程序的时候,往往会断在mainCRTStartuo这里。
main函数一共有三个参数,完整main函数如下:
int main(int argc,char *argv[],char *envp[]){}
这里的argv和envp对应mainCRTStartup里_setargv()和_setenvp()
无需关注三个参数具体细节,只需记住main函数具有三个参数。
打开程序
一步步往下看,直到
在进行call跳转函数前向堆栈压入了三个参数,虽说push个数不一定代表参数个数,但通过这一方法可以过滤不少信息。从函数跳转出来下一步就是add esp,0c;这是典型的堆栈外平衡,可以推测使用的是cdel。上面dword表示压入的数据是4个字节,平衡时采用0C,C/4=3,即参数个数。
代码:
步入call的函数:
发现出现0x160,并且发现将DS:[406030]赋值给EAX,并将EAX与160相加,最后又将EAX赋值回DS:[406030],可以推测406030是全局变量global的全局变量地址。
重新打开程序,寻找406030地址
发现在执行main函数前已经赋值,可以看见是小端序。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧