본문 바로가기

CTF

ApoorvCTF 2025 - [AI] Pokédex Neural Network Write Up

728x90

 

Professor Oak, the renowned Pokémon researcher, has developed an advanced Pokédex upgrade that utilizes neural networks to classify Pokémon types. However, a mishap caused by an overexcited Pikachu has disrupted crucial data files, leaving the system in chaos. Now, trainers must step up to the challenge—training a CNN model to restore order and complete the classifier, ensuring the Pokédex can once again identify Pokémon with precision.

For further details, access the PDF. Heads up!! It's password protected. The password is the name of the pokemon Ash first captured. Good Luck Trainer !!!

 

 

 

Dataset.z01
19.53MB
Dataset.zip
3.82MB

 

 

HiTrainer_protected.pdf
0.13MB
core_dump.txt
0.00MB

 

 

 

 

Google Search

 

PDF password Check

 

 

core_dump.txt 

base64 decoding

 

 

PokemonCNN
├── Initial Input: (256, 256, 4)

├── Feature Extraction Layers
│   ├── Conv2D (4->32)
│   ├── BatchNorm2D 
│   ├── ReLU Activation
│   ├── MaxPool2D(K Size = 3)
│   ├── Dropout (p=0.25)

├── Deeper Processing
│   ├── Conv2D(32->64)
│   ├── BatchNorm2D (64)
│   ├── ReLU Activation
│   ├── MaxPool2D(K Size = 3)
│   ├── Dropout (p=0.25)

├── More Feature Extraction
│   ├── Conv2D(64->128)
│   ├── BatchNorm2D
│   ├── ReLU Activation
│   ├── MaxPool2D(K Size = 3)
│   ├── Dropout (p=0.25)

├── Fully Connected Layers
│   ├── Flatten
│   ├── Linear (512 Neurons)
│   ├── BatchNorm1D
│   ├── Dropout (p=0.5)
│   ├── Linear
│   ├── Softmax Activation

└── Output: 18 classes

 

 

 

PDF Contents

Welcome, Pokémon Trainer!   Hello there! Welcome to the world of Pokémon! ⚡ I’m Professor Oak, the leading Pokémon researcher, and I’ve been working on an advanced Pokédex upgrade that can automatically classify Pokémon types using cutting-edge neural networks. This breakthrough could revolutionize how trainers understand their Pokémon! BUT… there’s been a slight hiccup in the lab.  My Pikachu got a little too excited and—well, let’s just say a few crucial data files were shocked into oblivion. ⚡💥 Now, the entire system is scrambled, and I need your help to restore order and complete the classifier! Your mission: Train a CNN model to classify Pokémon by type and help me get the Pokédex back on track. Are you up for the challenge, Trainer? Let’s GO!  🎮 Notebook link: https://www.kaggle.com/code/gl3mon/apoorvquestion Dataset link: https://www.kaggle.com/datasets/gl3mon/apoorvctf

 

 

 

kaggle sign up

 

Greetings, Trainer!

I am Professor Oak, and I’m working on an exciting new upgrade for the Pokédex!

For years, the Pokédex has relied on manual data entry and preprogrammed knowledge to classify Pokémon types. But I believe it’s time for an upgrade—a smarter, more advanced system that can instantly recognize a Pokémon’s type just by looking at it!

To make this happen, I’m developing a powerful new Pokédex feature using Convolutional Neural Networks (CNNs). With this, the Pokédex will be able to analyze Pokémon images and determine their type with incredible accuracy. But I need the help of skilled trainers like you to fine-tune this cutting-edge technology!

Your mission:

Make sure you have imported the dataset required for training the model.

Train and refine the CNN model for Pokémon type classification.

Make sure you use the GPU T4x2 Accelerator to train the model.

Optimize its performance to make the Pokédex faster and smarter.

Help revolutionize Pokémon research with this groundbreaking upgrade!

Are you ready to be part of Pokédex history? Let’s get started! 🚀🔍

 

 

 

 

 

Personal mobile phone verification 

 

 

Next -> Gemma Download Use Agree

 

Accelerator GPU T4 x2  Active

 

Accelerator GPU T4 x2  Use Check

 

seed hint

 

 

seed setting

 

Question 1:  6

 

 

Next ->  Data Set

 

