1. 程式人生 > >加密解密2

加密解密2

異或運算分析方法,為了簡單,這裡我們不再一封包作為分析,因為封包要從16位到10位的步驟,很麻煩,我們直接看下面的異或。
  從一個進位制到另一個進位制是一中異或運算,而且是單滿對映,所謂單滿對映,意思是每一個象都有原象,每一個原象都有象,例如我們的對映是從16進位制到10進位制,象,就是10進位制裡面的所有的數,而16進位制裡面的數就是原象,每一個10進位制的數都唯一對應一個16進位制的數,所以說所有象都有唯一一個原象,而反過來,每一個16進位制也唯一對應一個10進位制的數,所以每一個象都有且只有一個象,這樣的對映就是單滿對映!這樣的對映使用起來效率最高,可以知道每次呼叫函式返回的值都是有用的,下面這個也是單滿影射:

但是這個運算要分析起來是複雜的,我們從簡單的分析,你想一想,如果我們這樣對應,0對應A,1對應B,這樣一個一個對應下去,那麼如果你的生日是:1986年2月14日,如果我們把生日加密,按照我們的對映,結果就是這樣了,BJIG年C月BE 日,看看這個結果,是不是不那麼容易認了,這個就是加密,如果改變對應的開頭,不是0對應A而是0對應E那麼會是怎麼樣呢?當然會變的,異或運算本身簡單,但是可以看出來,加密還是很有效的!
那麼我們怎麼知道一個封包是不是異或運算加密的呢?
我們不知道!
對於這個回答,大家也許有些心灰,其實完全沒有必要,你知道我早上吃的什麼?不知道吧?當然不知道,誰知道呢?但是我們可以知道,要麼吃的食物,要麼喝的水,要麼什麼都沒有吃,如果沒吃,很簡單嘛,如果吃了,我把所有食物都說一遍,總有一個是你吃的吧,所以,我們雖然不知道封包具體使用異或運算沒有,但是我們可以假設已經採用了,然後繼續分析!異或運算不改變資料的任何性質,不會影響任何分析。
  

那麼怎麼分析呢?如果一個封包確實是異或運算加密的,我們如何可以找到它的加密方法呢?這就要採用列舉法來做了,所謂的列舉法,也稱窮舉法,如果你認為你發封包應該是數字,那麼就找到數字的對映,可以建立方程,比如:y=F(x)
那麼我們找幾個點,稱為已知點,然後解方程,例如,我們我們已經知道:a對應的是0,d對應的是3,f對應的是5,那麼我們可以這樣做,F(a)=0,F(d)=3,
而這種異或運算都是線性的,也就是可以認為是一維的,那麼有兩個點就可以算出來了,我們可以認為,對映就是:F(x)=Asc(x)-97,這裡是Asc()是VB裡面的一個函式,就是返回該字母的Ascii碼,這樣,我們可以帶f對應5進行檢驗,也許你會問我怎麼來這些點,這些可以確定函式的點從那裡來?其實很簡單,舉個例子,你要知道遊戲裡面錢的數字與封包裡面數字的聯絡怎麼辦,要確定這個對應關係,就要自己去找一些點來確定,我們可以通過一些方法來找到的,例如,我們扔掉一元錢,看看數字是多少,這裡就找到一點了,一個點如果確定不了,可以多取一些點來確定,如果還是不行,那麼再來,如果是不規則的影射,就要取遍所有點,當然象錢這樣的數字,由於可邊範圍太大,不可能建立想我們給的圖那樣的非規則影射,否則很難計算,影響遊戲速度,所以可以肯定:遊戲裡面錢的數字的加密一定是規則的運算加密的,至於是不是異或運算加密的就不知道了!但是我們可以假設是,然後做我們想做的事啊!
  
當然,異或運算的規則是自己建立的,可以有無窮多,要給大家講解所有的破解方法是不行的,大家是要多動手分析才行,這個需要的是經驗和技巧,你要從別人的角度想,“如果我要加密,我會怎麼做能做到計算簡單,加密性好,而且加密函式又容易設計”,想多了,你就知道其實異或運算加密是可以比較容易地分析出來的,當然,光靠我們的大腦是痛苦的,何不找一些工具來幫助分析呢?很多黑客軟體都具有分析加密資料的功能,試者學習一些,會對您的封包破解很有幫助的,也許他們能提供更好的破解思路也不一定!