日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

REVERSE-PRACTICE-JarvisOJ-3

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 REVERSE-PRACTICE-JarvisOJ-3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

REVERSE-PRACTICE-JarvisOJ-3

    • 爬樓梯
    • 軟件密碼破解-1
    • Classical CrackMe2
    • Smali

爬樓梯

apk文件,放到模擬器里運行一下
“爬一層樓”按鈕可按,每按一下,“已爬的樓層”加1層
“爬到了,看FLAG”按鈕不可按,應該是“已爬的樓層”等于“要爬的樓層”時,按鈕可按,獲得flag

jadx-gui打開,在com.ctf.test.ctf_100.MainActivity中,靜態加載了ctf庫
主要的邏輯在onCreate方法中,要爬的樓層設置為隨機數,當已爬的樓層大于等于要爬的樓層時,按看flag按鈕即可得到flag

程序開頭將看flag的按鈕設置為不可按,滿足條件后設置為可按,考慮patch程序,讓程序開頭就將看flag的按鈕設置為可按
用jeb打開apk,方便找到java語句對應的匯編代碼
可以看到,在onCreate方法開始的部分,v5為0,在下面Button->setClickable中作為參數,將看flag按鈕設置為不可按,將v5patch為1時,使得看flag按鈕在開始時就被設置為可按

ApkToolBox反編譯apk,打開CFF_100\smali\com\ctf\test\ctf_100\MainActivity.smali,找到對應位置并修改保存

將整個CFF_100文件夾拖入ApkToolBox回編譯,得到一個新的apk
在模擬器中運行,可以看到,看flag按鈕可以直接點擊獲得flag

軟件密碼破解-1

32位MFC程序,先用xspy查“確定”按鈕的id,為0001

再查整個窗口,知道“確定”按鈕對應的響應函數為(0x0040)1BB0

ida打開該MFC程序,左側函數窗搜索1BB0,來到sub_401BB0函數
分析可知,將輸入與byte_5777F8數組按下標順序地做異或運算,結果與已知數據比較,驗證輸入

byte_5777F8數組的元素在靜態分析中不能得到,需要attach程序調試
寫逆異或運算腳本即可得到flag

res=[0x1B, 0x1C, 0x17, 0x46,0xF4, 0xFD, 0x20, 0x30,0xB7, 0x0C, 0x8E, 0x7E,0x78,0xDE] byte_5777F8=[0x28, 0x57, 0x64, 0x6B, 0x93, 0x8F, 0x65, 0x51, 0xE3, 0x53,0xE4, 0x4E, 0x1A, 0xFF] flag="" for i in range(len(res)):flag+=chr(res[i]^byte_5777F8[i]) print(flag) #3Ks-grEaT_j0b!

Classical CrackMe2

exe程序,輸入密碼,輸入錯誤時還會打印一串base64
查殼,發現是.Net程序,有一句"don’t Unpack with : de4dot",不要使用de4dot解包

用de4dot可以解包,不過解包后的程序不能運行,
dnSpy打開原來的程序,由于沒有unpack,會有一些不明白意義的字符,這時可以開另一個dnSpy打開解包過的程序,對照著來看
對照著看,發現按下"GETFLAG"按鈕后,來到這個地方進行判斷
text是輸入,text2是將輸入text傳入"Wm@@9OrPgw\u0020d/p?i,N>lh@Y!"的一個方法后返回的內容,然后判斷 text是否為空以及 text2是否與已知相同

來看調用的"Wm@@9OrPgw\u0020d/p?i,N>lh@Y!“的那個方法,發現是將傳入的參數進行AES.ECB模式的加密,名為bytes的數組作為加密密鑰Key,密文用base64編碼后再返回

調試,可以知道加密密鑰Key為"pctf2016pctf2016pctf2016pctf2016”

text2要比較的字符串為"x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk="

寫解AES腳本即可得到flag

from Crypto.Cipher import AES import base64 key="pctf2016pctf2016pctf2016pctf2016" cipher="x/nzolo0TTIyrEISd4AP1spCzlhSWJXeNbY81SjPgmk=" cipher=base64.b64decode(cipher) aes=AES.new(key,AES.MODE_ECB) print(aes.decrypt(cipher)) #PCTF{Dot_Net_UnPack3r_yoo}

Smali

.smali文件,jadx-jui打開
主要邏輯為,使用已知的密鑰和密文,解密ECB模式的AES

寫解密AES腳本即可得到flag

from Crypto.Cipher import AES import base64 key="cGhyYWNrICBjdGYgMjAxNg==" key=base64.b64decode(key) cipher="sSNnx1UKbYrA1+MOrdtDTA==" cipher=base64.b64decode(cipher) aes=AES.new(key,AES.MODE_ECB) print(aes.decrypt(cipher)) #PCTF{Sm4liRiver}

總結

以上是生活随笔為你收集整理的REVERSE-PRACTICE-JarvisOJ-3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。