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
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
Smali
.smali文件,jadx-jui打開
主要邏輯為,使用已知的密鑰和密文,解密ECB模式的AES
寫解密AES腳本即可得到flag
總結
以上是生活随笔為你收集整理的REVERSE-PRACTICE-JarvisOJ-3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巨龙军团来了!《魔兽世界:巨龙时代》开启
- 下一篇: 苹果华为小米vivo 大厂的“多屏协同”