本科類院校密碼學實踐課程教學研究論文 篇一
針對密碼學課程的現狀,以及出現此狀況的原因進行了深入的研究與分析后,在此基礎上,本文針對本校計算機科學與技術專業開設的密碼學課程進行了一系列的改革,取得了一定的成效。其改革的內容主要為:
1)密碼學的核心教學內容由密碼算法組成,對這些密碼學算法的理解和分析是課堂教學的重點。因此,為了實現使學生對各類算法本質的深入理解,要求學生用自己熟悉的高級程序設計語言編程實現經典密碼學算法,關鍵部分的程序代碼,可布置作業,讓學生編程實現。網絡上有很多經典密碼學算法的代碼資源,在講解算法的過程中,可以提醒學生注意對這些資源的理解和借鑒。
2)組織課題組或興趣小組,吸引更多的學生參加,最大化激發學生的興趣,并大力支持學生創新活動。選擇優秀本科生進入課題組,是研究型大學培養學生的一種重要方式。同時要求教師在授課過程中,將前沿技術問題適時加入到授課內容之中,鼓勵學生進行創新思維,并為其提供必要的經費、實驗環境,如建立創新實驗室、實訓大本營等。
3)結合課程內容,由學生參加制作密碼算法教學演示系統,并可延伸到畢業設計。在編寫完成密碼算法后,利用演示系統分步實現密碼算法的過程,使學生更深入、更細致地理解和掌握密碼算法的實質。
4總結
信息安全作為一門新興專業,信息安全類課程的基礎理論體系仍不完善,目前還沒有與密碼學相適應的課時適中,內容合理的標準化實驗教材。因此下一步工作意在開展標準化實驗教材的編寫工作,以配合理論教學。另外課程網絡資源的建設與更新,積極鼓勵學校與企業開展項目合作,加強與國內外的高校、研究機構的交流,也是值得努力的方向。
與英語 關的兩個密碼學小知識 篇二
首先說說字母概率。我們隨便找一個英語單詞,比如cat,將每個字母向后移動一位,cat變成dbu,將每個字母向后移動兩位,cat變成ecv,等等,這就是一種最原始、最簡單的加密方法,19世紀以前曾在歐洲廣泛使用。對于這種加密電文,我們只要知道英語字母的概率(probability),就可以很容易地破譯出來。什么是字母概率呢?您可以找一篇英文文章,仔細觀察一下,就會發現,字母e出現的次數最多,大多數單詞中都包含它,因而我們說字母e的概率最高,與此相反,字母q出現的次數最少,只有少數單詞中包含它,因而我們說字母q的概率最低。下面是英語字母的概率表,概率值由高到低排列。
e(57) a(43) r(39) i(38) o(37) t(35) n(34) s(29) l(28) c(23) u(19) d(17) p(16) m(15) h(15) g(13) b(11) f(9) y(9) w(7) k(6) v(5) x(1) z(1) j(1) q(1)
有了這個字母概率表,我們可以看看加密電文中,哪個字母出現的次數最多,假如h出現的次數最多,那我們可以斷定h就是e,原文的每個字母都向后移動了三位(e-f-g-h),我們只要將每個字母向前移動三位,即可看到明文。
下面再說說單詞概率。如果我們不采用上面這種字母移位的加密方法,而是用胡編亂造的單詞,代替真正的英語單詞,比如用tnqkv代替the,用hxdsj代替and,等等,這也是一種19世紀以前歐洲常用的加密方法。對于這種加密電文,我們必須知道英語單詞的概率,也就是在一般性的英語文章中,哪些單詞出現的次數最多。下面是英語常用單詞的概率表,概率值由高到低排列。
the – of – and – a – to – in – is – that – it – was – he – for – as – on – with – his – be – at – you – i – are – this – by – from – had – have – they – not – or – one
有了這個單詞概率表,我們可以看看加密電文中,哪個(胡編亂造的)單詞出現的次數最多,假如tnqkv出現的次數最多,那我們可以斷定tnqkv就是the。利用這種方法,可以將加密電文中最常用的冠詞、介詞、連詞、代詞、動詞等破譯出來,但破譯整篇加密電文還不可能,需要配合其它方法。
當然,這里介紹的只是最基礎的密碼學知識,現在已經很少有這樣簡單的加密電文了,但這些基礎知識,是我們掌握高級知識的基礎,所以我希望這個帖子能夠引起您的興趣。
離散數學的代數系統理論在密碼學中的應用論文 篇三
離散數學的代數系統理論在密碼學中的應用論文
【摘要】本文分析了離散數學中的代數系統理論與密碼學課程之間的關系,闡述了離散數學在密碼學領域的實際應用。
【關鍵詞】離散數學;密碼學;教學
一、引言
離散數學是計算機專業的基礎課,為計算機專業的后續課程提供專業的數學理論基礎。該課程可以全方位培養學生的抽象思維能力和解決實際問題的能力,為學生學習其它專業課程建立數學的思想。
該課程包括數理邏輯、集合論、代數系統、圖論四個大部分。每個部分與數據結構,數據庫,人工智能,數字邏輯,編譯原理等課程都密切相關。
本文我們將闡述離散數學中的代數系統理論部分與密碼學的相關性,并且分析該理論在密碼學領域的若干應用。
二、代數系統理論與密碼學的相關性及在密碼學的應用
離散數學中的代數系統理論包括代數系統的一些基本概念、半群與獨異點、群、環與域、格與布爾代數。代數系統與密碼學聯系非常緊密,為密碼學提供非常重要的數學基礎。現將代數系統理論在密碼學中的若干應用列舉如下:
密碼學中,凱撒密碼是一種最簡單且最廣為人知的加密技術,是一種簡單的基于替換原理的加密技術。凱撒密碼將明文中的所有字母都在字母表上向后(或向前)按照一個固定數目進行偏移后被替換成密文,其中固定數目的偏移量為加解密密鑰。例如當偏移量為3,字母A將被替換成D,B變成E,其它的字母按此規則類推。在代數系統理論中群是一種典型的代數系統,具有封閉性、可結合性、含單位元以及每個元素都有逆元等性質。從本質上來說凱撒密碼就是一個特殊的群,是建立在26個字母之上,字母與密鑰進行運算的剩余模群。通過對于群理論的學習可以幫助學生更好的理解凱撒密碼的本質。
在密碼學中有一個重要的公鑰加密算法的RSA,該算法是目前最安全的公鑰加密算法,可以抵抗目前已知的絕大多數密碼攻擊。數論中的費馬小定理為RSA提供數學上的安全性保證。通過對于費馬小定理的原理和正確性的理解可以更好的理解RSA算法的安全性,在實際中更好地使用RSA算法。
在密碼學中的橢圓曲線密碼是基于橢圓曲線的一種公鑰密碼算法,該密碼安全性基于橢圓曲線離散對數的困難性上,是一個有限域上橢圓曲線的`阿貝爾群。對于在代數系統理論中群和域的概念以及性質進行認真學習和理解可以用于橢圓曲線密碼的學習。
三、離散數學在計算機其他學科中的應用
離散數學在計算機研究中的作用越來越大,計算機科學中普遍采用離散數學中的一些基本概念、基本思想、基本方法,使得計算機科學越趨完善與成熟。離散數學在計算機科學和技術中有著廣泛應用,除了在上述提到的領域中發揮了重要作用外,在其他領域也有著重要的應用,如離散數學中的數理邏輯部分在計算機硬件設計中的應用尤為突出,數字邏輯作為計算機科學的一個重要理論,在很大程度上起源于離散數學的數理邏輯中的命題與邏輯演算。利用命題中各關聯詞的運算規律把由高低電平表示的各信號之間的運算與二進制數之間的運算聯系起來,使得我們可以用數學的方法來解決電路設計問題,使得整個設計過程變得更加直觀,更加系統化。集合論在計算機科學中也有廣泛的應用,它為數據結構和算法分析奠定了數學基礎,也為許多問題從算法角度如何加以解決提供了進行抽象和描述的一些重要方法,在軟件工程和數據庫中也會用到。代數結構是關于運算或計算規則的學問,在計算機科學中,代數方法被廣泛應用于許多分支學科,如可計算性與計算復雜性、形式語言與自動機、密碼學、網絡與通信理論、程序理論和形式語義學等,格與布爾代數理論成為電子計算機硬件設計和通訊系統設計中的重要工具,圖論對開關理論與邏輯設計、計算機制圖、操作系統、程序設計語言的編譯系統以及信息的組織與檢索起重要作用,其平面圖、樹的研究對集成電路的布線、網絡線路的鋪設、網絡信息流量的分析等的實用價值顯而易見。
四、結束語
通過上面的分析,我們可以發現離散數學中的代數系統理論在密碼學領域的作用非常重要,離散數學不僅是計算機技術迅猛發展的支撐學科,更是提高學生邏輯思維能力、創造性思維能力以及形式化表述能力的動力源,離散數學課程所傳授的思想和方法,廣泛地體現在計算機科學技術及相關專業的諸領域,從科學計算到信息處理,從理論計算機科學到計算機應用技術,從計算機軟件到計算機硬件,從人工智能到分布式系統,無不與離散數學密切相關。在現代計算機科學中,如果不了解離散數學的基本內容,則在計算機科學中就寸步難行了。
參考文獻
[1]任勛益。離散數學與計算機安全結合改進教學[J].軟件導刊,(12)
[2]劉宏月,張行進等。面向信息安全學科的離散數學教學探究[J].計算機教育,(15):23-26
[3]屈婉玲,耿素云等。離散數學[M].北京:高等教育出版社,
[4]丁寶康主編。數據庫原理[M].經濟科學出版社,
[5]馮登國,裴定一編著。密碼學導引[M].科學出版社,
[6]魏獻祝主編。高等代數[M].華東師范大學出版社,
[7]華東師范大學數學系編。概率論與數理統計教程[M].高等教育出版社,1983
本科類院校密碼學實踐課程教學研究論文 篇四
摘要:密碼學是信息科學類信息安全及其相關專業的一門十分重要的專業基礎課。該文以本科類院校的密碼學課程教學為背景,就密碼學課程在實踐教學中存在的若干問題,進行深入研究與分析,并提出了對應的解決方案,在提升學生的專業學習興趣和改善實踐類課程的教學效果方面,提供了一定的參考。
關鍵詞:密碼學;實踐課程;教學改革;演示系統
1引言
信息安全是近年來發展起來的一門新興學科,它與計算機科學與技術、通信工程、信息計算等學科相融,是一門綜合性要求較高的學科。密碼學不管是作為信息安全專業的專業基礎課程,還是計算機科學與技術專業的重要選修課程,都有著十分重要的學科地位。隨著計算機網絡的普及,密碼學的應用也日益廣泛,從研究領域擴展到了電子政務、電子商務等應用領域。因此,除需在本科院校的計算機、通信等相關專業開設密碼學的理論教學以外,開展其相應的實踐課程教學更是十分必要。
信息安全專業中密碼學課程的教學研究論文 篇五
信息安全專業中密碼學課程的教學研究論文
摘要:密碼學作為一門數學、計算機科學與通信的交叉學科,是信息安全專業的核心課程,也是數學在信息科學中的重要應用。該文從密碼學的特點出發,對密碼學課程目前所存在的問題進行分析,并從教材選擇、理論教學和實驗教學的角度給出自己的幾點建議。
關鍵詞:密碼學;信息安全;理論教學;實驗教學;教學方法
中圖分類號:G642.3文獻標識碼:A文章編號:1009-304426-0138-02
隨著計算機網絡的廣泛應用和深入發展,電子商務和電子政務以及網絡銀行和各種移動支付已經成為人們生活的一部分。在方便人們生活的同時,也帶來越來越多的信息安全問題。因此,信息安全受到社會各界的高度重視,已成為信息社會急需解決的問題。密碼技術作為信息安全的核心技術,獲得越來越多的關注。密碼學已成為各類高校信息安全專業的核心課程。目前,我國有80多所高校開設信息安全專業,100多所高校開設密碼學課程[1]。由于密碼學是一門集數學,計算機科學與通信科學等于一身的交叉學科,不同專業、不同學科,在教材的選擇、教學內容以及教學方法等諸多方面的認識很難統一,給密碼學課程的教學造成諸多困難,同時也是密碼學課程教學中值得關注和探討的問題。
1密碼學課程的特點
1)密碼學所涉及的知識面廣,數學基礎要求高。密碼學課程前期需要學習信息論、計算復雜度和一些數學知識[2]。其中數學除高等數學和線性代數以外,還包括數論、抽象代數、代數編碼、概率論、有限域等相關內容,這些數學知識的難度也相對較大。
2)理論教學和實驗教學的側重點難以把握。由于密碼學是一門交叉學科,對于不同專業的學生,學習的側重點也是不一樣的。例如數學科學學院應用數學專業的學生,大多數側重理論教學,主要講授密碼算法的理論計算,對數學基礎要求比較高。而對于計算機學院信息安全專業的學生,又是以實驗教學為主,對編程語言和計算復雜度要求較高。
3)密碼學課程本身所涉及的內容較多,學習難度大。密碼學的主要內容包括古典密碼、對稱密碼、公鑰密碼、哈希函數、數字簽名、密鑰管理、密碼協議等。古典密碼與對稱密碼要求學生對置換、代換、有限域方面要深入理解與掌握;公鑰密碼、數字簽名對數論、概率論方面要求又比較高。對于其他的內容,主要是一些密碼應用等,則要求靈活使用公鑰密碼、數字簽名、哈希函數等。
4)密碼學知識更新速度快。自從1978年麻省理工學院的Rivest、Shamir和Adleman三人提出RSA公鑰密碼算法以來,密碼學家又提出Rabin、Elgamal、ECC、NTRU等經典的公鑰密碼體制。近年來,由于其他學科的進步與發展,又出現一些新的密碼技術,如量子密碼、混沌密碼、DNA密碼等。
2密碼學課程所存在的問題以及解決方法
2.1教材選擇
密碼學教材種類繁多,而作者編寫教材的側重點也不相同,有的側重于密碼算法的介紹,有的側重于密碼技術的應用。不同學科專業學生的基礎不同,在選擇教材方面也有所差異,并且前置基礎課程與培養目標也存在差異,所以選擇教材的時候要充分考慮前置課程的安排和培養目標的設置。對于理科專業,如數學專業,應該選用理論性較強的教材,而對于工科專業,如通信專業,信息安全專業,應該選擇實踐性較強的教材。
2.2理論教學
目前大多數高校的密碼學教學是以理論講授為主,配合多媒體演示。理論教學是密碼教學的主要手段。而密碼學是一門交叉性很強的學科,課程所涉及的內容很多,各個知識點之間既相互獨立又聯系緊密。面對信息安全專業密碼學課程這些特點,如何轉變教學理念、創新教學思路、找準教學放方法,是密碼學課程理論教學關鍵。
2.2.1教學理念
密碼學課程內容多,算法的邏輯推理性強,學生難以掌握所有的算法。密碼學課程的教學理念不應該是讓學生記住密碼算法,而是培養學生正確的密碼學思維方式,使學生理解密碼學的設計思想。如:分組密碼算法的設計思路是使用置換密碼與代換密碼的組合,利用迭代的方式產生,在設計的過程中要滿足混淆與擴散原則;公鑰密碼體制的設計則是按照形式化的定義、精確的安全假設與嚴格的安全性證明三個原則來設計。為實現這個教學目標,需要在各章節詳細介紹少量經典的密碼算法,使學生了解每一步算法的來龍去脈與密碼學家設計密碼算法的思路,這就要求老師對密碼學所涉及的內容融會貫通,并且深刻理解密碼學的設計思路與精髓。
2.2.2教學思路
對于主流的密碼學教材,主要內容一般包括古典密碼、對稱密碼、公鑰密碼、哈希函數、數字簽名、密鑰管理、密碼協議等[3]。這些內容表面上看起來是松散的,實際上是緊密相連的要使學生能夠清晰地理解并掌握這些內容,首先要有明確的教學思路。密碼技術是信息安全的核心技術,能夠實現消息的保密性、完整性、認證性、不可否認性等安全屬性,這些安全屬性是整個密碼學知識體系發展的出發點和歸宿。可以按照這個思路建立密碼學知識結構的基本框架模型,然后進行講授。
2.2.3教學方法
傳統的教學方式是老師在講臺上講,學生在下面聽、記筆記。這種方式只能讓學生記住所講授的密碼算法,而無法使學生理解密碼學的思想。對于不同的教學內容應該采用不同的教學方法,如互動啟發式、小組討論式等方法,這些方法可以讓學生主動參與到教學活動中[4]。還要留給學生充分的思考空間和時間,讓學生在思考的過程中形成主動探索、分析問題和尋求解決問題方法的習慣。
1)互動啟發式教學。互動教學方法是大多數課程所討論并采用的教學方法,可以讓學生參與到問題的解決過程中。孔子曰:不憤不啟,不悱不發,強調的就是學習的啟發式教學。啟發式教學的’關鍵是調動學生的學習積極性,激發學生的學習興趣。很好地運用互動啟發式教學方法,可以培養學生分析問題、解決問題的能力,通過經歷問題的解決過程,激發學生的自主學習熱情,提高學習興趣。例如,在講授序列密碼時,講到序列密碼的安全性是由種子密鑰所產生密鑰序列的性質決定的,可以通過互動啟發式方法,讓學生思考:密鑰序列具有何種性質才能保證安全性?是否滿足隨機性和不可預測性就安全了?密鑰序列和種子密鑰之間有什么關系?通過解決問題,使學生理解序列密碼的設計思想。
2)小組討論式教學。小組討論式教學方法可以開拓學生的思維,提高學生的創新能力,使學生嘗試從不同的角度與觀點來解決問題,而且還可以培養團隊合作能力。密碼學對學生而言是陌生的,而密碼思想更是學生所欠缺的。通過小組討論,能夠使學生從自身角度思考密碼算法滿足安全性的條件,以及明文、密文與密鑰之間的關系,密文統計特性應滿足的概率分布等問題。通過小組討論并不一定能達到完全解決問題的目的,但是這種方法極大的開拓學生的思維,提高學生的創新能力,并且可以使學生深刻理解密碼學的設計思想。
2.3實驗教學
密碼技術是解決信息安全問題的核心技術,密碼學的特點決定它是一門實踐性很強的課程。實驗教學環節能夠使學生在理解算法原理的基礎上進行程序設計,并根據需要進一步進行綜合設計,提高學生的綜合應用能力。目前,在密碼學課程的實驗教學方面,還存在密碼實驗工具選擇不合理與密碼實驗項目類型不明確的問題。
1)密碼實驗工具的選擇。密碼實驗工具一般包括密碼分析軟件、密碼實驗教學軟件、密碼設計軟件、密碼算法的代碼庫等。在密碼實驗教學之前要確定密碼實驗的工具。當前,密碼學的實驗教學中大都要求學生運用計算機語言實現一些經典的密碼算法,而密碼學實驗教學的目的是加強學生對密碼算法的理解,以及掌握密碼算法在信息安全中的應用,不是簡單地鍛煉學生的編程能力,這種做法很難提高學生的綜合素質。密碼學課程的實驗教學應根據實驗要求選擇密碼實驗工具,才能體現密碼學實驗教學的目標。比如對于古典密碼算法,這些密碼算法已經被破譯,對于學生來說只起到一個借鑒的作用,因此可以選擇具有驗證和分析作用的密碼工具。CAP4軟件就是一款合適的密碼分析軟件。對于DES,AES等對稱密碼算法,其加密流程比較復雜,學生難以理解。這時可以選擇具有可視化功能的密碼工具,CrypTool的可視化演示功能能夠使學生更好的理解加解密運算的每一個流程。對于算法設計,不能只把實驗項目給學生之后,讓學生去編寫代碼。應該引導學生使用密碼算法庫,例如OpenSSL、Miracl、Boten,NTL等[5]。
2)密碼實驗項目與類型的確定。實驗項目類型一般分為演示或驗證型、設計或綜合型、研究或創新型三個層次。合理安排實驗項目類型可以加深對密碼算法的理解以及提高創新能力。目前,多數高校的密碼學實驗項目類型都是簡單的驗證,老師在教師機演示,學生在學生機重新驗證一遍。或者項目類型都是設計型,老師把實驗項目發給學生,讓學生自己編程。這兩種簡單的方式都不能很好地提高學生的綜合能力。因此,密碼學的實驗類型要由實驗項目來確定。安排密碼實驗項目時,應該由淺入深,首先安排簡單的驗證項目,比如古典密碼算法,其次安排綜合型項目,如RSA的實現等,最后安排研究型項目。研究型項目由老師確定一個具有新穎性和創新性的實驗項目范圍,由學生根據興趣自主選題。研究型項目選題可以依托學科競賽來確定,比如全國大學生信息安全競賽等。
3結束語
密碼技術是信息安全的核心技術,密碼學也是信息安全專業的核心課程,研究密碼學課程的理論與實驗教學有著重要的意義。在信息安全專業密碼學理論與實驗課程,以及密碼學前置課程的多年教學實踐的基礎上,結合信息安全競賽的一些經驗,針對信息安全專業密碼學教學在教材選擇、教學理論和實驗教學方面存在的問題,從教學理念、教學思路和教學方法三個方面給出教學改進方案,教學實踐表明這些改進方案能夠取得更好教學效果。
參考文獻:
[1] 王后珍,張煥國。 密碼學課程建設及教學方法探討[J]. 高教學刊,(7):79-79.
[2] 丁勇。 信息與計算科學專業密碼學教學研究[J].桂林電子科技大學學報,,28(2):131-133.
[3] 李夢東。 《密碼學》課程設置與教學方法探究[J].北京電子科技學院學報,,15(3):61-66.
[4] 賈偉峰,楊禮波。 密碼學的課程特點及教學方法探討[J]. 華北水利水電學報:社科版,,26(3):169-170.
[5] 申麗君,王金雙,陳融,等。CrypTool在密碼學教學中的應用[J]. 計算機工程與科學,,36(A1):208-211.
本科類院校密碼學實踐課程教學研究論文 篇六
由于密碼學課程的教學內容重點是對各種流行的密碼算法進行介紹,因此,在教學中,理論上的知識安排較多。由于課程本身內容的綜合性,僅僅靠結合課堂的理論教學內容,學生難將理論知識與實際應用進行連接。主要面臨的困難有:
1)不知如何用所學理論知識來解決實際問題,并且遇到實際問題時,沒有好的解決方案,缺乏指導。
2)受到硬件、軟件、環境等因素的制約。
3)對純理論知識的學習缺乏興趣。
通過針對密碼學教學情況的調查研究,發現學生在學習密碼學課程時的積極性普遍不高,對純理論教學,或者少量的實踐教學模式多數持有異議。
分析其現象的主要原因有以下幾個方面:
1)教學方式多樣性不夠。主要是課堂教學講授,以多媒體演示或者板書為主。而密碼學是一門實踐性非常強的課程,要對其內容真正理解需要結合實際的應用才行,以往的教學模式無法實現這一點,因此無法得到學生的認同。
2)實踐課程安排不合理。在密碼學課程的`安排上,有實踐課程的安排,也注意了理論課程和實踐課程的分配,但是對實踐課程的實驗安排存在不合理現象。比如對密碼算法的選擇不合理,除了某些經典算法外,不能適時的安排一些新型的密碼算法,內容上無法與時俱進。
3)實驗設置的難易程度不合理。在實驗課程的安排中,在實驗內容的設置上,實現難度較大,在有限的實驗時間里,學生無法輕松地,甚至無法完成相應的實驗,從而使學生對實驗失去信心,繼而不愿參與到實驗中。
密碼學CrackMe之RSA512算法CM分析 篇七
【文章標題】: ‘RSACrackMe512分析過程及匯編注冊機源碼
【文章作者】: coolstar14
【使用工具】: IDA, BigInterCalc, RDLP
【軟件名稱】: RSACrackMe512
【軟件大小】: 40KB
【下載地址】: attachmentid=7447&d=1187671766
【軟件介紹】: 用RSA512作為校驗算法的CrackMe,
【作者聲明】: 只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教!
——————————————————————————–
詳細過程:
IDA反匯編, 字符串參考, 直接定位到關鍵代碼:
.text:00402F18
.text:00402F18 loc_402F18:????????????????????????????; CODE XREF: DialogFunc+140j
.text:00402F18????????????????lea????eax, [ebp+dst_buffer]
.text:00402F1E????????????????lea????ecx, [ebp+rsa_n]
.text:00402F24????????????????push???eax????????????; dst_buffer
.text:00402F25????????????????push???ecx????????????; rsa_n
.text:00402F26????????????????lea????edx, [ebp+input_sn]
.text:00402F2C????????????????push???offset s_10001?; “10001”
.text:00402F31????????????????push???edx????????????; input_sn
.text:00402F32????????????????mov????[ebp+var_4], 0
.text:00402F39????????????????call???sub_402BC0?????;關鍵函數, 跟進
.text:00402F39
.text:00402F3E????????????????test???eax, eax
.text:00402F40????????????????jnz????short loc_402F68???; eax不等于0, 跳轉到后續判斷, 否則就提示失敗
.text:00402F40
.text:00402F42????????????????push???40h????????????; uType
.text:00402F44????????????????push???offset Caption?; “注冊提示”
.text:00402F44
.text:00402F49
.text:00402F49 loc_402F49:????????????????????????????; CODE XREF: DialogFunc+1D8j?;注冊提示
.text:00402F49????????????????push???offset s_VSIAGm ; “注冊碼錯誤,繼續加油!”
….
.text:00402F64????????????????mov????esp, ebp
.text:00402F66????????????????pop????ebp
.text:00402F67????????????????retn
.text:00402F67
.text:00402F68 ; —————————————————————————
.text:00402F68
.text:00402F68 loc_402F68:????????????????????????????; CODE XREF: DialogFunc+190j
.text:00402F68????????????????lea????eax, [ebp+dst_buffer]
.text:00402F6E????????????????lea????ecx, [ebp+String2]
.text:00402F74????????????????push???eax????????????; lpString1
.text:00402F75????????????????push???ecx????????????; lpString2
.text:00402F76????????????????call???sub_402CE0?????;比較函數, 可以通過內存查看, eax, ecx分別為解密sn后獲得的緩沖區和我們輸入的用戶名
.text:00402F76
.text:00402F7B????????????????add????esp, 8
.text:00402F7E????????????????cmp????eax, 1
.text:00402F81????????????????push???40h????????????; uType
.text:00402F83????????????????push???offset Caption?; “注冊提示”
.text:00402F88????????????????jnz????short loc_402F49???;前面比較函數返回值 eax不等于1跳轉到失敗, 否則注冊成功。
.text:00402F88
.text:00402F8A????????????????push???offset s_ZUgmVSI ; “恭喜你,注冊碼正確!”
.text:00402F8F????????????????push???esi????????????; hWnd
.text:00402F90????????????????call???ds:MessageBoxA
.text:00402F96????????????????xor????eax, eax
函數 402F39, 參數4個, 通過查看內存可以確定, 有一個為我們輸入的序列號, 一個為10001的字符串, 它是RSA公鑰對中最常用的e , 還有一個長度為128的字符串, 這個很容易就可以懷疑它是RSA公鑰對中的n. 另外一個會在下面的比較函數中用它, 它就是結果輸出緩沖區了。
函數:sub_402BC0
.text:00402BC0 ; Attributes: bp-based frame
.text:00402BC0
.text:00402BC0 ; int __stdcall sub_402BC0(int input_sn,int rsa_e_10001,int rsa_n,LPSTR dst_buffer)
.text:00402BC0 sub_402BC0?????proc near??????????????; CODE XREF: DialogFunc+189p
.text:00402BC0
.text:00402BC0 String2????????= byte ptr -2088h
.text:00402BC0 var_88?????????= dword ptr -88h
.text:00402BC0 var_big_e??????= dword ptr -64h
.text:00402BC0 var_big_n??????= dword ptr -44h
.text:00402BC0 var_big_sn?????= dword ptr -20h
.text:00402BC0 var_10?????????= dword ptr -10h
.text:00402BC0 var_C??????????= dword ptr -0Ch
.text:00402BC0 var_4??????????= dword ptr -4
.text:00402BC0 input_sn???????= dword ptr?8
.text:00402BC0 rsa_e_10001????= dword ptr?0Ch
.text:00402BC0 rsa_n??????????= dword ptr?10h
.text:00402BC0 dst_buffer?????= dword ptr?14h
.text:00402BC0
.text:00402BC0????????????????push???ebp
.text:00402BC1????????????????mov????ebp, esp
.text:00402BC3????????????????push???0FFFFFFFFh
.text:00402BC5????????????????push???offset loc_406973
.text:00402BCA????????????????mov????eax, large fs:0
.text:00402BD0????????????????push???eax
.text:00402BD1????????????????mov????large fs:0, esp
.text:00402BD8????????????????push???ecx
.text:00402BD9????????????????mov????eax, 2078h
.text:00402BDE????????????????call???sub_4034A0
.text:00402BDE
.text:00402BE3????????????????push???ebx
.text:00402BE4????????????????push???esi
.text:00402BE5????????????????push???edi
.text:00402BE6????????????????lea????ecx, [ebp+var_88]
.text:00402BEC????????????????mov????[ebp+var_10], esp
.text:00402BEF????????????????call???sub_402900
.text:00402BEF
.text:00402BF4????????????????xor????ebx, ebx
.text:00402BF6????????????????lea????ecx, [ebp+var_big_sn]
.text:00402BF9????????????????mov????[ebp+var_4], ebx
.text:00402BFC????????????????call???sub_401060
.text:00402BFC
.text:00402C01????????????????mov????eax, [ebp+rsa_e_10001]
.text:00402C04????????????????lea????ecx, [ebp+var_big_e]
.text:00402C07????????????????push???eax
.text:00402C08????????????????mov????byte ptr [ebp+var_4], 2
.text:00402C0C????????????????call???sub_4028F0???????; 大數轉換, 只有一個參數為大數的字符串表示。 之前有幾個函數調用, 像是初始化之類的東西, 具體沒弄明白。
.text:00402C0C
.text:00402C11????????????????mov????ecx, [ebp+rsa_n]
.text:00402C14????????????????push???ecx
.text:00402C15????????????????lea????ecx, [ebp+var_big_n]
.text:00402C18????????????????call???sub_4028F0
.text:00402C18
.text:00402C1D????????????????mov????edx, [ebp+input_sn]
.text:00402C20????????????????lea????ecx, [ebp+var_big_sn]
.text:00402C23????????????????push???edx
.text:00402C24????????????????call???sub_4028F0
.text:00402C24
.text:00402C29????????????????mov????ecx, 800h
.text:00402C2E????????????????xor????eax, eax
.text:00402C30????????????????lea????edi, [ebp+String2]
.text:00402C36????????????????rep stosd
.text:00402C38????????????????lea????eax, [ebp+var_big_sn]
.text:00402C3B????????????????lea????ecx, [ebp+String2]
.text:00402C41????????????????push???eax
.text:00402C42????????????????push???2000h
.text:00402C47????????????????push???ecx
.text:00402C48????????????????lea????ecx, [ebp+var_88]
.text:00402C4E????????????????call???sub_402A40???????;大數轉換完, 下一步自然是計算, 這個函數很麻煩, 需要跟進, 驗證序列號有一部分在這里面。
.text:00402C4E
.text:00402C53????????????????mov????eax, [ebp+dst_buffer]
.text:00402C56????????????????lea????edx, [ebp+String2]
.text:00402C5C????????????????push???edx????????????; lpString2
.text:00402C5D????????????????push???eax????????????; lpString1
.text:00402C5E????????????????call???ds:lstrcpyA???????;將結果復制到目的緩沖區, 可以由這兒中斷, 然后直接修改內存使eax指向內在為我們輸入的用戶名, 繼續后可以看到, 會提示注冊成功, 所以后面調用的函數我們就可以不用關心了。
.text:00402C64????????????????lea????ecx, [ebp+var_big_sn]
……………
.text:00402C96
.text:00402C96 sub_402BC0?????endp
IDA有個很實用的功能, 它可以讓你修改參數名字, 它會在整個函數體里統一替換, 在自己確定了某個參數和變量的含義后可以修改它為好記的名字, 方便之后的閱讀和理解。 上面的函數的參數為我跟蹤替換后的樣子,比最初版本肯定是要好些的。
回到分析上, 在大數的處理上, 不清楚這個CM用的什么大數庫或者為自己寫的吧。 上面瓢的大數的參數, 比如說var_big_e, 是個內存地址, 其+4后的地址指向malloc出來存放轉換出來大數的地址。
函數:sub_402A40 其中
.text:00402A78
.text:00402A7D????????????????lea????edi, [esi+44h]
.text:00402A80????????????????add????esi, 24h
.text:00402A83????????????????push???edi????????????; big_n
.text:00402A84????????????????push???esi????????????; big_e_10001
.text:00402A85????????????????lea????ecx, [esp+38h+var_AfterDeBuff]
.text:00402A89????????????????push???ebx????????????; big_sn
.text:00402A8A????????????????push???ecx????????????; out is powmod=sn^10001 (mod n)
.text:00402A8B????????????????call???sub_402670
通過查看 402670 調用前后各參數地址的變化, 發現只有ecx指向的緩沖區有變化, 使用 BigIntCalc代入各參數計算, 發現ecx的結果恰巧是powmod操作。 由此可以確定第一步, 這個cm是把序列號轉為大數, 用公鑰解密了的。 那么沒有私鑰好像是不能繼續下去了, 分解512 好像很花時間, 我們采用替換公鑰對n的方法繼續下面的分析, IDA 查看字符串參數, 找到公鑰串所在偏移 4080e0, 相對文件偏移80e0(ida可以在狀態欄看到的), Ultraedit打開exe, 直接定位并使用我們自己產生的公鑰對中的n替換它。 這樣我們就可得到一個知道私鑰的修改版本。
重新截入修改后的版本, 在402a8b下斷, 使用私鑰加密我們輸入的用戶名, 加密后的結果做為序列號輸入, 點擊注冊, 斷下, 單步運行一下, 可以看到ecx指向的大數, 加密前的用戶名的逆序。 ecx為指針, 它指向的大數實際地址為其地址+4, 然后再做為地址, 如:
0012d508 14 71 40 00 70 05 8f 00 則其指向的大數實際為8f0570, 查看這個地址, 可以看到調用402670前為我們輸入的序列號, 調用后變為了我們輸入的用戶名的逆序。 本來以為這樣應該算是注冊了, 結果運行仍然彈出注冊失敗。 看來并不是簡單的用戶名私鑰加密形成序列號。 繼續。
mov????eax, [esp+30h+arg_2000]
lea????edx, [esp+30h+var_AfterDeBuff]
push???2
push???edx????????????; addr after powmod
push???eax
push???ecx????????????; addr String2
call???sub_402B10
402b10, 它有個參數為我們期望的外層比較函數將要使用的地址, 跟進它。
402b10 調用 4024a0, 這個函數對解密后的數據做了進一步的判斷, 如果不符合要求, 就返回一個 負數, 解密出來的內容并不會復制到我們期望的String2的地址中, 這個函數我沒分析出來, 后來在密碼學CM主帖中看到一個RSA1024有效的注冊碼, RSA1024那個CM與512這個反匯編后除了公鑰n長度不一致外其它倒是一樣。 所以看到powmod后的地址的結果, 從而猜測出解密后數據應該的內容繼而得出4024a0函數各參數的意義和作用。
4024a0, 它判斷了解密后數據的長度, 然后符合長度限制的它復制了指定偏移指定位的數據到目的地址。 其4個參數分別為:
源地址, 目的地址, 偏移位置, 復制字節數。
402b10 3次調用4024a0, 分別做了如下操作, 1復制并檢查powmod解密后數據倒數第二個字節為2, 2復制獲得powmod解密后數據倒數3,4字節做為有效數據長度xlen, 3以第二步取到長度復制偏移0長度xlen的數據到目的緩沖區。
最后, 可以看到sn產生的辦法, 取這樣一個串, user 256-4-ulen的任意字符 兩字節ulen 02 任意結尾。 最后將這個串逆序 得到 加密前原文, 該串以私鑰加密即得到序列號。 因為填充字符的存在, 所以相同用戶名是可以有很多匹配的序列號的。
結束:
驗證用工具使用了 readyu 大俠提供的, RDLP, BigInterCalc.
下載位置:
bbs1t=47934&highlight=RDLP
bbs1t=49005&highlight=RDLP
附一組修改公鑰n后驗證成功的注冊碼
替換的公鑰n:
C1E8FDD98735103BCCEC2032A319FB8ADB1E79D5663486116CF54EE96CE3CB8988974330DEBB3639DC41C0FC0680F0549D94E90410D1B01A58E9D0F265008FD9
加密用私鑰d:
41A1C0B9EDBF921D0B81286CBB33C225FF8053305D858D933C53D33FC2B15F6437E7D80333B01EE6DF23D3BF378F6FAAF366BC5398CF9E74B4E6836174894A59
加密前源串:
01020a00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFeeFFFFFFFFFFFFFFFFFF00636F6F6C737461723134
用戶名:coolstar14
序列號:5BC6E01B6C7D34455FDB584A6B5352187CF9ECCB29FD28E4FFFF3FB33D4A6B27191285FFB23451FA9DDA95EA44909D2B9D54BBC77841F668CD9F6F3BC
本文由用戶糖娃娃分享,如有侵權請聯系。如若轉載,請注明出處:http://m.qingqu1.cn/25702.html