照舊SoftICE啟動不了,用了1個小時修正,可以啟動,
7年不玩了,命令都不知道了,還是用OllyICE,反正都是學,
不如學習壹個新的軟件,估計這個客戶端程序也用不到SoftICE。
OllyICE很好用,10分鐘上手,開始分析!shit,1個小時過後,
都沒跟出來。
這是個多線程的程序,最多的時候3個線程,主線程啟動、初始化,
其中壹個線程負責發送、接收心跳數據包,這個線程裏有壹個TIMER,
每隔30000ms就自動發送壹個心跳數據包到服務器端。
還是回來看看有沒有其他的方法,***找出6種分析跟蹤方法,
最後找到了那段很小的加密程序,現在把它列出來。
具體的匯編源代碼就不貼了,有興趣的可以從0040AC68的OFFSET看,
那是加密程序的開始。下面比較清晰的說壹下這個加密。
設X是那個要加密的ASCII字符,則加密如下:
((X & 2^0) << 7 ) | ((X & 2^1 ) >> 1 ) |
((X & 2^2) << 2 ) | ((X & 2^3 ) << 2 ) |
((X & 2^4) << 2 ) | ((X & 2^5 ) >> 2 ) |
((X & 2^6) >> 4 ) | ((X & 2^7 ) >> 6 ) = Y
這就是那個加密算法,這是匯編的直接翻譯,
如果妳會點C語言的知識,很容易就可以寫成C程序,
希望妳還是看看0040AC68處的程序,因為上面的移位操作,
有的是算術的,有的是邏輯的,妳自己想想再寫。
接收數據包以後的數據包解密程序沒有跟,
覺得沒有必要了,妳看看上邊的程序就可以寫出解密程序,
從開始整理環境到分析完成,2個小時,shit,浪費時間!
另,上幾篇文章提到的代替client.exe的程序,
今天下午基本完成,正在測試,
不過不會發布了,還有破解的client.exe也不發布了,
因為看大家只是看看,看來對大部分人都沒什麽作用,
就寫到這,封筆!!!
謝謝各位看客!
算了,把寫的壹個解密程序貼出來!
#include "stdlib.h"
#include "stdio.h"
main(){
FILE * file_handle , * output_handle;
char X;
if(!(file_handle = fopen("register.dat" , "rb" ))){
printf("file_handle error!\n");
exit(1);
}
if(!(output_handle = fopen("output.txt" , "wb" ))){
printf("output_handle error!\n");
exit(1);
}
fseek(file_handle,0,SEEK_SET);
fseek(output_handle,0,SEEK_SET);
while(!feof(file_handle)){
X = getc(file_handle);
X = ((X & 1 ) << 1 ) | ((X & 2 ) >> 6 ) |
((X & 4) << 4 ) | ((X & 8 ) << 2 ) |
((X & 16) >> 2 ) | ((X & 32 ) >> 2 ) |
((X & 64) >> 2 ) | ((X & 128 ) >> 7 );
putc( X , output_handle );
}
fclose(file_handle);
fclose(output_handle);
}
其中register.dat是sniffer保存數據包的binary內容,output.txt是解密後的輸出,
妳可能需要用winhex看看結果。註意,上邊的程序沒有考慮算術和邏輯移位的區別,
所以,可能個別的字符解密不正確,但99%的字符都是正確的。
具體重要部分的數據格式是這樣的:
“用戶名,密碼,網卡地址,IP地址,'internet',客戶端版本號1.4.9”
另外,最前邊的還有壹些數據的意義不知道是什麽,不過不重要了!
不像是填充數據。上邊每個字段中間有2個字符分隔,都不壹樣,
不清楚用的是什麽,不過可以確定,肯定是沒什麽用的分隔符,
分析了所有的信息內容,如果是數據,不會用2個字符的。
再有,在它的返回確認包裏有壹個大的數字,不知道有什麽作用,
好像是壹個PRNG的數字,用來區別網絡連接?還是密鑰?