【DASCTF八月挑战赛】apkrev
好久沒更新blog了,也好久沒有玩CTF了,來水一篇好了^^
分析易知具體邏輯在so層
分析後發現如下位置,最關鍵的就是那個與input異或的v13
並且這個v13高機率是固定的
異或完之後就與enc對比,全對才返回true
解法
由上述分析可知那個v13異或數組是最關鍵的
我選擇使用指令trace的方式來獲取這個v13,用的是這個項目來生成trace日志
生成的trace日志裡有以下這段,0xf3,0x3f...就是v13數組( 這其實少了第一個元素0xbb )
12instruction 0x776a2c1430 0x776a2c13f8 4 ldr w12, [x12, w14, uxtw #2]statistics x12:0xf3,0x39,0xd4,0x9,0xb1,0xde,0xa7,0xf0,0x33,0xa,0xcf,0xa6,0x3d,0x8,0xa5,0x72,0x9e,0x9d,0x49,0xc9,0x68,0x7d,0xb5,0x59,0x1b,0xd5,0xb7,0x59,0xad,0xe3,0x6e
解密腳本:
123456789101112 ...
最小PE文件
用1或9填充DOS頭、PE頭和節表中無用的部分
可以在這些地方見縫插針地填入所需的東西,如程序主要的代碼、Dll名稱和函數名稱等
DosStub可以整段刪掉,如下圖
暫時先不修改各個RVA,最後刪完再一次過重設所有需要修改的RVA
接下來修改可選PE頭的數據目錄表,因為只需要用到數據目錄表第2項的導入表,因此後面的14項都可以直接刪除
並將數據目錄表的項數設為2
節表只需留下.text節表,.rdata可以直接刪除
可以直接刪除的原因是,數據目錄表能直接定位到導入表,因此不需要依靠.rdata節表也行
分析一下.rdata對應的節區
可以先從原始文件中,找到.rdata對應節區的的起始位置和大小,從而在當前文件中找到.rdata對應節區
整個藍色部分就是.rdata對應的節區,紅框部分是IAT,這部分不重要,暫時以9填充,重要的是綠框部分,這是一個IDT結構的數組,以20個字節的0作為IDT數組的結尾
IDT結構體最重要的是OriginalFirstThunk、FirstThunk和Name這3個屬性,後續要手動將這3個屬性指向正確的地址
由於只需要Messa ...
淺逆某簡單akamai(無風控部分)
Target:aHR0cHM6Ly93d3cuZGlnaWtleS5jbi8=
前言本文參考了以下文章和視頻,感謝大佬們的分享
https://www.bilibili.com/video/BV1d14y1h7P9/?spm_id_from=333.880.my_history.page.click&vd_source=999a37555f77c5995df6185262c99be3
https://blog.csdn.net/huangch135/article/details/130227868
基本分析
akm的目標是cookie裡的_abck這個值
當_abck裡的~-1~變成~0~時就算是有效
上述的_abck由類似1diI9T-4eS/HLR5GidZ/XH/YkNYXGfprwm5/cEMlcQYB/TnUjFxE/ZWTA這樣的接口返回
本網站屬於簡單類型的akm,因此在風控正常的情況下,第1個接口返回的cookie就已經是有效的
而對於其他難度的akm,則可能需要在第3次後,什至是在某些事件觸發後,才會返回有效的cookie
第一次請求
從上 ...
某度翻譯逆向分析
目標網站:aHR0cHM6Ly9mYW55aS5iYWlkdS5jb20vI2VuL2NodC9oZWxsbw==
請求參數跟值
下個XHR斷點,一步一步跟很容易可以來到這處
請求參數就是this.paramData
這時一個快捷的方法是先看看this.constructor,看paramData是否在構造函數裡就已經賦值
一看發現果然如此
然後向上一層就能找到參數生成的地方
慢慢調試,會發現除了sign外,其他參數都能固定
生成sign的函數也很容易扣,用一般webpack的扣法就能搞出來
Acs-Token跟值
在上述跟值的過程中就能看到Acs-Token賦值的地方
打個條件斷點跟到這裡,再往前就是異步
在異步的地方下斷點,測試後發現代碼會走2次這裡,若第2次時再按F8就會去到上一步條件斷點的位置
因此在第2次時按F11
然後發現n是生成好的Acs-Token,代表我們又更前了一步
繼續向前跟會發現Acs-Token在n.gs的回調函數中出現
跟進n.gs,來到另一個名為acs-2060.js?_=XXXX的代碼中,而n.gs就會下圖紅框的這 ...
【js逆向】yrx內部平台第5題
無限debugger這題有個無限debugger,用下面這個腳本暫時過一過,能分析頁面邏輯就行
123456var Func = Function;Function = function(){ if(arguments[0].indexOf('debugger')!=-1)return function(){}; return Func.apply(this,arguments);}
定位加密函數
通過hook XMLHttpRequest.prototype.open,找到加密參數的位置
然後會跟到_yrxyA$這個函數,接下來就是要想辦法將它扣出來了
12345678910111213141516171819202122232425262728function _yrxyA$(_yrx7jl, _yrxcze) { try { if (typeof _yrx7jl !== _yrxQ9C[6]) _yrx7jl += ...
【js逆向】某空氣質量網
網址:http://www.aqistudy.cn/historydata/monthdata.php?city=北京
反爬手段
F12檢測:用ctrl+shift+i,然後將開發者工具彈出
無限Debugger:用油猴注入以下hook腳本 12345678910111213141516171819202122// ==UserScript==// @name debugger// @namespace http://www.aqistudy.cn/historydata/monthdata.php?city=%E5%8C%97%E4%BA%AC// @version 0.1// @description try to take over the world!// @author You// @match http://www.aqistudy.cn/historydata/monthdata.php?city=%E5%8C%97%E4%BA%AC// @icon https://www.google.c ...
【HGAME2023】week3-kunmusic
分析
是.net的逆向,將kmusic.dll拉入dnSpy
找到下圖這處,發現是對一些數據進行解密
直接在解密完的位置下斷點,獲取解密後的數據
頭2個字節是0x4D和0x5A,明顯是一個PE文件
嘗試拉入IDA進行分析,但IDA卻提示該文件同樣是.net assembly
所以要用dnSpy來分析
然後就找到最終的地方,在這裡解密後就能得到flag
腳本1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283import z3s = z3.Solver()num = [z3.BitVec("%d"%x,8) for x in range(13)]s.add(num[0] + 52296 + num[1] - 26211 + num[2] - 11754 + (num[3] ^ 41236) + ...
【HGAME2023】week2-VidarCamera
程序分析
找到加密函數,發現明顯xtea算法的特點( <<4 >>5 ),delta為878077251
分析後可知,v[0]和v[1]一組進行xtea,然後再v[1]和v[2]一組進行xtea,如此類推,因此解密時要從後向前進行解密
裡面的語句都經過一些簡單的”混淆”,手動還原一下最核心的兩句
可以看到第一句代碼與原版xtea相比多了一個^sum
12iArr[i2] += (((key[(sum & 3)]) + sum) ^(((iArr[i] << 4) ^ (iArr[i] >>> 5)) + iArr[i])) ^ sum iArr[i] += (((iArr[i2] << 4) ^ (iArr[i2] >>> 5)) + iArr[i2]) ^ ((key[((sum >>> 11) & 3)]) + sum)
腳本12345678910111213141516171819202122232425262728#include < ...
【FlareOn2】sender
分析a1是flag,先對flag進行了加法操作,所以之後解密時直接減回來就可
之後對flag進行了變表的base64加密
最後會發送網路請求,也就是題目給出的那個.pcap檔,要用wireshark打開
在wireshark用指令http.request.method=="POST"過濾掉其他無用的封包,只留下POST請求的那些
然後再逐一取出所有data,拼接起來後,這就是我們的密文
解密腳本1234567891011121314151617from base64 import b64decodefake_table = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"real_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"enc_data = list("UDYs1D7bNmdE1o3g5ms1V6RrYCVvODJF ...
Python爬取網易云評論
分析頁面
在網頁原始碼中找不到評論區的內容,由此可知這網頁是客戶端渲染
注:F12與網頁原始碼是兩個不同的東西,F12中會顯示當前網頁的實時數據,所以可以看到評論區的內容
在XHR中找到2次響應的數據
可以看到請求的參數明顯經過加密,因此接下來就是要找到加密的地方
至此,大概可以分析出我們爬蟲的步驟:
找到未加密前的參數是怎樣的
找到加密函數,自己用python模擬出來
對【未加密前的參數】作出自己需要的修改,然後再放到自己模擬的加密函數中進行加密
發送請求
動調JS對於網頁來說,動調實在是十分的方便,只順通過很簡單的方法就可以看到函數的調用順序,根據這個順序就能很輕易地找到加密的地方,具體操作如下:
在上面已經找到服務器返回的評論區的數據,即get?csrf_token=這個
點擊發起人→要求呼叫堆疊,這裡就是發送這個網路封包時的函數調用棧,點擊最上面那個
然後再點擊左下角的{}來格式化JS代碼
之後可以看到高亮的那行代碼就是發送請求的地方,然後按左邊的數字來下斷點
之後按F5重新載入網頁,觀察作用域的數據來判斷是否停在了我需要的地方,若 ...