CTF-Bugku-逆向-1-


2020.09.20

經驗教訓

  1. jnz指令,是用來判斷是否正確的標志;
  2. IDA中,按a可以把十六進制轉化為字符串,按f5能看偽代碼;
  3. liblhm.so文件是APK解壓來的,是動態庫,可以在IDA中打開,目錄一般是\lib\armeabi\liblhm.so
  4. apk反編譯后,在查看源碼的時候,有一些方法只有方法名,內容是空的,很有可能是native層的方法,要用IDA查看liblhm.so文件
  5. apk反編譯可以用JEB

第一題 入門逆向

https://ctf.bugku.com/challenges#入門逆向

  1. 下載完文件,IDA打開,打開String視圖,發現有用信息
  2. 雙擊進入代碼段,x或者右鍵,跳轉到xref

  3. 在下方發現疑似flag十六進制,r轉換得到flagflag{Re_1s_S0_C0OL}

第二題 Easy_vb

https://ctf.bugku.com/challenges#Easy_vb

  1. 老辦法,打開IDA,shift+f12開啟string視圖,看見esay_vb字段,雙擊跳轉,往下看發現flag字段MCTF{_N3t_Rev_1s_E4ay_},改成flag開頭,就行

第三題 Easy_Re

https://ctf.bugku.com/challenges#Easy_Re

  1. IDA打開,f5查看偽代碼,發現存在一個數據比對的過程,比對的內容是v5,但是數據存在上邊的v6中,雙擊上邊qword_413E44進入查看,發現flagDUTCTF{We1c0met0DUTCTF},按a能把十六進制轉化為字符串

第四題 游戲過關

https://ctf.bugku.com/challenges#游戲過關

  1. 下載打開如下圖,是一個游戲,想正常過關是不存在的,只能想辦法找到比對過關的地方,修改參數,讓他滿足條件,或者直接跳轉到存儲答案的地方,思路就是這樣。
  2. IDA打開,string視圖,發現線索,可以想象,這是游戲過關后的輸出,那么被輸出的肯定就是flag了,

    3.雙擊跳轉到代碼
  3. x跳轉到xrefs,
  4. f5查看偽代碼,沒有看到明顯的flag,看這里應該是經過運算得到的flag,我們不好直接得到那就得運行這個程序,想辦法讓他跳轉到這里執行,讓他給我們輸出結果
  5. 這就用到另一個np的軟件,OD,不知道為什么,我的od和ida地址一直對不上,我本人已崩潰……

第六題 逆向入門

  1. 下載后查看二進制,發現是圖片base64編碼,解碼得二維碼,掃描得flagbugku{inde_9882ihsd8-0}

第七題 love

https://ctf.bugku.com/challenges#love

  1. 下載之后,我的虛擬機竟然打不開……
  2. 還好IDA可以打開,啊哈哈哈,打開之后查看String,定位到flag,大體能看出來這個程序什么意思,就是輸入一個值,跟flag比較,對了就輸出right,錯了就wrong
  3. 雙擊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");
}
  1. 被比對的是Str2,雙擊查看Str2是e3nifIH9b_C@n@dH
  2. 再進行再進行解密即可,腳本如下:
#!/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()))
  1. 輸出結果是{i_l0ve_you},提交結果是flag{i_l0ve_you}

第八題 LoopAndLoop(阿里CTF)

https://ctf.bugku.com/challenges#LoopAndLoop(阿里CTF)

  1. 首先這題我不會,看了很多大佬的資料,學到了很多東西。寫在開頭
  2. JEB打開apk文件,在mainactivity中按tab鍵查看源碼,能發現比對函數check
  3. 具體比對方法很多wp中有就不說了,反正我是沒看明白他到底是怎么運算的,反正就是一個思路,輸入一個值,與99放入check中,然后巴拉巴拉出結果了……什么玩意哎

第九題 easy-100

https://ctf.bugku.com/challenges#easy-100(LCTF)

  1. 做個題還得專門整個手機安裝app測試,nnd🥱
  2. 今天到此結束,我撂挑子了👻
  3. 比較好的解密腳本,取自這里
 1 num = 99
 2 flag = 1835996258
 3 while num - 1 >0 :
 4     tmp = num * 2 % 3
 5     if(tmp == 0):
 6         flag -=4950
 7     if(tmp == 1):
 8         if((num - 1) % 2 == 0):
 9             flag -= 499500
10         else:
11             flag +=499500
12     if(tmp == 2):
13         flag -= 49995000
14     num -= 1
15 print flag


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM