提交 6e2ece38 编写于 作者: L ljc545w

修复部分已知Bug

上级 6c267e45
......@@ -8,14 +8,14 @@ struct BackupParams {
BOOL BackupSQLiteDB(DWORD DbHandle, BSTR savepath) {
if (!hProcess)
return 0;
return 1;
DWORD dwHandle = 0x0;
DWORD dwId = 0x0;
DWORD dwWriteSize = 0x0;
LPVOID savepathAddr = VirtualAllocEx(hProcess, NULL, 1, MEM_COMMIT, PAGE_READWRITE);
BackupParams* paramAndFunc = (BackupParams*)::VirtualAllocEx(hProcess, 0, sizeof(BackupParams), MEM_COMMIT, PAGE_READWRITE);
if (!savepathAddr || !paramAndFunc)
return 0;
return 1;
char* a_savepath = _com_util::ConvertBSTRToString(savepath);
if (savepathAddr)
WriteProcessMemory(hProcess, savepathAddr, a_savepath, strlen(a_savepath) + 1, &dwWriteSize);
......@@ -34,9 +34,9 @@ BOOL BackupSQLiteDB(DWORD DbHandle, BSTR savepath) {
CloseHandle(hThread);
}
else {
return 0;
return 1;
}
VirtualFreeEx(hProcess, savepathAddr, 0, MEM_RELEASE);
VirtualFreeEx(hProcess, paramAndFunc, 0, MEM_RELEASE);
return dwHandle == 1;
return dwHandle;
}
\ No newline at end of file
......@@ -34,6 +34,7 @@
#define IDA_BASE 0x10000000
BOOL SQLite3_Backup_Init_Patched = FALSE;
DWORD lpAddressBackupDB = 0x0;
typedef int(__cdecl* Sqlite3_open)(const char*, DWORD*);
typedef DWORD(__cdecl* Sqlite3_backup_init)(DWORD, const char*, DWORD, const char*);
......@@ -45,7 +46,6 @@ typedef int(__cdecl* Sqlite3_backup_finish)(DWORD);
typedef int(__cdecl* Sqlite3_errcode)(DWORD);
typedef int(__cdecl* Sqlite3_close)(DWORD);
DWORD OffsetFromIdaAddr(DWORD idaAddr) {
return idaAddr - IDA_BASE;
}
......@@ -130,8 +130,9 @@ int BackupSQLiteDB(DWORD DbHandle,const char* BackupFile)
{
DWORD wxBaseAddress = GetWeChatWinBase();
PatchSQLite3_Backup_Init();
// 请不要注释掉这一行,也不要对其做任何改动,如果你不希望备份完成后微信崩溃
#ifdef _DEBUG
cout << "开始备份,文件保存至: " << BackupFile << endl;
#endif
DWORD address_sqlite3_open = wxBaseAddress + OffsetFromIdaAddr(0x1138ACD0);
DWORD address_sqlite3_backup_init = wxBaseAddress + OffsetFromIdaAddr(0x1131C110);
DWORD address_sqlite3_backup_step = wxBaseAddress + OffsetFromIdaAddr(0x1131C510);
......@@ -140,7 +141,7 @@ int BackupSQLiteDB(DWORD DbHandle,const char* BackupFile)
DWORD address_sqlite3_close = wxBaseAddress + OffsetFromIdaAddr(0x113880A0);
DWORD address_sqlite3_backup_remaining = wxBaseAddress + OffsetFromIdaAddr(0x1131CC50);
DWORD address_sqlite3_backup_pagecount = wxBaseAddress + OffsetFromIdaAddr(0x1131CC60);
DWORD address_sqlite3_errcode = wxBaseAddress + OffsetFromIdaAddr(0x11356570);
DWORD address_sqlite3_errcode = wxBaseAddress + OffsetFromIdaAddr(0x11389970);
const char* myMain = "main";
int rc = backupDb(
DbHandle,
......@@ -156,8 +157,10 @@ int BackupSQLiteDB(DWORD DbHandle,const char* BackupFile)
address_sqlite3_errcode,
address_sqlite3_close,
XProgress);
#ifdef _DEBUG
cout << "备份完成: " << BackupFile << endl;
return rc == 1;
#endif
return rc;
}
BOOL BackupSQLiteDBRemote(LPVOID lpParameter) {
......
......@@ -67,7 +67,7 @@ DWORD GetSelfInfoRemote() {
}
else {
temp = (char*)SelfInfoAddr[i];
if (strlen(temp) == 0)
if (temp == NULL || strlen(temp) == 0)
temp = (char*)"null";
}
wchar_t* wtemp = new wchar_t[strlen(temp) + 1];
......
......@@ -23,7 +23,7 @@ BOOL APIENTRY DllMain( HMODULE hModule,
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)BackupSQLiteDB);
printf("BackupSQLiteDB 0x%08X\n", (DWORD)BackupSQLiteDBRemote);
#endif
break;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册