日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TM2008 preview4 / QQ2009 preview 聊天记录保存位置修改

發布時間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TM2008 preview4 / QQ2009 preview 聊天记录保存位置修改 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本來 QQ 的聊天記錄都放在安裝目錄下的,可是 TM2008,以及近日 tx 拿來炒作的 QQ2009,都把聊天記錄
放在“我的文檔”下了。前幾天正式決定從 TM2007 轉2008,當時暫時把“我的文檔”移到別的盤下了。不過
心里總是不爽。今天自習得很煩,又回來搞它,終于搞定了~

首先是猜測它取得我的文檔路徑的方法。

網上查了下,較多的是說 SHGetSpecialFolderPath。
(一開始引起我注意的是 SHGetSpecialFolderLocation,不過這個函數好像只能在 9x 系統里的)
SHGetSpecialFolderPath 的原型如下:

Syntax

BOOL SHGetSpecialFolderPath(?????
?? HWND hwndOwner,
?? LPTSTR lpszPath,
?? int nFolder,
?? BOOL fCreate
);
Parameters

hwndOwner
?? Handle to the owner window the client should specify
?? if it displays a dialog box or message box.
lpszPath
?? Pointer to a null-terminated string that receives the
? ?drive and path of the specified folder.
?? This buffer must be at least MAX_PATH characters in size.
nFolder
?? A CSIDL that identifies the folder of interest.
? ?If a virtual folder is specified, this function will fail.
fCreate
?? Indicates if the folder should be created if it does not already exist.
?? If this value is nonzero,?the folder will be created.
?? If this value is zero, the folder will not be created.
Return Value

Returns TRUE if successful, or FALSE otherwise.


其中第二個參數應該是返回的路徑,第三個參數是用來確定要找哪一個特殊目錄的,
“我的文檔”對應的這個參數值是 5。

好了,開始調試,載入 TM.exe:


設斷點。然后直接 F9 運行。

第一次斷的時候,看堆棧:


那個參數是 1A,所以不是所要找的。

繼續 F9。期間有幾次異常,全部 Shift+F9 跳過(好像有八九次)。
這八九次過后的第一次斷點,就是要找的:

圖中可以看到那個參數為 5

執行到返回,回到調用處:

可以看到,我的文檔路徑存會被放在 SS:[EBP-3A8],調用函數后,他又被復制到 ECX。
ECX 再繼續影響下面的程序。
中間那個 JE 是取“我的文檔”目錄失敗后的處理

為了簡單起見,考慮這樣做:在文件空白處存放我自己所需要的路徑,然后直接把這個地址給 ECX。

做這樣的修改:


其中 0046BE00 附近狀況:


接下來動手修改了。原來那個 00442A60 的地方對應 KernelUtil.dll 的 00022A60 處。
對照 OllyDbg 里面的樣子,一共改 8 個字節。


然后 0046BE00 對應文件中 0004BE00,在這里寫入我要的路徑(注意是 Unicode):


本以為好了的。

感謝 BlackWhite 指出:

不過有一點你可能沒有想到,就是對于DLL來講,它引用的變量地址是有可能會變化的。
這一點有別于EXE程序,因為EXE程序的加載到內存中的起始地址必定=0x400000。對于
DLL來講,它每次載入內存的時候,載入的起始地址一旦發生變化,則它里面所有要引用
到的變量地址就全部會變。因為DLL首地址變化而對變量地址進行相應調整的過程叫做重
定位(relocation)。


要處理DLL內這種有可能變化的變量地址,通常的做法是寫一段如下的程序來獲得運行時的地址:
401000 call 401005
401005 pop eax??? ; EAX=401005就是運行時本條指令的地址
401006 sub eax, 5 ; EAX=401000就是運行時本段程序的首地址
?????????????????? ; 其中5是call指令的長度

然后假如在402000h有一個變量要訪問,則可以這樣寫:
mov edx, [eax+1000h]; 這里的1000h就是該變量離本段程序首地址的相對距離

以上這段程序的好處就是:如果本段程序的首地址發生變化,例如變成
801000,則call 801005; pop eax; sub eax,5后,EAX=801000,
從而eax+1000h必定可以精確地指向那個變量。


所以最后我改成了這樣子:

00442A60??? E8 00000000???? CALL KernelUt.00442A65
00442A65??? 59????????????? POP ECX
00442A66??? 81C1 9B930200?? ADD ECX,2939B
00442A6C??? EB 1D?????????? JMP SHORT KernelUt.00442A8B

然后寫了個補丁,以上 2008-01-18。

2008-01-25:
發現 QQ2009 preview 的這個 dll 和 TM2008 preview4 的是不一樣的。更新補丁。


按此直接下載

如果不行請到我網盤下載:http://streamlet.ys168.com/

總結

以上是生活随笔為你收集整理的TM2008 preview4 / QQ2009 preview 聊天记录保存位置修改的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。