企业微信HOOK逆向(sdk)——登录二维码api


一、逆向分析 1、打开企业微信,如果自动登录需要先退出登录,再次代开停留在二维码扫码登录界面。附加到OD中。用手机扫描二维码,在OD的KERNELBASE.CreateFileW下断点,手机点击取消登录。这时二维码会获取一个最新的,并且保存到本地,在CreateFileW断点处观察入参是否是图片,如果不是继续F9,直到入参是一个jpg图片   2、Alt+F9运行到用户代码,一步步走找一个容易取到图片路径的合适的位置,用来下HOOK   二、编写代码   void WINAPI CallBack_WechatLogin(unsigned int nObject) { __try { if ((0 == nObject)) { return; }   wchar_t* pImgBuf = (wchar_t*)(nObject);   if ((NULL == pImgBuf)) { return; }   rapidjson::StringBuffer strBuf; rapidjson::Writer writer(strBuf);   writer.StartObject();   writer.Key("data"); writer.StartObject(); writer.Key("file"); char* filedt = UnicodeToUtf8(pImgBuf); writer.String(filedt); writer.EndObject();   writer.Key("type"); writer.Uint(MT_MSG_LOGIN_QRCODE); writer.EndObject();   BackReturn(strBuf.GetString());//回调   } __except (EXCEPTION_EXECUTE_HANDLER) {   } }   __declspec(naked) void My_WechatLogin() { __asm { pushad pushfd   push[ebp - 0x28] call dword ptr CallBack_WechatLogin   popfd popad   lea eax, [ebp - 0xF0]   jmp dword ptr CLogin::m_nJmpAddress } }   调用hook语句 Hook("WXWork.dll", 0x2E012B6, (unsigned int)My_WechatLogin, &m_nJmpAddress);     目前已实现大部分功能 接收和发送各种类型消息、群管理、加好友、自动进群、群发、群群发等 支持多开并记录上次登录状态(避免重复扫码),可提供接口,方便各种语言二次开发,欢迎技术交流。 qq:1031694913