BMZCTF -- WP(12.26)


BMZCTF(12.26)

抽空做了一下,總體來說簡單。總共三道題。全做了

RE

1.逆向_RE1

image-20201231204156313

主函數如圖。

加密流程

輸入字符串-->異或-->取余-->異或

注意那個加密函數分析后發現是沒有起到作用的

直接爆破

腳本

   str=[0x4D5E21, 0x4D5E2B, 0x4D5E3E, 0x4D5E20, 0x4D5E54,
    0x4D5E1D,0x4D5E0A, 0x4D5E35, 0x4D5E1C, 0x4D5E33, 0x4D5E01, 0x4D5E38,
   0x4D5E0D, 0x4D5E22, 0x4D5E32, 0x4D5E22, 0x4D5E37, 0x4D5E2C,
  0x4D5E6C, 0x4D5E38, 0x4D5E6E, 0x4D5E2C, 0x4D5E38, 0x4D5E1C,
     0x4D5E28, 0x4D5E6F, 0x4D5E6E, 0x4D5E5A]
        flag=''
        for i in range(0, 28):
            for f in range(0,127):
              enc=f
              enc^=0x1A2B3C
              enc%=1714956
              enc^=0x4D5E6F
              if(enc==str[i]):
                  flag+=chr(f)
        print(flag)
#flag{BMZCTF_ReUeXs3_1s_Co01}

2.逆向_RE2

主函數

image-20201231210412007

先讀取字符串,傳進Auth函數,看返回值是否為1.若是則為flag

Auth函數

加密流程

切割字符串為三段-->每部分異或一個值-->每部分都傳進SboxExchangeX(X=A,B,C)進行類似表替換-->進行結果判斷

腳本

s1=[ 7,  5,  2, 4,
         3, 1,  6, 0,
         8]
s2=[2,     6,      0,    7,  4,
    5, 1,   3,   8]
s3=[ 3, 1,    6,
         0,   8,    5,
         2, 7,    4,  ]
sss1=[0x0C8E, 0x0C85, 0x0C87, 0x0C99, 0x0CA4, 0x0CD1, 0x0C83, 0x0C8E,0x0C84]
sss2=[0x0F9A, 0x0F8B, 0x0FA0, 0x0FCF, 0x0F8D, 0x0FA0, 0x0FB9, 0x0F9E,0x0FA0]
sss3=[0x48F, 0x499, 0x48F, 0x497, 0x4DD, 0x4B5, 0x49C, 0x482, 0x4B8]
ss1=[0]*9
ss2=[0]*9
ss3=[0]*9
flag1=''
flag2=''
flag3=''
for i in range(0,9):
    ss1[s1[i]]=sss1[i]^0xCE2
    ss2[s2[i]]=sss2[i]^0xFFF
    ss3[s3[i]]=sss3[i]^0x4EA
for i in range(0,9):
    flag1+=chr(ss1[i])
for i in range(0,9):
    flag2+=chr(ss2[i])
for i in range(0,9):
    flag3+=chr(ss3[i])
print(flag1[::-1]+flag2+flag3[::-1])
#flag{Fe3l_Fear_t0_7he_Revs}

3.逆向_RE2

是一道mobile的逆向題。

image-20201231213421798

查殼

image-20201231211049857

jadx分析

image-20201231211237017

image-20201231211351163

分析代碼可知,有簽名驗證,然后判斷點擊次數,達標就跳轉到另一Activity直接顯示flag。

(BUUOJ也有一道類似的題,那道題是直接改smali即可,這道題,因為加了簽名驗證,直接改,前面簽名驗證失敗而打開不了)

法一:直接逆算法

加密算法如下:

image-20201231211914231

簡單粗暴,直接扣出來直接逆(懶)

腳本

package com.re;

public class EasyJava {

    /* access modifiers changed from: protected */

    int[] wocaozheshisha(int[] unenc) {
        for (int b = 0; b <= 34; b++) {
            unenc[b + 1] = unenc[b] ^ unenc[b + 1];
        }
        return unenc;
    }
    public static void main (String[] args) {
        int[] encF = {4, 5, 30, 27, 9, 55, 56, 53, 43, 15, 70, 90, 85, 14, 25, 9, 78, 54, 83, 96, 25, 23, 19, 115, 25, 49, 77, 75, 29, 28, 4, 122, 96, 110, 56, 16};

        re3 re3 = new re3();
        re3.wocaozheshisha(re3.wocaozheshisha(re3.wocaozheshisha(encF)));
        byte[] e = "bmz".getBytes();
        int i = 0;
        while (true) {
            int[] iArr = encF;
            if (i > iArr.length - 1) {
                break;
            }
            iArr[i] = e[i % 3] ^ iArr[i];
            i++;
        }
        StringBuilder flag = new StringBuilder();

        for(int i2 = 0; i2 <= encF.length - 1; i2++) {
            flag.append((char) encF[i2]);
        }

    }
}

image-20201231212117790

//flag{Every0ne-0f-BMZCTF-1s-3he-Best}

法二:patch

方法:使用AndroidKiller直接在AndroidManifest.xml配置文件修改默認啟動項。(不啟動那個頁面即不會進行簽名驗證,從而達到我們的目的。)

修改前

image-20201231213141981

修改后

image-20201231213103933

直接給flag

image-20201231213341158

法三:
連點器?


免責聲明!

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



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