class CTFDataset(Dataset):
    def __init__(self, annotation_file, img_dir, transform = None, target_transform = None):
        self.img_labels = pd.read_csv(annotation_file, index_col=0)
        self.label_mapping = {
            'Bug': 0, 'Dark': 1, 'Dragon': 2, 'Electric': 3, 'Fairy': 4,
            'Fighting': 5, 'Fire': 6, 'Flying': 7, 'Ghost': 8, 'Grass': 9,
            'Ground': 10, 'Ice': 11, 'Normal': 12, 'Poison': 13, 'Psychic': 14,
            'Rock': 15, 'Steel': 16, 'Water': 17
        }
        self.img_labels['class'] = self.img_labels['type'].map(self.label_mapping)
        self.img_dir = img_dir
        self.transform = transform
        self.target_transform = target_transform

    def __len__(self):
        return len(self.img_labels)

    def __getitem__(self, idx):
        img_path = os.path.join(self.img_dir, self.img_labels.iloc[idx]['type'], f'{self.img_labels.iloc[idx]["pkn"]}'+'.png')
        image = None
        try:
            image = read_image(img_path).to(pt.float32)
        except:
            image = pt.zeros(4, 256, 256)
        label = self.img_labels.iloc[idx]['class']
        if self.transform:
            image = self.transform(image)
        if self.target_transform:
                label = self.target_transform(label)
        return image, label

 

ds = CTFDataset(
    annotation_file = '/kaggle/input/d/redchupa/apoorvctf/label.csv',
    img_dir = '/kaggle/input/d/redchupa/apoorvctf/images',
)

 

 

File Upload

 

 

 

 

 

hint: kernel_size=2

img format 

 

 

 

 

Initial Input: (256, 256, 4)

class PokemonCNN(nn.Module):
    def __init__(self):
        super().__init__()
        # 256 256 4
        self.conv1 = nn.Conv2d(4, 32, kernel_size=2) # 255 255 32
        self.bn1 = nn.BatchNorm2d(32)
        self.relu = nn.ReLU()
        self.pool = nn.MaxPool2d(kernel_size=3) # 85 85 32
        self.drop1 = nn.Dropout(0.25)

        self.conv2 = nn.Conv2d(32, 64, kernel_size=2) # 84 84 64
        self.bn2 = nn.BatchNorm2d(64)
        self.relu2 = nn.ReLU()
        self.pool2 = nn.MaxPool2d(kernel_size=3) # 28 28 64
        self.drop2 = nn.Dropout(0.25)

        self.conv3 = nn.Conv2d(64, 128, kernel_size=2) # 27 27 128
        self.bn3 = nn.BatchNorm2d(128)
        self.relu3 = nn.ReLU()
        self.pool3 = nn.MaxPool2d(kernel_size=3) # 9 9 128
        self.drop3 = nn.Dropout(0.25)

        self.flatten = nn.Flatten()
        self.fc1 = nn.Linear(10368, 512)
        self.bn4 = nn.BatchNorm1d(512)
        self.drop4 = nn.Dropout(0.5)
        self.fc2 = nn.Linear(512, 18)
        self.softmax = nn.Softmax()

    def forward(self, x):
        x = self.pool(F.relu(self.bn1(self.conv1(x))))
        x = self.drop1(x)

        x = self.pool(F.relu(self.bn2(self.conv2(x))))
        x = self.drop2(x)

        x = self.pool(F.relu(self.bn3(self.conv3(x))))
        x = self.drop3(x)

        x = self.flatten(x)
        x = self.fc1(x)
        x = self.bn4(x)
        x = self.drop4(x)
        x = self.fc2(x)
        x = self.softmax(x)
        return x

 

 

Conv2d Analyze

 

 

 

 

 

MaxPool2d Analyze

 

 

 

 

 

 

Question 2:  9 * 9 * 128 = 10368

 

 

 

Training Start

 

 

 

 

 

Question 3,4

 

 

netcat use

 

 

 

 


Reference

 

ApoorvCTF 2025

ApoorvCTF 2025 has ended ×

apoorvctf.iiitkottayam.ac.in

 

 

CSYClubIIITK/CTF-Writeups · GitHub

 

CTF-Writeups/ApoorvCTF-25-Writeups at main · CSYClubIIITK/CTF-Writeups

This is a repository for all the writeups of CTFs organized by us. - CSYClubIIITK/CTF-Writeups

github.com

 

 

 

 

 

If there is a copyright issue with my writing, please request it in the comments and I will edit or delete it.

728x90
오리온 비쵸비 비스켓 5p, 125g, 1개 코메드 서랍장 CMD-602 (6칸), 1개 아이클리어 루테인지아잔틴, 30정, 3박스 세인 멀티테스터기 UK 831LN, 1개 피크미터 비접촉식 검전기 고급형, 1개 지엠지 웜그립 터치 방수 방한 안전장갑 L2005WS, 1개 알파오 무탈피 순간접속 커넥터 IT-44(전선규격 2.0-2.5sqmm) 10개 구글 네스트 허브 맥스, 차콜 삼정 국산 AC 8자 백색 코드 화이트 전원케이블, 3m, 1개 접착식 다용도 스티커 홀더, 투명, 10개 벡셀 아이프라임 알카라인 AAA건전지, 20개입, 1개 엘가토 스트림덱 네오 8Key 매크로 커스터마이징 StreamDeck-Neo