提交 315e4ab8 编写于 作者: L ljc545w

DLL新增加好友逻辑

上级 187ce8f8
#pragma once
#include<windows.h>
BOOL __stdcall AddFriendByV3(wchar_t* v3, wchar_t* message,int AddType);
BOOL __stdcall AddFriendByWxid(wchar_t* wxid, wchar_t* message);
extern "C" __declspec(dllexport) BOOL AddFriendByV3Remote(LPVOID lpParameter);
extern "C" __declspec(dllexport) BOOL AddFriendByWxidRemote(LPVOID lpParameter);
\ No newline at end of file
#include "pch.h"
// 添加好友CALL1偏移
#define AddFriendByV3Call1Offset 0x594944E0 - 0x593B0000
// 添加好友CALL2偏移
#define AddFriendByV3Call2Offset 0x59B20890 - 0x593B0000
// 添加好友CALL3偏移
#define AddFriendByV3Call3Offset 0x59B20980 - 0x593B0000
// 添加好友CALL4偏移
#define AddFriendByV3Call4Offset 0x63A23940 - 0x635C0000
// 添加好友参数偏移
#define AddFriendByV3ParamOffset 0x5B7138F4 - 0x593B0000
struct AddFriendByV3ParamStruct {
DWORD fill0 = 0x0;
DWORD fill1 = 0x0;
DWORD fill2 = -0x1;
DWORD fill3 = 0x0;
DWORD fill4 = 0x0;
DWORD fill5 = 0xF;
char nullbuffer[0xC] = { 0 };
};
struct AddFriendByV3Struct {
wchar_t* wxid;
wchar_t* message;
int AddType;
};
BOOL AddFriendByV3Remote(LPVOID lpParameter) {
AddFriendByV3Struct* afbvs = (AddFriendByV3Struct*)lpParameter;
BOOL isSuccess = AddFriendByV3(afbvs->wxid, afbvs->message,afbvs->AddType);
return isSuccess;
}
BOOL __stdcall AddFriendByV3(wchar_t* v3, wchar_t* message,int AddType) {
DWORD WeChatWinBase = GetWeChatWinBase();
DWORD AddFriendByV3Call1 = WeChatWinBase + AddFriendByV3Call1Offset;
DWORD AddFriendByV3Call2 = WeChatWinBase + AddFriendByV3Call2Offset;
DWORD AddFriendByV3Call3 = WeChatWinBase + AddFriendByV3Call3Offset;
DWORD AddFriendByV3Call4 = WeChatWinBase + AddFriendByV3Call4Offset;
DWORD AddFriendByV3ParamAddr = WeChatWinBase + AddFriendByV3ParamOffset;
WxBaseStruct pv3(v3);
AddFriendByV3ParamStruct AddFriendParam;
char* sv3 = new char[wcslen(v3) + 1];
ZeroMemory(sv3, wcslen(v3) + 1);
WideCharToMultiByte(CP_ACP, 0, v3, -1, sv3, wcslen(v3), NULL, NULL);
pv3.fill1 = (DWORD)sv3;
pv3.fill2 = wcslen(v3);
wchar_t* pmessage = message ? message : (wchar_t*)L"";
BOOL isSuccess = 0x0;
__asm {
pushad;
pushfd;
// 手机号 0xF,微信号 0x3,QQ号 0x1,wxid 0x6
mov edi, [AddType];
mov esi, 0x0;
sub esp, 0x18;
mov eax, esp;
mov dword ptr[eax], 0x0;
mov dword ptr[eax + 0x14], 0xF;
mov dword ptr[eax + 0x10], 0x0;
sub esp, 0x18;
lea eax, AddFriendParam;
mov ecx, esp;
push eax;
call AddFriendByV3Call1;
push esi;
push edi;
mov edi, pmessage;
sub esp, 0x14;
mov ecx, esp;
push - 0x1;
mov eax, edi;
push eax;
call AddFriendByV3Call2;
push 0x2;
lea eax, pv3;
sub esp, 0x14;
mov ecx, esp;
push eax;
call AddFriendByV3Call3;
mov eax, [AddFriendByV3ParamAddr];
mov eax, [eax];
mov ecx, eax;
call AddFriendByV3Call4;
mov isSuccess, eax;
popfd;
popad;
}
return isSuccess;
}
\ No newline at end of file
#include "pch.h"
// ӺCALL1ƫ
#define AddFriendByWxidCall1Offset 0x594944E0 - 0x593B0000
// ӺCALL2ƫ
#define AddFriendByWxidCall2Offset 0x59B20890 - 0x593B0000
// ӺCALL3ƫ
#define AddFriendByWxidCall3Offset 0x59B20980 - 0x593B0000
// ӺCALL4ƫ
#define AddFriendByWxidCall4Offset 0x59813940 - 0x593B0000
// ӺѲƫ
#define AddFriendByWxidParamOffset 0x5B7138F4 - 0x593B0000
struct AddFriendByWxidParamStruct {
DWORD fill0 = 0x0;
DWORD fill1 = 0x0;
DWORD fill2 = -0x1;
DWORD fill3 = 0x0;
DWORD fill4 = 0x0;
DWORD fill5 = 0xF;
char nullbuffer[0xC] = { 0 };
};
struct AddFriendByWxidStruct {
wchar_t* wxid;
wchar_t* message;
};
BOOL AddFriendByWxidRemote(LPVOID lpParameter) {
AddFriendByWxidStruct* afbws = (AddFriendByWxidStruct*)lpParameter;
BOOL isSuccess = AddFriendByWxid(afbws->wxid, afbws->message);
return isSuccess;
}
BOOL __stdcall AddFriendByWxid(wchar_t* wxid,wchar_t* message) {
DWORD WeChatWinBase = GetWeChatWinBase();
DWORD AddFriendByWxidCall1 = WeChatWinBase + AddFriendByWxidCall1Offset;
DWORD AddFriendByWxidCall2 = WeChatWinBase + AddFriendByWxidCall2Offset;
DWORD AddFriendByWxidCall3 = WeChatWinBase + AddFriendByWxidCall3Offset;
DWORD AddFriendByWxidCall4 = WeChatWinBase + AddFriendByWxidCall4Offset;
DWORD AddFriendByWxidParamAddr = WeChatWinBase + AddFriendByWxidParamOffset;
WxBaseStruct pwxid(wxid);
AddFriendByWxidParamStruct AddFriendParam;
char* swxid = new char[wcslen(wxid) + 1];
ZeroMemory(swxid, wcslen(wxid) + 1);
WideCharToMultiByte(CP_ACP, 0, wxid, -1, swxid, wcslen(wxid), NULL, NULL);
pwxid.fill1 = (DWORD)swxid;
pwxid.fill2 = wcslen(wxid);
wchar_t* pmessage = message ? message : (wchar_t*)L"";
BOOL isSuccess = 0x0;
__asm {
pushad;
pushfd;
mov edi, 0x6;
mov esi, 0x0;
sub esp, 0x18;
mov eax, esp;
mov dword ptr[eax], 0x0;
mov dword ptr[eax + 0x14], 0xF;
mov dword ptr[eax + 0x10], 0x0;
sub esp, 0x18;
lea eax, AddFriendParam;
mov ecx, esp;
push eax;
call AddFriendByWxidCall1;
push esi;
push edi;
mov edi, pmessage;
sub esp, 0x14;
mov ecx, esp;
push - 0x1;
mov eax, edi;
push eax;
call AddFriendByWxidCall2;
push 0x2;
lea eax, pwxid;
sub esp, 0x14;
mov ecx, esp;
push eax;
call AddFriendByWxidCall3;
mov eax, [AddFriendByWxidParamAddr];
mov eax, [eax];
mov ecx, eax;
call AddFriendByWxidCall4;
mov isSuccess, eax;
popfd;
popad;
}
return isSuccess;
}
\ No newline at end of file
......@@ -154,6 +154,7 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="AddFriend.h" />
<ClInclude Include="CheckFriendStatus.h" />
<ClInclude Include="DbBackup.h" />
<ClInclude Include="DbExecuteSql.h" />
......@@ -171,10 +172,12 @@
<ClInclude Include="SendFile.h" />
<ClInclude Include="SendImage.h" />
<ClInclude Include="SendText.h" />
<ClInclude Include="UserInfo.h" />
<ClInclude Include="SearchContact.h" />
<ClInclude Include="VerifyFriendApply.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="AddFriendByV3.cpp" />
<ClCompile Include="AddFriendByWxid.cpp" />
<ClCompile Include="CheckFriendStatus.cpp" />
<ClCompile Include="DbBackup.cpp" />
<ClCompile Include="DbExecuteSql.cpp" />
......@@ -189,6 +192,7 @@
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
<ClCompile Include="ReceiveMessage.cpp" />
<ClCompile Include="SearchContactByNet.cpp" />
<ClCompile Include="SelfInfo.cpp" />
<ClCompile Include="SendArticle.cpp" />
<ClCompile Include="SendAtText.cpp" />
......@@ -196,7 +200,7 @@
<ClCompile Include="SendFile.cpp" />
<ClCompile Include="SendImage.cpp" />
<ClCompile Include="SendText.cpp" />
<ClCompile Include="UserInfo.cpp" />
<ClCompile Include="SearchContactByCache.cpp" />
<ClCompile Include="LogMsgInfo.cpp" />
<ClCompile Include="VerifyFriendApply.cpp" />
</ItemGroup>
......
......@@ -34,9 +34,6 @@
<Filter Include="好友相关\好友列表">
<UniqueIdentifier>{24dc11dd-cb6a-4c63-bf21-35823cd389ab}</UniqueIdentifier>
</Filter>
<Filter Include="好友相关\好友信息">
<UniqueIdentifier>{564cc9ef-a939-4bfd-a420-a08b3072d198}</UniqueIdentifier>
</Filter>
<Filter Include="个人信息">
<UniqueIdentifier>{722c02ee-dda5-4a6a-9443-f1ed3c112709}</UniqueIdentifier>
</Filter>
......@@ -79,6 +76,12 @@
<Filter Include="好友相关\通过好友请求">
<UniqueIdentifier>{350447a5-87e5-438c-b54d-504bbb15b201}</UniqueIdentifier>
</Filter>
<Filter Include="好友相关\添加好友">
<UniqueIdentifier>{b6326361-658a-45dc-95da-64943e87d9ef}</UniqueIdentifier>
</Filter>
<Filter Include="好友相关\搜索好友">
<UniqueIdentifier>{564cc9ef-a939-4bfd-a420-a08b3072d198}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="framework.h">
......@@ -99,8 +102,8 @@
<ClInclude Include="FriendList.h">
<Filter>好友相关\好友列表</Filter>
</ClInclude>
<ClInclude Include="UserInfo.h">
<Filter>好友相关\好友信息</Filter>
<ClInclude Include="SearchContact.h">
<Filter>好友相关\搜索好友</Filter>
</ClInclude>
<ClInclude Include="SelfInfo.h">
<Filter>个人信息</Filter>
......@@ -138,6 +141,9 @@
<ClInclude Include="VerifyFriendApply.h">
<Filter>好友相关\通过好友请求</Filter>
</ClInclude>
<ClInclude Include="AddFriend.h">
<Filter>好友相关\添加好友</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp">
......@@ -158,8 +164,8 @@
<ClCompile Include="FriendList.cpp">
<Filter>好友相关\好友列表</Filter>
</ClCompile>
<ClCompile Include="UserInfo.cpp">
<Filter>好友相关\好友信息</Filter>
<ClCompile Include="SearchContactByCache.cpp">
<Filter>好友相关\搜索好友</Filter>
</ClCompile>
<ClCompile Include="SelfInfo.cpp">
<Filter>个人信息</Filter>
......@@ -197,5 +203,14 @@
<ClCompile Include="VerifyFriendApply.cpp">
<Filter>好友相关\通过好友请求</Filter>
</ClCompile>
<ClCompile Include="AddFriendByWxid.cpp">
<Filter>好友相关\添加好友</Filter>
</ClCompile>
<ClCompile Include="AddFriendByV3.cpp">
<Filter>好友相关\添加好友</Filter>
</ClCompile>
<ClCompile Include="SearchContactByNet.cpp">
<Filter>好友相关\搜索好友</Filter>
</ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -3,4 +3,5 @@
BOOL __stdcall GetUserInfoByWxId(wchar_t* wxid);
extern "C" __declspec(dllexport) DWORD GetWxUserInfoRemote(LPVOID lparamter);
extern "C" __declspec(dllexport) VOID DeleteUserInfoCacheRemote();
wchar_t* __stdcall GetUserNickNameByWxId(wchar_t* wxid);
\ No newline at end of file
wchar_t* __stdcall GetUserNickNameByWxId(wchar_t* wxid);
void __stdcall SearchContactByNet(wchar_t* keyword);
\ No newline at end of file
#include "pch.h"
#define SearchContactByNetCall1Offset 0x638BF150 - 0x635C0000
#define SearchContactByNetCall2Offset 0x63ACF9C0 - 0x635C0000
void __stdcall SearchContactByNet(wchar_t* keyword) {
DWORD SearchContactByNetCall1 = GetWeChatWinBase() + SearchContactByNetCall1Offset;
DWORD SearchContactByNetCall2 = GetWeChatWinBase() + SearchContactByNetCall2Offset;
WxBaseStruct pkeyword(keyword);
__asm {
pushad;
pushfd;
call SearchContactByNetCall1;
lea ebx, pkeyword;
push ebx;
mov ecx, eax;
call SearchContactByNetCall2;
popfd;
popad;
}
}
\ No newline at end of file
......@@ -11,21 +11,9 @@ BOOL APIENTRY DllMain( HMODULE hModule,
case DLL_PROCESS_ATTACH:
{
#ifdef _DEBUG
CreateConsole();
printf("SendImage 0x%08X\n", (DWORD)SendImage);
printf("SendText 0x%08X\n", (DWORD)SendText);
printf("SendFile 0x%08X\n", (DWORD)SendFile);
printf("SendAtText 0x%08X\n", (DWORD)SendAtText);
printf("GetFriendList 0x%08X\n", (DWORD)GetFriendList);
printf("GetUserInfoByWxId 0x%08X\n", (DWORD)GetUserInfoByWxId);
printf("SendArticle 0x%08X\n", (DWORD)SendArticle);
printf("SendCard 0x%08X\n", (DWORD)SendCard);
printf("CheckFriendStatus 0x%08X\n", (DWORD)CheckFriendStatus);
printf("GetChatRoomMembers 0x%08X\n", (DWORD)GetChatRoomMembers);
printf("ExecuteSql 0x%08X\n", (DWORD)ExecuteSQL);
printf("BackupSQLiteDB 0x%08X\n", (DWORD)BackupSQLiteDBRemote);
printf("VerifyFriendApply 0x%08X\n", (DWORD)VerifyFriendApply);
PrintProcAddr();
#endif
SearchContactByNet((wchar_t*)L"ljc545w");
break;
}
case DLL_THREAD_ATTACH:
......
......@@ -136,4 +136,23 @@ wstring wreplace(wstring source, wchar_t replaced, wstring replaceto) {
temp += buffer[i];
}
return temp;
}
void PrintProcAddr() {
CreateConsole();
printf("SendImage 0x%08X\n", (DWORD)SendImage);
printf("SendText 0x%08X\n", (DWORD)SendText);
printf("SendFile 0x%08X\n", (DWORD)SendFile);
printf("SendAtText 0x%08X\n", (DWORD)SendAtText);
printf("GetFriendList 0x%08X\n", (DWORD)GetFriendList);
printf("GetUserInfoByWxId 0x%08X\n", (DWORD)GetUserInfoByWxId);
printf("SendArticle 0x%08X\n", (DWORD)SendArticle);
printf("SendCard 0x%08X\n", (DWORD)SendCard);
printf("CheckFriendStatus 0x%08X\n", (DWORD)CheckFriendStatus);
printf("GetChatRoomMembers 0x%08X\n", (DWORD)GetChatRoomMembers);
printf("ExecuteSql 0x%08X\n", (DWORD)ExecuteSQL);
printf("BackupSQLiteDB 0x%08X\n", (DWORD)BackupSQLiteDBRemote);
printf("VerifyFriendApply 0x%08X\n", (DWORD)VerifyFriendApply);
printf("AddFriendByV3 0x%08X\n", (DWORD)AddFriendByV3);
printf("AddFriendByWxid 0x%08X\n", (DWORD)AddFriendByWxid);
}
\ No newline at end of file
......@@ -16,7 +16,7 @@
#include "SendFile.h"
#include "SendArticle.h"
#include "FriendList.h"
#include "UserInfo.h"
#include "SearchContact.h"
#include "SelfInfo.h"
#include "SendCard.h"
#include "CheckFriendStatus.h"
......@@ -28,6 +28,7 @@
#include "DbExecuteSql.h"
#include "DbBackup.h"
#include "VerifyFriendApply.h"
#include "AddFriend.h"
#include <vector>
#endif //PCH_H
......@@ -81,3 +82,4 @@ void HookAnyAddress(DWORD dwHookAddr, LPVOID dwJmpAddress, char* originalRecieve
void UnHookAnyAddress(DWORD dwHookAddr, char* originalRecieveCode);
DLLEXPORT void UnHookAll();
wstring wreplace(wstring source, wchar_t replaced, wstring replaceto);
void PrintProcAddr();
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册