菜鸟级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);
}

本文出自 7j45 > 奇迹一条龙