1. 程式人生 > 實用技巧 >BUUCTF Re部分wp(九)

BUUCTF Re部分wp(九)

[INSHack2017]secure-garden-shed-v1

給了兩個檔案sgs-exec-release,lock.sgsc

嘗試一下發現使用方法

./sgs-exec-release lock.sgsc

看了下ida,邏輯應該是在lock.sgsc裡,直接動調搜尋字串

[INSHack2018]Tricky-Part2

main開頭是個

這個abort_trap才是要分析的函式

flag在check裡

[INSHack2017]proprietary-cctv-software

pyc,執行顯示

RuntimeError: Bad magic number in .pyc file

不過現在uncompyle6可以直接逆,逆完發現使用了PyQt5,先下載

pip3 install PyQt5

看裡面程式碼,成功會執行

def activation_passed(self):
        self.lab_result.setText('Activation is a success !\n%s' % self.finalize())
        self.show()

所以改成

def activation_failed(self):
        self.lab_result.setText('Activation is a success !\n%s
' % self.finalize()) self.show()

執行後直接點取消就行了

[FBCTF2019]go_get_the_flag

go逆向,去了符號表

動調一直跟,找到一處判斷長度為18

往下找,當經過一個函式時,會輸出Wrong

這裡rdx的值挺奇怪,感覺像是字串,就去找了找賦給rdx值的地方

這裡就是要輸入的值,輸入得flag

[watevrCTF 2019]Hacking For Vodka

簡單題,main有處反調

關鍵函式是下面這個,找到比對處,發現是明文比對

直接patch,輸出flag

[watevrCTF 2019]Watshell

可以看到輸入由空格分離的數字組成,跟進去發現關鍵部分是個遞迴,由此直接爆破

#include<stdio.h>

__int64_t sub(__int64_t a1, __int64_t a2, __int64_t a3)
{
  __int64_t result; 
  __int64_t v4; 

  v4 = a1 % a3;
  if ( !a2 )
    return 1LL;
  if ( a2 == 1 )
    return a1 % a3;
  if ( !(a2 & 1) )
    return sub(v4 * v4 % a3, a2 / 2, a3) % a3;
  result = a2 % 2;
  if ( a2 % 2 == 1 )
    result = v4 * sub(v4, a2 - 1, a3) % a3;
  return result;
}

int main(void){
    __int64_t result = 0;
    char c[25]="give_me_the_flag_please";
    for(int j=0;j<23;j++){
        for(int i=0;i<200;i++){
            result = sub(i,0x71,0x8f);
            if(result == c[j]){
                printf("%d ",i);
                break;
            }
        }
    }
    return 0;
}