CTF-Bugku-逆向-1-
阿新 • • 發佈:2020-09-20
2020.09.20
經驗教訓
- jnz指令,是用來判斷是否正確的標誌;
- IDA中,按a可以把十六進位制轉化為字串,按f5能看虛擬碼;
- liblhm.so檔案是APK解壓來的,是動態庫,可以在IDA中開啟,目錄一般是
\lib\armeabi\liblhm.so
; - apk反編譯後,在檢視原始碼的時候,有一些方法只有方法名,內容是空的,很有可能是native層的方法,要用IDA檢視liblhm.so檔案
- apk反編譯可以用JEB
第一題 入門逆向
https://ctf.bugku.com/challenges#入門逆向
- 下載完檔案,IDA開啟,開啟String檢視,發現有用資訊
- 雙擊進入程式碼段,x或者右鍵,跳轉到xref
- 在下方發現疑似flag十六進位制,r轉換得到flag
flag{Re_1s_S0_C0OL}
第二題 Easy_vb
https://ctf.bugku.com/challenges#Easy_vb
- 老辦法,開啟IDA,shift+f12開啟string檢視,看見esay_vb欄位,雙擊跳轉,往下看發現flag欄位
MCTF{_N3t_Rev_1s_E4ay_}
,改成flag開頭,就行
第三題 Easy_Re
https://ctf.bugku.com/challenges#Easy_Re
- IDA開啟,f5檢視虛擬碼,發現存在一個數據比對的過程,比對的內容是v5,但是資料存在上邊的v6中,雙擊上邊qword_413E44進入檢視,發現flag
DUTCTF{We1c0met0DUTCTF}
第四題 遊戲過關
https://ctf.bugku.com/challenges#遊戲過關
- 下載開啟如下圖,是一個遊戲,想正常過關是不存在的,只能想辦法找到比對過關的地方,修改引數,讓他滿足條件,或者直接跳轉到儲存答案的地方,思路就是這樣。
- IDA開啟,string檢視,發現線索,可以想象,這是遊戲過關後的輸出,那麼被輸出的肯定就是flag了,
3.雙擊跳轉到程式碼
- x跳轉到xrefs,
- f5檢視虛擬碼,沒有看到明顯的flag,看這裡應該是經過運算得到的flag,我們不好直接得到那就得執行這個程式,想辦法讓他跳轉到這裡執行,讓他給我們輸出結果
- 這就用到另一個np的軟體,OD,不知道為什麼,我的od和ida地址一直對不上,我本人已崩潰……
第六題 逆向入門
- 下載後檢視二進位制,發現是圖片base64編碼,解碼得二維碼,掃描得flag
bugku{inde_9882ihsd8-0}
第七題 love
https://ctf.bugku.com/challenges#love
- 下載之後,我的虛擬機器竟然打不開……
- 還好IDA可以開啟,啊哈哈哈,開啟之後檢視String,定位到flag,大體能看出來這個程式什麼意思,就是輸入一個值,跟flag比較,對了就輸出right,錯了就wrong
- 雙擊flag right,x檢視xref,f5檢視原始碼
__int64 main_0()
{
// 應該是base64編碼
for ( i = 0; i < 100; ++i )
{
if ( (unsigned int)i >= 0x64 )
j____report_rangecheckfailure();
Dest[i] = 0;
}
sub_41132F("please enter the flag:");
sub_411375("%20s", &Str);
v0 = j_strlen(&Str);
v1 = (const char *)sub_4110BE((int)&Str, v0, (int)&v11);
strncpy(Dest, v1, 0x28u);
v8 = j_strlen(Dest);
// 這裡對flag進行了處理,每一位都加了j,第一位加0,第二位加1……
for ( j = 0; j < v8; ++j )
Dest[j] += j;
v2 = j_strlen(Dest);
// 這裡進行了比對,也就是說被比對的是Str2,雙擊檢視Str2,再進行再進行解密即可
if ( !strncmp(Dest, Str2, v2) )
sub_41132F("rigth flag!\n");
else
sub_41132F("wrong flag!\n");
}
- 被比對的是Str2,雙擊檢視Str2是
e3nifIH9b_C@n@dH
- 再進行再進行解密即可,指令碼如下:
#!/usr/bin/env python 3.8
# -*- encoding: utf-8 -*-
#fileName : decry.py
#createTime: 2020/09/20 15:38:04
#author : 喬悟空
#purpose : 此指令碼用於特定加密方式的解密
import base64
miwen = "e3nifIH9b_C@n@dH"
res = ''
for i,enu in enumerate(miwen):
res += chr(ord(enu)-i)
print(base64.b64decode(res.encode()))
- 輸出結果是
{i_l0ve_you}
,提交結果是flag{i_l0ve_you}
第八題 LoopAndLoop(阿里CTF)
https://ctf.bugku.com/challenges#LoopAndLoop(阿里CTF)
- 首先這題我不會,看了很多大佬的資料,學到了很多東西。寫在開頭
- JEB開啟apk檔案,在mainactivity中按tab鍵檢視原始碼,能發現比對函式check
- 具體比對方法很多wp中有就不說了,反正我是沒看明白他到底是怎麼運算的,反正就是一個思路,輸入一個值,與99放入check中,然後巴拉巴拉出結果了……什麼玩意哎
第九題 easy-100
https://ctf.bugku.com/challenges#easy-100(LCTF)
- 做個題還得專門整個手機安裝app測試,nnd