一、逆向分析
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<rapidjson::StringBuffer> 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
posted on 2022-03-17 13:31  bzryk  阅读(2706)  评论(0编辑  收藏  举报