日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk

發布時間:2025/3/15 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[攻防世界]mobile新手練習區easy-apk

easy-apk最佳Writeup由129師386旅獨立團 ? devi1提供

難度系數: 7.0

題目來源: 暫無

題目描述:無

題目場景: 暫無

題目附件: 附件1

反編譯后有用的附件內容:

MainActivity.class
Base64New.classpackage com.testjava.jack.pingan1;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast;public class MainActivityextends AppCompatActivity {protected void onCreate(Bundle paramBundle){super.onCreate(paramBundle);setContentView(2130968603);((Button)findViewById(2131427446)).setOnClickListener(new View.OnClickListener(){public void onClick(View paramAnonymousView){paramAnonymousView = ((EditText)MainActivity.this.findViewById(2131427445)).getText().toString();if (new Base64New().Base64Encode(paramAnonymousView.getBytes()).equals("5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=")) {Toast.makeText(MainActivity.this, "驗證通過!", 1).show();}for (;;){return;Toast.makeText(MainActivity.this, "驗證失敗!", 1).show();}}});} }package com.testjava.jack.pingan1;public class Base64New {private static final char[] Base64ByteToStr = { 118, 119, 120, 114, 115, 116, 117, 111, 112, 113, 51, 52, 53, 54, 55, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 121, 122, 48, 49, 50, 80, 81, 82, 83, 84, 75, 76, 77, 78, 79, 90, 97, 98, 99, 100, 85, 86, 87, 88, 89, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 56, 57, 43, 47 };private static final int RANGE = 255;private static byte[] StrToBase64Byte = new byte['?'];public String Base64Encode(byte[] paramArrayOfByte){StringBuilder localStringBuilder = new StringBuilder();for (int i = 0; i <= paramArrayOfByte.length - 1; i += 3){byte[] arrayOfByte = new byte[4];int j = 0;int k = 0;if (k <= 2){if (i + k <= paramArrayOfByte.length - 1) {arrayOfByte[k] = ((byte)(byte)((paramArrayOfByte[(i + k)] & 0xFF) >>> k * 2 + 2 | j));}for (j = (byte)(((paramArrayOfByte[(i + k)] & 0xFF) << (2 - k) * 2 + 2 & 0xFF) >>> 2);; j = 64){k++;break;arrayOfByte[k] = ((byte)j);}}arrayOfByte[3] = ((byte)j);j = 0;if (j <= 3){if (arrayOfByte[j] <= 63) {localStringBuilder.append(Base64ByteToStr[arrayOfByte[j]]);}for (;;){j++;break;localStringBuilder.append('=');}}}return localStringBuilder.toString();} }

解題

拿到附件989ca07c3f90426fa05406e4369901ff.apk,flag一定要反編譯。博主用的ApkIDE進行反編譯。先找到入口主類MainActivity,發現有很明顯的比較函數,字符串是5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=,又看到Base64Encode(paramAnonymousView.getBytes()),立馬進行Base64進行解碼得到江????!?岠??葓滀,明顯不是flag,仔細一看是new Base64New().Base64Encode(paramAnonymousView.getBytes()),所以找到Base64New(),果然碼表不一樣。拿到碼表,可根據新的碼表進行計算。具體如下。

題目:flag->ASCII->base編碼->Unicode編碼->base編碼。

解題:base解碼->Unicode解碼->base解碼->對照ASCII得出flag

代碼的實現

博主也找了base64相關的代碼實現,如下。

#查看碼表 tables = [118, 119, 120, 114, 115, 116, 117, 111, 112, 113, 51, 52, 53, 54, 55, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 121, 122, 48, 49, 50, 80, 81, 82, 83, 84, 75, 76, 77, 78, 79, 90, 97, 98, 99, 100, 85, 86, 87, 88, 89, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 56, 57, 43, 47] flag = "" for i in tables:flag += chr(i); print(flag)//輸出的碼表
vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/

Golang版本,可編碼表Base64

