安全測試反編譯工具的原理
⑴ 如何對網站進行滲透測試和漏洞掃描
1、滲透測試 (penetration test)並沒有一個標準的定義,國外一些安全組織達成共識的通用說法是:滲透測試是通過模擬惡意黑客的攻擊方法,來評估計算機網路系統安全的一種評估方法。這個過程包括對系統的任何弱點、技術缺陷或漏洞的主動分析,這個分析是從一個攻擊者可能存在的位置來進行的,並且從這個位置有條件主動利用安全漏洞。
2、滲透測試能夠通過識別安全問題來幫助一個單位理解當前的安全狀況。這使促使許多單位開發操作規劃來減少攻擊或誤用的威脅。
3、滲透測試有時是作為外部審查的一部分而進行的。這種測試需要探查系統,以發現操作系統和任何網路服務,並檢查這些網路服務有無漏洞。你可以用漏洞掃描器完成這些任務,但往往專業人士用的是不同的工具,而且他們比較熟悉這類替代性工具。
4、滲透測試的作用一方面在於,解釋所用工具在探查過程中所得到的結果。只要手頭有漏洞掃描器,誰都可以利用這種工具探查防火牆或者是網路的某些部分。但很少有人能全面地了解漏洞掃描器得到的結果,更別提另外進行測試,並證實漏洞掃描器所得報告的准確性了。
5、漏洞掃描是指基於漏洞資料庫,通過掃描等手段對指定的遠程或者本地計算機系統的安全脆弱性進行檢測,發現可利用漏洞的一種安全檢測(滲透攻擊)行為。
6、漏洞掃描技術是一類重要的網路安全技術。它和防火牆、入侵檢測系統互相配合,能夠有效提高網路的安全性。通過對網路的掃描,網路管理員能了解網路的安全設置和運行的應用服務,及時發現安全漏洞,客觀評估網路風險等級。網路管理員能根據掃描的結果更正網路安全漏洞和系統中的錯誤設置,在黑客攻擊前進行防範。如果說防火牆和網路監視系統是被動的防禦手段,那麼安全掃描就是一種主動的防範措施,能有效避免黑客攻擊行為,做到防患於未然。
7、網路安全事故後可以通過網路漏洞掃描/網路評估系統分析確定網路被攻擊的漏洞所在,幫助彌補漏洞,盡可能多得提供資料方便調查攻擊的來源。
8、互聯網的安全主要分為網路運行安全和信息安全兩部分。網路運行的安全主要包括以ChinaNet、ChinaGBN、CNCnet等10大計算機信息系統的運行安全和其它專網的運行安全;信息安全包括接入Internet的計算機、伺服器、工作站等用來進行採集、加工、存儲、傳輸、檢索處理的人機系統的安全。網路漏洞掃描/網路評估系統能夠積極的配合公安、保密部門組織的安全性檢查。
⑵ 如何更改安卓安裝包的內置文件
工具:安卓修改大師、一個你要修改的app安裝包(這里以貪吃蛇大作戰為例)。
1、選取一個要進行反編譯的游戲或應用:點擊安卓修改大師頂部的安卓游戲選項卡,打開的頁面中找到任何一款想修改的游戲,例如,本示例將要修改的游戲為「貪吃蛇大作戰」。
更改安卓安裝包的內置文件需要反編譯已經打包的APK安裝包,此方法推薦使用「安卓修改大師」,可以在沒有源代碼的情況下,直接反編譯安裝包,通過修改代碼實現添加和去除部分功能,也可以修改應用圖標和應用程序名稱。
⑶ 常見軟體的加殼技術有哪些呀
加殼的全稱應該是可執行程序資源壓縮,是保護文件的常用手段.
加殼過的程序可以直接運行,但是不能查看源代碼.要經過脫殼才可以查看源代碼.
加「殼」其實是利用特殊的演算法,對EXE、DLL文件里的資源進行壓縮。類似WINZIP 的效果,只不過這個壓縮之後的文件,可以獨立運行,解壓過程完全隱蔽,都在內存中完成。解壓原理,是加殼工具在文件頭里加了一段指令,告訴CPU,怎麼才能解壓自己。加「殼」雖然增加了CPU附帶但是減少了硬碟讀寫時間,實際應用時加「殼」以後程序運行速度更快(當然有的加「殼」以後會變慢,那是選擇的加「殼」工具問題)。
一般軟體都加「殼」這樣不但可以保護自己的軟體不被破解、修改還可以增加運行時啟動速度。
加「殼」不等於木馬,我們平時的巨大多數軟體都加了自己的專用「殼」。
RAR和ZIP都是壓縮軟體不是加「殼」工具,他們解壓時是需要進行磁碟讀寫,「殼」的解壓縮是直接在內存中進行的,用RAR或者ZIP壓縮一個病毒你試試解壓縮時殺毒軟體肯定會發現,而用加「殼」手段封裝老木馬,能發現的殺毒軟體就剩不下幾個。
因為加殼了之後等於把這個文件進行了保護(就是有些殺毒軟體殺不了的原因)
因為文件不能重復加殼.判斷依據是文件是否已經加了保護
加殼其實主要就有兩個作用:
防止反編譯(破解軟體)和免殺
修改文件不一定要脫殼,看你的水平
些軟體加殼工具
1、軟體防盜版戰士
《軟體防盜版戰士》是一個以數字許可的形式為MicrosoftWindows下(PE格式)應用程序提供版權保護以及數字化銷售支持的純軟體產品。它含有認證版、序列號版這兩個可選版本。認證版以128位二進制證書文件作為被保護軟體的最終用戶使用許可,並且主要以最終用戶的硬碟、CPU、網卡及操作系統等特徵信息為版權保護的安全源(保守地說,理論上認證版的版權保護強度達到3-5年內不可破解)。
安全指標:1、對象安全強度——《軟體防盜版戰士》的各種對象安全都盡可能地加入了加密演算法中,其強度相當於對稱演算法的128位加密,比普通硬體狗的8位、16位、32位和64位(很少有64位的)安全強度強許多。2、入口安全強度——《軟體防盜版戰士》採用功能相關法解決入口安全問題。入口安全的最小復雜度大於40位的安全強度。《軟體防盜版戰士》的入口安全強度最大限定為128位(含128位)。
2、比泰軟體防盜版戰士2005J
比泰軟體防盜版戰士2005J(BS-APC),是比泰科技出品的一個軟體加密保護產品系列(含L版、A版、J版等產品線),它們為商業軟體提供可靠的防盜版保護並支持數字化發行。|它採用比泰公司世界領先的「執行代碼抽取加密」技術,軟硬體結合,以「認證技術」保證軟體「對象安全」、以「功能相關法」保證軟體「入口安全」、以具有唯一性的計算機(物理)特徵數據作為身份認證指紋,並以軟體用戶計算機本身的運算能力進行防盜版保護。具有64位以上,到128位的加密安全強度。安全強度遠勝傳統的外殼加密式加密狗、API內嵌式加密狗,軟體保護的功能范圍及運行效率超過智能狗,且無須學習加密狗編程,不引入附加硬體維護問題。|適合對C/MFC/VisualC++(VC++)/BorlandC++Builder(BCB)、Delphi/ObjectPascal、PowerBuilder(PB)、Authorware、Director等開發工具所編譯程序的保護。|因為它是對真實指令進行代碼抽取加密,因此暫不保護偽編譯程序,如VB、VFP、C#、java。
3、AntiCrackProtector
ACProtect是由國人研究開發並擁有自主知識產權的加密軟體精品,它有許多技術已經達到並超過了國外同類產品,是一個為Windows下的EXE/DLL/OCX/SCR等32位可運行文件加密系統。它通過為程序加上一層堅硬的保護殼,可以非常有效的防止盜版。還可以為程序設置限制注冊功能。
即使你沒有程序的原代碼,你也可以用ACProtect在程序上加上運行次數限制,運行天數限制,運行有效日期限制。通過公匙加密演算法(RSA)創建並校驗注冊KEY,只有在RSAKEY正確的情況下,才對那些受保護的代碼進行正常解碼。同時使用了內嵌式加密,可以有效的防止加密軟體從內存中被抓取,也就是無法被脫殼。
內置反調試引擎,有效的增加了破解的難度。
專用的API系統,可以使ACProtect和你的軟體緊密的接合在一起,這樣,你就可以通過使用ACProtect來創建你的全功能評估版。
4、XQBOX軟體保護安裝系統
XQBoxSoftwareProtecting是一個以數字許可的形式為應用程序提供版權保護以及數字化銷售支持的純軟體產品。它採用機器具有唯一性的數據做指紋,利用宿主計算機的運算能力進行防盜版保護。
XQBox保護系統是集軟體保護和安裝工具於一身的集成工具。XQBox核心代碼是遵守標准c的規則來編寫,它可以在,windows3.x/9x/2000/nt,unix,linux等各種操作系統下編譯運行。作為中間件,它可在c、c++、java、delphi、vc、vb、vf、Masm32、pb、php、Authorware等。各種工具開發的軟體中嵌入使用,它的兼容性非常好。核心代碼經全域均勻抽值測試,各種特值測試和可行的全域測試均通過。
5、秦贏甲胄反盜版加密軟體
這款反盜版軟體的用戶注冊方便,終端用戶不需要手動輸入序列號認證碼等等,一切由注冊端軟體自動完成;用戶機器的硬體信息作為注冊碼/加密密鑰;一個拷貝只能在同一台機器上注冊;只要是同一台機器,可以在這台機器上注冊多次;只能在注冊的那台機器上運行
使用理論上安全的密碼學協議和演算法,保證不可離線破解。不能通過注冊機破解;不能通過散發序列號破解。
更改檢測(可以檢測病毒和破解者更改);反跟蹤功能(Anti-Debug)。
運行時代碼完整性校驗,可防止Cracker跟蹤時設置斷點;可防止通過補丁程序破解。
反Dump功能(Anti-Dump);反反匯編功能(Anit-Disassembler);可以有效的管理經銷商和序列號的發放;可以統計軟體的銷售數量;可以有效的管理用戶注冊。
6、PE加密保護軟體EncryptPE
EncryptPE能加密保護常規PE文件(EXE、DLL、OCX等一般程序或NT服務程序),防靜態分析修改,反動態跟蹤調試,有效地保護軟體,防止盜版。除常規的對抗調試器(SoftIce、TRW、OllyDbg等)、監視器、DUMP工具方法外,EncryptPE採用的加密保護的手段還有:隨機加密演算法、CRC校驗、變形、代碼替換、進程注入、APIHOOK、多線程、調試運行、全程監控等。
能將普通軟體變成共享軟體,增加定時注冊提醒、限制試用日期、限制試用次數、限制試用天數、限制每次試用多長時間等功能。
能根據最終用戶的機器信息、注冊用戶及加密時的保護密碼計算注冊碼,從諸多加密演算法中隨機選擇一種用於注冊碼的計算。
支持多語言,並為待加密軟體提供多語言介面。
向待加密軟體提供豐富的方便的編程介面,便於設計個性注冊方式,同時使被加密程序與加密殼之間融為一個整體,增加破解難度。
可以運行於多種Windows平台,包括9X/ME/NT/2000/XP/2003。
7、注冊碼生成器
本軟體可以自動隨機生成2至32位注冊序列號及對應的注冊碼,並將這些注冊信息包含到一個動態聯接庫DLL文件中,這樣軟體開發者可以將這個DLL文件同應用程序一並發行,並在應用程序的相關模塊中調用這個DLL文件中提供的函數獲得注冊號及相對應的注冊碼,注冊號及相對應的注冊碼對軟體使用者來說是不透明的,它可以用效的避免軟體的盜版及其重復注冊,切實保護軟體開發者的版權。隨軟體一同提供免費的DLL源程序生成器工具,DLL注冊碼查詢工具,啟動應用程序時的注冊對話框示常式序及全部C++源代碼等。
8、計算機軟體防盜版
計算機軟體防盜版系統具有國際領先水平的保護知識產權的新技術。現該技術已順利完成了全部研製。利用嵌入式加密,動態激活解密,工具化設計特徵,檢測體系,產品形態技術。於1999年7月通過公安部計算機信息安全檢測中心的檢測。計算機軟體防盜版磁碟、光碟獲公安部頒發的計算機信息安全產品銷售許可證。
⑷ Android軟體安全與逆向分析的書名
本書由淺入深、循序漸進地講解了Android 系統的軟體安全、逆向分析與加密解密技術。包括Android軟體逆向分析和系統安全方面的必備知識及概念、如何靜態分析Android 軟體、如何動態調試Android 軟體、Android 軟體的破解與反破解技術的探討,以及對典型Android 病毒的全面剖析。
本書適合所有Android 應用開發者、Android 系統開發工程師、Android 系統安全工作者閱讀學習。 豐生強(網名非蟲)
Android軟體安全專家。看雪論壇Android安全版版主;安卓巴士開發交流版版主。
對Android軟體與系統安全有狂熱的愛好和獨到的見解,對Android系統的全部源代碼進行過深入地研究和分析。逆向分析實戰經驗豐富。
在國內信息安全雜志上發表過多篇有價值的軟體安全文章,目前就職於國內某Android開發企業,常年混跡於看雪論壇(ID非蟲)。
作者郵箱:[email protected]
願與國內安全愛好者共同交流與探討安全技術。 第1章 Android程序分析環境搭建11.1 Windows分析環境搭建11.1.1 安裝JDK11.1.2 安裝Android SDK31.1.3 安裝Android NDK51.1.4 Eclipse集成開發環境61.1.5 安裝CDT、ADT插件61.1.6 創建Android Virtual Device81.1.7 使用到的工具91.2 Linux分析環境搭建91.2.1 本書的Linux環境91.2.2 安裝JDK91.2.3 在Ubuntu上安裝Android SDK101.2.4 在Ubuntu上安裝Android NDK111.2.5 在Ubuntu上安裝Eclipse集成開發環境121.2.6 在Ubuntu上安裝CDT、ADT插件131.2.7 創建Android Virtual Device131.2.8 使用到的工具151.3 本章小結15第2章 如何分析Android程序162.1 編寫第一個Android程序162.1.1 使用Eclipse創建Android工程162.1.2 編譯生成APK文件192.2 破解第一個程序202.2.1 如何動手?202.2.2 反編譯APK文件202.2.3 分析APK文件212.2.4 修改Smali文件代碼262.2.5 重新編譯APK文件並簽名262.2.6 安裝測試272.3 本章小結28第3章 進入Android Dalvik虛擬機293.1 Dalvik虛擬機的特點——掌握Android程序的運行原理293.1.1 Dalvik虛擬機概述293.1.2 Dalvik虛擬機與Java虛擬機的區別293.1.3 Dalvik虛擬機是如何執行程序的343.1.4 關於Dalvik虛擬機JIT(即時編譯)363.2 Dalvik匯編語言基礎為分析Android程序做准備373.2.1 Dalvik指令格式373.2.2 DEX文件反匯編工具393.2.3 了解Dalvik寄存器403.2.4 兩種不同的寄存器表示方法——v命名法與p命名法423.2.5 Dalvik位元組碼的類型、方法與欄位表示方法433.3 Dalvik指令集443.3.1 指令特點453.3.2 空操作指令453.3.3 數據操作指令463.3.4 返回指令463.3.5 數據定義指令463.3.6 鎖指令473.3.7 實例操作指令473.3.8 數組操作指令483.3.9 異常指令483.3.10 跳轉指令483.3.11 比較指令493.3.12 欄位操作指令503.3.13 方法調用指令503.3.14 數據轉換指令513.3.15 數據運算指令513.4 Dalvik指令集練習——寫一個Dalvik版的Hello World523.4.1 編寫smali文件523.4.2 編譯smali文件543.4.3 測試運行543.5 本章小結55第4章 Android可執行文件564.1 Android程序的生成步驟564.2 Android程序的安裝流程594.3 dex文件格式664.3.1 dex文件中的數據結構664.3.2 dex文件整體結構684.3.3 dex文件結構分析714.4 odex文件格式804.4.1 如何生成odex文件804.4.2 odex文件整體結構814.4.3 odex文件結構分析834.5 dex文件的驗證與優化工具dexopt的工作過程884.6 Android應用程序另類破解方法914.7 本章小結93第5章 靜態分析Android程序945.1 什麼是靜態分析945.2 快速定位Android程序的關鍵代碼945.2.1 反編譯apk程序945.2.2 程序的主Activity955.2.3 需重點關注的Application類955.2.4 如何定位關鍵代碼——六種方法965.3 smali文件格式975.4 Android程序中的類1005.4.1 內部類1005.4.2 監聽器1025.4.3 註解類1055.4.4 自動生成的類1085.5 閱讀反編譯的smali代碼1105.5.1 循環語句1105.5.2 switch分支語句1155.5.3 try/catch語句1215.6 使用IDA Pro靜態分析Android程序1275.6.1 IDA Pro對Android的支持1275.6.2 如何操作1285.6.3 定位關鍵代碼——使用IDA Pro進行破解的實例1325.7 惡意軟體分析工具包——Androguard1355.7.1 Androguard的安裝與配置1355.7.2 Androguard的使用方法1375.7.3 使用Androguard配合Gephi進行靜態分析1445.7.4 使用androlyze.py進行靜態分析1485.8 其他靜態分析工具1525.9 閱讀反編譯的Java代碼1525.9.1 使用dex2jar生成jar文件1525.9.2 使用jd-gui查看jar文件的源碼1535.10 集成分析環境——santoku1545.11 本章小結156第6章 基於Android的ARM匯編語言基礎——逆向原生!1576.1 Android與ARM處理器1576.1.1 ARM處理器架構概述1576.1.2 ARM處理器家族1586.1.3 Android支持的處理器架構1596.2 原生程序與ARM匯編語言——逆向你的原生Hello ARM1606.2.1 原生程序逆向初步1606.2.2 原生程序的生成過程1626.2.3 必須了解的ARM知識1646.3 ARM匯編語言程序結構1666.3.1 完整的ARM匯編程序1666.3.2 處理器架構定義1676.3.3 段定義1686.3.4 注釋與標號1696.3.5 匯編器指令1696.3.6 子程序與參數傳遞1706.4 ARM處理器定址方式1706.4.1 立即定址1706.4.2 寄存器定址1716.4.3 寄存器移位定址1716.4.4 寄存器間接定址1716.4.5 基址定址1716.4.6 多寄存器定址1716.4.7 堆棧定址1726.4.8 塊拷貝定址1726.4.9 相對定址1726.5 ARM與Thumb指令集1736.5.1 指令格式1736.5.2 跳轉指令1746.5.3 存儲器訪問指令1756.5.4 數據處理指令1776.5.5 其他指令1846.6 用於多媒體編程與浮點計算的NEON與VFP指令集1856.7 本章小結186第7章 Android NDK程序逆向分析1877.1 Android中的原生程序1877.1.1 編寫一個例子程序1877.1.2 如何編譯原生程序1887.2 原生程序的啟動流程分析1947.2.1 原生程序的入口函數1947.2.2 main函數究竟何時被執行1987.3 原生文件格式1997.4 原生C程序逆向分析2007.4.1 原生程序的分析方法2007.4.2 for循環語句反匯編代碼的特點2047.4.3 if...else分支語句反匯編代碼的特點2087.4.4 while循環語句反匯編代碼的特點2117.4.5 switch分支語句反匯編代碼的特點2157.4.6 原生程序的編譯時優化2187.5 原生C++程序逆向分析2227.5.1 C++類的逆向2227.5.2 Android NDK對C++特性的支持2257.5.3 靜態鏈接STL與動態鏈接STL的代碼區別2277.6 Android NDK JNI API逆向分析2327.6.1 Android NDK提供了哪些函數2327.6.2 如何靜態分析Android NDK程序2337.7 本章小結235第8章 動態調試Android程序2368.1 Android動態調試支持2368.2 DDMS的使用2378.2.1 如何啟動DDMS2378.2.2 使用LogCat查看調試信息2388.3 定位關鍵代碼2408.3.1 代碼注入法——讓程序自己吐出注冊碼2408.3.2 棧跟蹤法2448.3.3 Method Profiling2478.4 使用AndBug調試Android程序2508.4.1 安裝AndBug2518.4.2 使用AndBug2518.5 使用IDA Pro調試Android原生程序2548.5.1 調試Android原生程序2558.5.2 調試Android原生動態鏈接庫2568.6 使用gdb調試Android原生程序2608.6.1 編譯gdb與gdbserver2608.6.2 如何調試2628.7 本章小結264第9章 Android軟體的破解技術2659.1 試用版軟體2659.1.1 試用版軟體的種類2659.1.2 實例破解——針對授權KEY方式的破解2659.2 序列號保護2719.3 網路驗證2729.3.1 網路驗證保護思路2729.3.2 實例破解——針對網路驗證方式的破解2739.4 In-app Billing(應用內付費)2779.4.1 In-app Billing原理2779.4.2 In-app Billing破解方法2809.5 Google Play License保護2819.5.1 Google Play License保護機制2819.5.2 實例破解——針對Google Play License方式的破解2839.6 重啟驗證2849.6.1 重啟驗證保護思路2859.6.2 實例破解——針對重啟驗證方式的破解2859.7 如何破解其他類型的Android程序2969.7.1 Mono for Android開發的程序及其破解方法2969.7.2 Qt for Android開發的程序及其破解方法3019.8 本章小結309第10章 Android程序的反破解技術31010.1 對抗反編譯31010.1.1 如何對抗反編譯工具31010.1.2 對抗dex2jar31110.2 對抗靜態分析31210.2.1 代碼混淆技術31210.2.2 NDK保護31510.2.3 外殼保護31610.3 對抗動態調試31610.3.1 檢測調試器31610.3.2 檢測模擬器31710.4 防止重編譯31810.4.1 檢查簽名31810.4.2 校驗保護31910.5 本章小結320第11章 Android系統攻擊與防範32111.1 Android系統安全概述32111.2 手機ROOT帶來的危害32111.2.1 為什麼要ROOT手機32111.2.2 手機ROOT後帶來的安全隱患32211.2.3 Android手機ROOT原理32211.3 Android許可權攻擊32911.3.1 Android許可權檢查機制32911.3.2 串謀許可權攻擊33311.3.3 許可權攻擊檢測33611.4 Android組件安全33911.4.1 Activity安全及Activity劫持演示34011.4.2 Broadcast Receiver 安全34311.4.3 Service安全34511.4.4 Content Provider安全34611.5 數據安全34711.5.1 外部存儲安全34711.5.2 內部存儲安全34811.5.3 數據通信安全35011.6 ROM安全35111.6.1 ROM的種類35211.6.2 ROM的定製過程35211.6.3 定製ROM的安全隱患35911.6.4 如何防範36011.7 本章小結361第12章 DroidKongFu變種病毒實例分析36212.1 DroidKongFu病毒介紹36212.2 配置病毒分析環境36312.3 病毒執行狀態分析36412.3.1 使用APIMonitor初步分析36512.3.2 使用DroidBox動態分析36912.3.3 其他動態分析工具37312.4 病毒代碼逆向分析37612.4.1 Java層啟動代碼分析37612.4.2 Native層啟動代碼分析38112.4.3 Native層病毒核心分析39312.5 DroidKongFu病毒框架總結40412.6 病毒防治40612.7 本章小結406
⑸ 如何檢測安卓APK的安全性和安全漏洞
由於Android系統的開源性,數握扮各類Android App經常被爆出漏洞,以及被反編譯、破解。有的Android開發者只是對App進行混淆代碼或是防二次打包,對於源碼的保護並不到位。同時也不清楚其中所隱藏的漏洞,這里給大家介紹一個Android App漏洞測試工皮運具。同時,經常需要用到的一個性能測試工具,在Android應用開發或測試過程中,對應用程序進行性能壓力測試,或者GUI功能測試,以找出程序中隱藏的問題。
1. 文件檢查
檢查dex、res文件是否存在源代碼、資源文件被竊取、替換等安全問題。
薯灶2. 漏洞掃描
掃描簽名、XML文件是否存在安全漏洞、存在被注入、嵌入代碼等風險。
3. 後門檢測
檢測App是否存在被二次打包,然後植入後門程序或第三方代碼等風險。
4. 一鍵生成
一鍵生成App關於源碼、文件、許可權、關鍵字等方面的安全風險分析報告。
自動化App安全檢測平台,只需一鍵上傳APK就可完成安全漏洞檢測,檢測結果清晰、詳細、全面,並可一鍵生成報告,極大的提高了開發者的開發效率,有效幫助開發者了解App安全狀況,提高App安全性。
愛加密的漏洞分析功能http://safe.ijiami.cn/集成了目前黑客最常用的各種破解方法與思路,模擬黑客攻擊行為進行分析。開發者只需上傳自己的應用,就可以自動分析出應用存在哪些可被利用的風險漏洞,清晰直觀,並且全網首家支持一鍵下載完整詳細的PDF格式分析報告,方便技術及公司管理人員對應用漏洞相關結果進行傳遞與研究,有針對性的進行安全防護,避免破解損失。
⑹ JAVA反編譯軟體
由於JAVA語言安全性高、代碼優化、跨平台等特性,從1995年5月由SUN公司發布後,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。
不過,JAVA最突出的跨平台優勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運行在虛擬機環境中,這使得JAVA的反編譯要比別的高級語言容易實現,並且反編譯的代碼經過優化後幾乎可以與源代碼相媲美。
為了更好地保護知識產權,避免本公司的智力成果輕易被人竊取,開發者有必要對反編譯工具深入了解,以便有針對性地採取保護措施。
目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:
一、 應用廣泛的JAD
在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI』s Java Class Viewer和國產的JAVA源代碼反編譯專家。
JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內核的基礎之上加了一個圖形界面而已。這么多種產品的共同選擇,足可證明JAD在JAVA反編譯領域中的尊貴地位。
JAD是使用Microsoft Visual C++開發的,運行速度非常快,可以處理很復雜的JAVA編譯文件。眾多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由於JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下(以JAD 1.5.8f版本為例):
-d
- 用於指定輸出文件的目錄
-s - 輸出文件擴展名(默認為: .jad),通常都會把輸出文件擴展名直接指定為.java,以方便修改的重新編譯。
-8 - 將Unicode字元轉換為ANSI字元串,如果輸出字元串是中文的話一定要加上這個參數才能正確顯示。
最常用的反編譯指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
這條指令將當前目錄下的javatest.class反編譯為javatest.java並保存在c:\javasource目錄里,其中的提示輸出為中文,而不是Unicode代碼。
二、 源碼開放的JODE
JODE是全球最大的開源項目網站Sourceforge.net的成員,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術等,更是出類拔粹。
JODE本身也是純JAVA開發的,最近越來越多的JAVA反編譯軟體也選擇JODE來做它們的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit』s JavaInsight plugin等。
JODE是一個可運行的JAR文件,在windows環境下雙擊即可運行。
需要特別說明的是,JODE不是通過常規的Open->File的方式來載入JAVA編譯後的類文件(*.class)或是類包(*.jar)的, 而是通過在Options菜單中的Set Classpath來實現的,單獨的類文件可以將它的上一級目錄作為Classpath輸入,然後再選擇Reload Classpath即可。
新加入的類包或是類的名字會在左側窗口出現,雙擊類包名可以展開目錄樹結構,雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯後的源代碼。
三、 獨樹一幟的DAVA
DAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優化工具Soot的一部分。Soot和JODE一樣是純JAVA開發的,也是一個獨立的JAR包,但卻不能通過雙擊直接運行,而是象JAD一樣在命令行狀態運行。
Soot對環境變數的配置要求非常嚴格,通常情況下要對CLASSPATH做如下設置:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下載的soot類包放置的路徑,CLASSPATH末尾的.;代表了當前目錄,如果不加上這個的話Soot經常會報一個找不到類的錯誤。
DAVA是作為Soot的一個參數使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最後的類名不用帶.class後綴,因為它默認是處理class文件,這個操作與前述的JAD的參數效果相同。
DAVA採取了流程優化的方式進行反編譯,與傳統反編譯思路不盡相同,但卻對改變流程類的加密方法有獨特的反編譯效果。
上述的三種工具各有千秋,但效果都非常不錯。經測試,它們基本上都可以把JDK自帶的一些常式完全反編譯,然後不加任何修改可再編譯成功,並能正常運行!
⑺ Android無線開發的幾種常用技術(阿里巴巴資深
完整的開發一個android移動App需要經過從分解需求、架構設計到開發調試、測試、上線發布等多個階段,在發布後還會有產品功能上的迭代演進,此外還會面對性能、安全、無線網路質量等多方面的問題。
移動App的產品形態各不相同,有的是內容類,有的是工具類,有的是社交類,所以它們的業務邏輯所偏重的核心技術有些差別,但它們都會用到一些常用的技術方案。今天我們就先來簡單介紹一下這些常用技術,以後會專門分專題來詳細介紹這些技術的原理和使用場景。
1. Multidex
在Dalvik虛擬機所使用的dex文件格式中,用原生類型short來索引文件中的方法數,也就是最多隻能有4個位元組65536個method,在打包apk的過程中會把工程所需要的全部class文件都合並壓縮到一個dex文件中,也就是說自己開發的代碼加上外部引用的庫的方法總數不能超過65535。
隨著業務邏輯的不斷增長,很容易就會超過這個限制,在編譯期間就會遇到這樣一個錯誤:
還好google官方給出了一個解決方案Multidex,它會把dex文件拆成兩個或多個,第二個dex文件叫classes2.dex,在Application實例化後會從apk中解壓出classes2.dex並將其拷貝到應用的目錄下,通過反射將其注入到當前的ClassLoader中。但是這個方案非但不能解決一切問題也不能直接拿來用,而要加入自己的一些改造,來解決NoClassDefFoundError、INSTALL_FAILED_DEXOPT等問題,以保證自己的dex被順利的載入流暢的執行。
2. Plugin
Multidex雖然可以解決方法數的限制,但隨著業務邏輯越來越多,apk的大小也變得越來越多,而且有一些功能並非全部用戶都想用的,所以會把一些功能模塊獨立出來做成插件,讓用戶可以按需下載更新,這樣既減小了包大小,又改善了用戶體驗。
插件類似於windows的dll文件,放在某個特定目錄,應用程序主框架會用LoadLibrary載入各dll文件,按插件介面去訪問插件。Android的插件技術也是這樣,利用一個進程可以運行多個apk的機制,用ClassLoader將宿主apk之外的類載入進來,插件的context可以通過createPackageContext方法創建。因為插件中的activity,service等組件如果沒有在AndroidManifest.xml中聲明將不能運行,所以需要預先在AndroidManifest.xml中聲明一個代理類(ProxyActivity),將這個ProxyActivity傳給插件,讓插件的activity也有訪問資源的能力。
3. Hot Patch
有時一些嚴重的crash bug或漏洞需要緊急修復,但有些用戶不會或不願意立即升級,而且頻繁升級,沒有特別的功能更新只是修復bug的升級,對活躍用戶是一種傷害。熱補丁就可以解決這樣的窘境,它是一種可以線上修復的技術方案,有動態改變方法的能力,一般大型的移動應用都會使用熱補丁來處理緊急事件。
Hot Patch可以通過hook來修改java的method,注入自己的代碼,實現非侵入式的runtime修改,或者採用正向編程,通過工具生成patch文件,通過jni bridge指向補丁文件中的方法。還有就是利用ClassLoader,在dex中查找class時,如果找到類則返回,找不到就從下一個dex文件中繼續查找,由此可以想到,在把問題修復後,可以單獨生成一個dex,通過反射插入到dexElements數組的最前面,這樣就能讓dalvik載入補丁里的類了。
4. Push通道
Push是移動App常用的一種無線技術,基礎是基於TCP的心跳機制,和客戶端維持一個長連接。用處是向客戶端推送消息,或者代替客戶端定時去從伺服器pull的策略,改為客戶端接收到push消息後再去pull。
如果每個應用都自己實現push通道的話,cpu就會不定時地經常被喚醒,耗電量達到難以容忍的程度,而且自己搭建push平台的成本也很大,實時性和效率也存在問題,一般都直接使用一些服務商提供的push方案,這些push平台一般都經過了優化設計,在跨平台和網路穿透性、長連接心跳包、多客戶端App鏈路復用、服務和連接保活等技術上做了優化。比如Agoo最初是淘寶無線事業部開發的push服務,在逐漸完善和支撐淘系其他app後,通過服務端容量、通訊協議優化、業務和開放能力的拓展改進後,與友盟等合作,開始向第三方提供推送服務。
5. 應用加固
一款熱門的移動app或游戲發布後會受到很多的關注,經常會遇到二次打包的盜版行為,破解者要麼修改游戲的資源文件、道具、分值甚至直接把訪問的站點指向自己架設的伺服器,損害了開發者的利益;要麼偷偷植入自己的惡意代碼,表面上看起來跟正版的app完全一樣,在後台卻盜取用戶隱私,植入木馬;要麼通過反向工程學習原app的核心技術,打破技術上的競爭壁壘。
為了防止被破解只通過混淆是遠遠不夠的,即使是在native層混淆也還是會被人熟練的反編譯,所以需要一套對apk的保護方案來反調試、防逆向和防篡改。一般的加固方法都是對原apk先進行加密,然後和殼合並生成新的apk。殼是用來解密apk的dex文件。當應用啟動時,殼先解密原apk,准備好自己定義的ClassLoader,然後獲取源程序中的Application名稱,通過反射找到正確的Application對象,運行它的onCreate方法,這樣原apk才能被真正運行。其他一些反調試的方法有針對反編譯工具,在源程序中加入一些無效的指令或無效的指針,引發反編譯工具的崩潰,還有就是加花指令,利用一些跳轉,堆棧操作等指令,讓破解者無法清楚地理解反匯編後的內容。
6. 其他
除了上述幾點外,在服務端還會涉及灰度策略、鏈路流量優化、動態更新配置、防DNS劫持等技術,在客戶端會涉及用戶埋點上報、在線監控、進程保活、H5和native混合開發、注入框架等。