WebInspect:強(qiáng)大的網(wǎng)頁程序掃描器
SPI Dynamics' WebInspect應(yīng)用程序安全評(píng)估工具幫你識(shí)別已知和未知的網(wǎng)頁層漏洞。它還能檢測到Web服務(wù)器的配置屬性,以及進(jìn)行常見的網(wǎng)頁攻擊,例如參數(shù)注入、跨網(wǎng)站腳本、目錄游走等等。
>>去網(wǎng)絡(luò)安全工具百寶箱看看其它安全工具
有趣的WebInspect的加密方法
從去年開始,我開始關(guān)注這款優(yōu)秀的WEB application漏洞掃描軟件,這東西除了速度比較慢以外,其它的功能真是不錯(cuò)。我當(dāng)時(shí)研究了一下,被它的用來驗(yàn)證license的那幾個(gè)dll給嚇住了,里面霍然寫著一串RSA的key,我就認(rèn)為這東西除了暴力破解,應(yīng)該沒有其它方法。最近研究了一下RSA算法,正打算用它練練手。結(jié)果我仔細(xì)研究一下這東西,發(fā)現(xiàn)居然出奇的簡單,令我真是感到非常不可思議。
WebInspect在你注冊(cè)后,會(huì)給你發(fā)一個(gè)key文件,這個(gè)就是所謂的注冊(cè)文件,里面有你的注冊(cè)信息,然后webinspect在啟動(dòng)的時(shí)候會(huì)把它解密,讀出里面的信息,所用的加密函數(shù)是hostinfo.crypt,這個(gè)函數(shù)即用來加密也用來解密,所謂的加密無非就是簡單的xor了一下,我也寫了一個(gè)程序,來調(diào)用這個(gè)crypt:
- #include "stdafx.h"
 - #include
 - #include
 - int Crypt (
 - int encrypt,
 - int key,
 - int keysize,
 - int msg,
 - int msgsize);
 - typedef int(WINAPI* pCrypt) (
 - int encrypt,
 - int key,
 - int keysize,
 - int msg,
 - int msgsize);
 - void main(int argc, char* argv[])
 - {
 - HINSTANCE m_hDll;
 - pCrypt m_crypt;
 - FILE *stream;
 - FILE *fout;
 - int numread;
 - char key[50];
 - char msg[2048];
 - memset((void *)msg,0,2048);
 - m_hDll=LoadLibrary("hostinfo.dll");
 - if (m_hDll < (HINSTANCE) HINSTANCE_ERROR)
 - {
 - m_hDll = NULL;
 - return;
 - }
 - m_crypt = (pCrypt)GetProcAddress(m_hDll, "crypt");
 - if( (stream = fopen( "mmm1.key", "r+b" )) != NULL ) //這里是我的原始注冊(cè)文件
 - {
 - numread = fread( key, sizeof( char ), 50, stream );//頭上50字節(jié)是key
 - if (numread != -1)
 - printf("key is : %s",key);
 - numread = fread( msg, sizeof( char ), 2048, stream );//剩下的是加密后的內(nèi)容
 - if (numread != -1){
 - m_crypt(1,(int )key,50,(int )msg,numread); //參數(shù)1的值等于1的,是解密
 - if( (fout = fopen( "mmm1.txt", "w+t" )) != NULL )
 - {
 - fwrite(key,sizeof(char),50,fout);
 - fwrite(msg,sizeof(char),numread,fout);
 - fclose(fout);
 - }
 - printf("msg is : %s",msg);
 - }
 - fclose(stream);
 - }
 - return ;
 - }
 
#p#
運(yùn)行一下,我們得到了mmm1.txt,它的內(nèi)容如下:
- //下面是文件內(nèi)容
 - 33383131352E31313131363839383135 SPI License File
 - Company=xxx ltd.
 - Contact=xxx xxx-
 - Address1=xxx#
 - Address2=
 - City=xxx
 - State=
 - PostalCode=xxx
 - Country=CHN
 - Phone=xxxx
 - Fax=
 - EMail=
 - [Start IP Range]
 - 216.183.127.201 216.183.127.201
 - [End IP Range]
 - MaxPageCount=0
 - MaxIssueCount=0
 - ValidFrom=5/8/2004
 - ValidTo=5/23/2007
 - RequireHTTPSFeedback=True
 - VerificationURL=https://download.spidynamics.com/spiXMLVulDB/spiXMLVulDB.asp
 - MaxABS=20
 - MaxGlobal=10
 - IPCount=1
 - IPScanCount=0
 - Product=
 - ProductionKey=True
 - MacIDs=
 - IPScanned=216.183.127.201:19
 - End SPI License File
 - //結(jié)束
 
#p#
需要注意的是”Start IP Range”,這里修改一下,比如把216.183.127.201 216.183.127.201改成 0.0.0.0 255.255.255.255,還有個(gè)地方要改一下IPCount,把1改成一個(gè)較大的數(shù),這個(gè)是用來控制你掃描的IP總數(shù)的。做了這兩下修改(需要注意的是這個(gè)是unix格式的文本文件,windows下存的時(shí)候要小心),我們就要把它加密回去,呵呵,同樣用hostinfo.crypt(這是crypt嗎?應(yīng)該叫encode才對(duì)):
- #include "stdafx.h"
 - #include
 - #include
 - int Crypt (
 - int encrypt,
 - int key,
 - int keysize,
 - int msg,
 - int msgsize);
 - typedef int(WINAPI* pCrypt) (
 - int encrypt,
 - int key,
 - int keysize,
 - int msg,
 - int msgsize);
 - void main(int argc, char* argv[])
 - {
 - HINSTANCE m_hDll;
 - pCrypt m_crypt;
 - FILE *stream;
 - FILE *fout;
 - int numread;
 - char key[50];
 - char msg[2048];
 - memset((void *)msg,0,2048);
 - m_hDll=LoadLibrary("hostinfo.dll");
 - if (m_hDll < (HINSTANCE) HINSTANCE_ERROR)
 - {
 - m_hDll = NULL;
 - return;
 - }
 - m_crypt = (pCrypt)GetProcAddress(m_hDll, "crypt");
 - if( (stream = fopen( "mmm1.txt", "r+b" )) != NULL )
 - {
 - numread = fread( key, sizeof( char ), 50, stream );
 - if (numread != -1)
 - printf("key is : %s",key);
 - numread = fread( msg, sizeof( char ), 2048, stream );
 - if (numread != -1){
 - m_crypt(0,(int )key,50,(int )msg,numread);// //參數(shù)1的值等于0的,是加密
 - if( (fout = fopen( "mmm2.key", "w+b" )) != NULL )
 - {
 - fwrite(key,sizeof(char),50,fout);
 - fwrite(msg,sizeof(char),numread,fout);
 - fclose(fout);
 - }
 - }
 - fclose(stream);
 - }
 - return ;
 - }
 
這樣我們得到了mmm2.key,放到webinspect里驗(yàn)證一下,果然沒問題,但是改過的key在線升級(jí)的時(shí)候會(huì)無效,所以正確的辦法是申請(qǐng)一個(gè)試用的key,在線把程序升級(jí)好,再用這個(gè)修改后的key.















 
 
 




 
 
 
 