package mainimport ("encoding/base64""fmt" )const (base64Table = "vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/" )var coder = base64.NewEncoding(base64Table)func base64Encode(src []byte) []byte {return []byte(coder.EncodeToString(src)) }func base64Decode(src []byte) ([]byte, error) {return coder.DecodeString(string(src)) }func main() {str := "5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs="// decode enbyte, err := base64Decode([]byte(str))if err != nil {fmt.Println(err.Error())}fmt.Println(string(enbyte)) }

python

#調用base64模型 import base64table_tmp = [ 118, 119, 120, 114, 115, 116, 117, 111, 112, 113, 51, 52, 53, 54, 55, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 121, 122, 48, 49, 50, 80, 81, 82, 83, 84, 75, 76, 77, 78, 79, 90, 97, 98, 99, 100, 85, 86, 87, 88, 89, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 56, 57, 43, 47 ] table_original = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' table_tmp_str = '' str1 = '5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=' for i in table_tmp:table_tmp_str += chr(i) print(table_tmp_str) print(base64.b64decode(str1.translate(str.maketrans(table_tmp_str, table_original)).encode('utf-8')))#實現了base64 #來自https://blog.csdn.net/qq_42967398/article/details/101778364# coding:utf-8s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" #s = "vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/"def My_base64_encode(inputs):# 將字符串轉化為2進制bin_str = []for i in inputs:x = str(bin(ord(i))).replace('0b', '')bin_str.append('{:0>8}'.format(x))#print(bin_str)# 輸出的字符串outputs = ""# 不夠三倍數,需補齊的次數nums = 0while bin_str:#每次取三個字符的二進制temp_list = bin_str[:3]if(len(temp_list) != 3):nums = 3 - len(temp_list)while len(temp_list) < 3:temp_list += ['0' * 8]temp_str = "".join(temp_list)#print(temp_str)# 將三個8字節的二進制轉換為4個十進制temp_str_list = []for i in range(0,4):temp_str_list.append(int(temp_str[i*6:(i+1)*6],2))#print(temp_str_list)if nums:temp_str_list = temp_str_list[0:4 - nums]for i in temp_str_list:outputs += s[i]bin_str = bin_str[3:]outputs += nums * '='print("Encrypted String:n%s "%outputs)def My_base64_decode(inputs):# 將字符串轉化為2進制bin_str = []for i in inputs:if i != '=':x = str(bin(s.index(i))).replace('0b', '')bin_str.append('{:0>6}'.format(x))#print(bin_str)# 輸出的字符串outputs = ""nums = inputs.count('=')while bin_str:temp_list = bin_str[:4]temp_str = "".join(temp_list)#print(temp_str)# 補足8位字節if(len(temp_str) % 8 != 0):temp_str = temp_str[0:-1 * nums * 2]# 將四個6字節的二進制轉換為三個字符for i in range(0,int(len(temp_str) / 8)):outputs += chr(int(temp_str[i*8:(i+1)*8],2))bin_str = bin_str[4:] print("Decrypted String:n%s "%outputs)print() print(" *************************************") print(" * (1)encode (2)decode *") print(" *************************************") print()num = input("Please select the operation you want to perform:n") if(num == "1"):input_str = input("Please enter a string that needs to be encrypted: n")My_base64_encode(input_str) else:input_str = input("Please enter a string that needs to be decrypted: n")My_base64_decode(input_str)

如此就可以得到flag

05397c42f9b6da593a3644162d36eb01 flag{05397c42f9b6da593a3644162d36eb01}

話說這個題目有點坑,就是沒有提示flag的形式,必須裹上flag{}才可以。提交完成后看評論,都在說這題目坑。

什么是Base64呢(百度百科)

Base64是網絡上最常見的用于傳輸8Bit字節碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進制數據的方法??刹榭碦FC2045~RFC2049,上面有MIME的詳細規范。

Base64編碼是從二進制到字符的過程,可用于在HTTP環境下傳遞較長的標識信息。采用Base64編碼具有不可讀性,需要解碼后才能閱讀。

Base64由于以上優點被廣泛應用于計算機的各個領域,然而由于輸出內容中包括兩個以上“符號類”字符(+, /, =),不同的應用場景又分別研制了Base64的各種“變種”。為統一和規范化Base64的輸出,Base62x被視為無符號化的改進版本。

博主認為對于base64的變種來說,就是轉換表和填充符號的區別,基本原理都是大同小異的。所以拿到編碼后,要搞清楚轉換表才是關鍵。

附錄:

base64_百度百科

python編寫base64加解密腳本(可變換碼表)_python_A_dmin的博客-CSDN博客

第31天:攻防世界-Mobile-easy-apk_J1nX的博客-CSDN博客

練習區easy-apk_移動開發_kjcxmx的博客-CSDN博客

總結

以上是生活随笔為你收集整理的攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。