之所以需要這個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