之所以需要这个CALL是因为之前在淘宝卖一个软件时需要自动发消息功能,自己有时可能不在电脑旁,客人付款后就要把软件激活码及时发送出去。模拟按键又不太准确,所以找到了这个CALL。这段CALL代码是2013年找到的,现在应该也能用,放出来供有需要的人用。
具体怎么找到这个CALL的,自己也记不清了,阿里旺旺用的是UNICODE编码,这个CALL有两个参数wchar_t*类型的名称和wchar_t*类型的内容。
我在软件中把这个CALL包装成了一个成员函数,来看一下吧:
void Widget::sendMsg(QString nameX,QString textX)
{
QString addr = ui->lineEdit_3->text();
if(addr.isEmpty())
{
QMessageBox::warning(this,"提醒","ESI的值为空,请先向任意人发送一条信息");
}
QString sName = "cntaobao"+nameX;
QString sText = textX;
wchar_t sNameW[200]={0};
wchar_t sTextW[2000]={0};
memset(sNameW,0x0,sizeof(wchar_t) * 200);
memset(sTextW,0x0,sizeof(wchar_t) * 2000);
sName.toWCharArray(sNameW);
sText.toWCharArray(sTextW);
wchar_t* name = sNameW;
wchar_t* text =sTextW;
DWORD ecxAddr = addr.toULong();
__asm
{
PUSHAD
push 0x0
push 0x0
push 0x1
mov eax,text
push eax
push 0x0
mov edx,name
push edx
mov ecx,ecxAddr
mov eax,dword ptr ds:[ecx+0x1DC]
push eax
mov edi,dword ptr ds:[eax]
mov edx,dword ptr ds:[edi+0x28]
call edx
POPAD
}
}
void Widget::sendMsg(QString nameX,QString textX)
这就是两个参数,旺旺姓名和需要发送的内容,ESI寄存器应该是一个基址,可以用OD看一下。
程序里可以自动找到这个ESI需要的基址,用HOOK实现的。
特征码是:
QString pattern ="558BEC6AFF68\\w{8}64A1000000005083EC18535657A1\\w{8}33C5508D45F464A3000000008BF9897DE08B45108B4D08C700000000008B01508D4DE8E8";
利用正则反汇编16进制查找的。
最后放出源代码和工程,需要用VC的编译器编译,工程会生成一个WangWangHwnd.dll,利用源码中的DllLoader.exe程序这个Dll注入到阿里旺旺中即可,源码中也有数据库
的操作,那是为了之前为了记录买家数据和获取激活码用的,无视即可。
源码下载地址:
http://download.csdn.net/detail/hats8888/9649238