菜鸟级CALL地址找法,客户端公告call地址例子
1.GS端修改公告内容为特定字符串比如:欢迎加入
2.HOOK API lstrlena
3.hooked_strlen 内 还原esp, 计算出调用当前sub的地址
4.判断如果传入hooked_strlen的参数也就是字符串,包含"欢迎加入",就那上面计算到的调用sub的地址去IDA看下就知道了
5.1.03h main 的地址为:0x00511C90,
还原堆栈内上一个call的地址方法:
void ParseStack(int ebp,int esp)
{
char* str=*(char**)(esp+0x4);
char* lastcall = *(char**)(esp);
FLOG(("%08x %s\r\n",lastcall,str));
}
int WINAPI my_lstrlena(char * str)
{
int r_ebp=0;
int r_esp=0;
__asm
{
mov esp,ebp
pop ebp
mov eax,ebp
mov edx,esp
push ebp
mov ebp,esp
sub esp,0x8
mov [ebp-0x8],eax
mov [ebp-0x4],edx
}
if(strstr(str,"欢迎"))
{
FLOG(("%s %08x %08x\r\n",str,r_ebp,r_esp));
ParseStack(r_ebp,r_esp);
}
return pfn_lstrlena(str);
}