文章轉載于:https://mp.weixin.qq.com/s/dXRo0D_Xx7E_h85XbnwPVQ 有興趣去源站瀏覽學習
主要自己看著方便些
1.HTTS三次握手
目前使用的 HTTP/HTTPS 協議是基于 TCP 協議之上的,因此也需要三次握手。在 TCP 三次握手建立鏈接之后,才會進行 SSL 握手的過程(即身份認證和密鑰協商的過程)。
第一步:證書驗證
服務器將 crt 公鑰以證書的形式發送到客戶端,客戶端驗證證書是否合法。
第二步:獲取對稱密鑰
客戶端用隨機數和 hash 簽名生成一串對稱密鑰(即隨機鑰,客戶鑰),然后用 crt 公鑰對對稱密鑰進行加密。
客戶端將加密后的對稱密鑰發送給服務器。
服務器用 crt 私鑰解密,取出對稱密鑰。
第三步:傳輸加密數據
服務器用隨機鑰來加密數據,發送加密的網頁內容。
客戶端通過本地存儲的隨機鑰對密文進行解密并判斷是否被篡改,如果沒有篡改,
后面的數據通訊將使用對稱加密傳輸所有內容。
2.對稱和非對稱加密
對稱加密:
在編碼時使用的密鑰 e 和解碼時一樣 d(即 e = d)。(DES、3DES、AES)
非對稱加密:
加密的密鑰 e 和解密的密鑰 d 是不同的(即 e != d),并且加密的密鑰 e 是公開的,叫做公鑰,
而解密的密鑰 d 是保密的,叫私鑰。(RSA、DSA、ECC)
3.web逆向參數定位方法
1、全局搜索
2、xhr攔截
3、堆棧調試
4、Hook腳本
5、內存漫游
4.瀏覽器指紋
常用于記錄的瀏覽器指紋:
Header、Cookie,IP,DNS,
UserAgent,Font(字體列表),
Language,localStorage、
Plugin(插件),Canvas(渲染繪圖),
WebGL(3D渲染圖形),
Web Vendor(硬件廠商信息),
Timezone(時區),Platform(系統),
WebRTC(web通信API),
ScreenResolution(分辨率),
Audio(音頻設置和硬件特征指紋),
enumerateDevices(其他媒體設備),
CPU、GPU信息。
5.web逆向其他問題
1、常見檢測和繞過:反調試之類
2、如何獲取當前環境:Proxy
3、hook如何實現的
4、如何hook XHR
5、加解密和混淆處理
345可到工具站查看,地址:
cnlans.com/lx/tools/jshook
6.chromedriver檢測
常見的檢測點:webdriveruser-data-dirlanguagenavigatorpluginsDeveloper可在頁面加載之前通過Js語句覆蓋原有屬性。
Object.defineProperty(navigator, 'webdriver', { get: () => undefined }
)
7.驗證碼識別和處理
通用逆向分析流程
1.分析請求流程
2.驗證碼注冊
3.識別驗證信息
4.生成驗證參數
5.驗證識別方法
1.開源工具識別
2.第三方平臺
3.訓練識別模型,可借助云平臺或開源框架驗證碼廠家:極驗、阿里、易盾、頂象、點觸、數美。
極驗簡述
1.主要有三個以 geetest_ 開頭的加密參數,提交滑塊時的請求參數 gt、challenge、lang、w、callback。
2.分析時可對代碼進行 Unicode 解碼,解碼之后再通過AST腳本去除冗余代碼。
3.調試后抽離出請求參數的加密邏輯,構造請求體完成驗證。數美流程
1.驗證碼申請
2.提取js參數,需要提取js中的參數名。
2.驗證碼注冊,獲取滑塊圖片和驗證背景圖。
3.計算滑塊缺口位置,可使用opencv等工具計算缺口距離。
4.構造軌跡,自動生成或者copy軌跡庫。
5.逆向分析接口參數,完成提交驗證。
8.動態cookie反爬
加速樂簡述1、第一次請求返回狀態為521的響應內容,執行JS可獲得cookie值 jsl_clearance。
2、cookie帶上生成的__jsl_clearance和第一步中返回的cookie值__jsluid_h再次請求目標網址,響應內容為一段混淆JS代碼,該代碼為生成真實__jsl_clearance值的代碼。
3、主要加密邏輯就是對參數做拼接處理,然后對拼接后的字符串進行hash加密。瑞數流程
1、第一次請求后,瀏覽器加載meta,meta是包含動態content的html標簽,會在eval執行第二層JS代碼時使用到。
2、瀏覽器請求外鏈JS,一般同站外鏈JS是固定的,用于下一步的調用。
3、加載自執行函數(動態),將外鏈的JS解密為字符串,并給window.$_ts添加屬性。然后通過eval函數進入VM執行解密后的字符串,執行完畢后可生成cookie。瑞數處理1、先處理定時器和死循環debugger。
2、將HTML放到本地運行或將瀏覽器JS替換為固定內容。
3、將content和自執行方法在本地調試,根據VM執行的異常信息補環境。
4、主要需要補充document、localStorage和window中的一些方法,如addEventListener、getElementsByTagName、createElement等。
9.安卓逆向分析步驟
1、抓包
2、查殼脫殼
3、反編譯
4、參數定位、靜態分析、動態調試
5、模擬調用、算法還原
10.xposed hook原理
安卓所有的APP進程是用 Zygote(孵化器)進程進行fork創建并啟動的。
Xposed替換了Zygote進程對應的可執行文件/system/bin/app_process,
每啟動一個新的進程,都會先啟動xposed替換過的文件,加載xposed相關代碼。
11.Frida hook原理
Frida的注入是基于 ptrace實現的。
frida 調用ptrace向目標進程注入了一個frida-agent-xx.so文件。
后續hook是以該so文件和frida-server通訊實現的。Frida hook java層原理Frida-java采用常見的Dalvik Hook方案,將待hook的java函數修改為native函數,當調用該函數時,會執行自定義的native函數。
但是和其他hook框架不同的是,使用frida時,我們hook的代碼是JS實現的,所以有一個基于JS代碼生成native函數過程。
12.ptrace注入流程
主要是通過系統ptrace函數進行實現。
1.attach到遠程進程;
2.保存寄存器環境
3.遠程調用mmap函數分配內存空間
4.想遠程進程寫入加載模塊名稱和調用函數
5.通過dlopne打開注入模塊
6.dlsym獲取調用函數地址
7.遠程調用注入模塊的函數
8.恢復寄存器
9.剝離遠程進程
13.Frida常見反調試
1. 檢測 frida-server 文件名
2. 檢測 27042 默認端口
3. 檢測 D-Bus
4. 檢測 /proc/pid/maps 映射文件
5. 檢測 /proc/pid/tast/tid/stat
6. 雙進程保護 前兩種可以通過修改 frida-server 文件名,改默認端口繞過。雙進程可以通過 - f spawn 模式啟動繞過。其他的需要 hook 修改。
14.Inlinehook
inlinehook是hook的一種實現方式。通過修改原函數開頭的匯編指令,直接跳轉到指定函數,執行完自己的邏輯再跳轉回來。
開源的inlinehook庫有很多,例如subhook和微軟的Detours。如何去檢測inlinehook
inlinehook只修改了內存中的機器碼,而內存中的機器碼是從文件加載而來的,所以我們可以將函數在內存中字節和本地對應的字節進行比較,
如果不一致,那么可以認為內存中的字節被修改了,即被inlinehook了。
15.加固與脫殼
現在安卓平臺上幾種加固方式(動態加載,類抽取,混淆,vmp)1、Dex整體加固也被稱為第一代加固,把DEX整體加密然后動態加載。脫殼思路是app運行后,在app內存中搜索 dex\n035,
然后進行dump數據。
2、不落地加載是第二代加固,通過內存動態加載Dex,可以將Dex加密放在Apk中,
在內存中實現解密。脫殼思路是通過hook關鍵函數,直接在內存中把Dex遍歷出來就可以。
3、指令抽取和轉換。脫殼思路是對自定義的JNI接口對象進行內部調試分析,得到完整的原始dex文件。
4、虛擬機源碼保護。根據VMProtect殼的特征和加殼方式,編寫脫殼程序還原原始的程序代碼,
將還原后的程序代碼重新編譯,生成程序可執行文件。
16.設備指紋
常見:品牌型號、IMEI、MAC地址、IMSI、運營商、系統信息、硬件信息、藍牙信息、路由信息等。
17.其他安卓問題
1、系統服務
2、系統權限
3、安卓反調試
4、重打包檢測
5、ollvm
6、不同協議的抓包問題
7、群控開發、改機
8、IDA使用問題
9、ARM跳轉指令