From 93d66b893b998973ddb1f8fa050d542b93469bb6 Mon Sep 17 00:00:00 2001 From: CLARATION Date: Sun, 28 Jun 2026 17:14:49 -0700 Subject: [PATCH] refactor: ui improvements refactor: ui improvements fix(build): missing include :/ refactor: type conversions --- images/logo.png | Bin 7879 -> 6718 bytes src/m8/dfu.c | 13 +---------- src/m8/dfu.h | 2 +- src/m8/payload.c | 6 +++--- src/m8/payload.h | 4 ++-- src/m8/run.c | 1 + src/main.cpp | 2 ++ src/utils.c | 4 ++-- src/wx/DfuPanel.cpp | 4 ++-- src/wx/ExploitPanel.cpp | 2 +- src/wx/MainPanel.cpp | 45 +++++++++++++++++++++++++++++++++++---- src/wx/RecoveryPanel.cpp | 4 ++-- src/wx/SettingsPanel.cpp | 2 +- 13 files changed, 59 insertions(+), 30 deletions(-) diff --git a/images/logo.png b/images/logo.png index 643d8a48d9932e396489852159068d84a6538ea6..29020e5cab19c9ac844950f30d0ac12929bd3268 100644 GIT binary patch delta 6268 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 #include -int dfu_serial_number_get_cpid(char *serial) { +uint16_t dfu_serial_number_get_cpid(char *serial) { char *cpid = strstr(serial, "CPID:"); if (cpid == NULL) { return -1; } return strtol(cpid + 5, NULL, 16); } -int dfu_serial_number_get_bdid(char *serial) { - char *bdid = strstr(serial, "BDID:"); - if (bdid == NULL) { return -1; } - return strtol(bdid + 5, NULL, 16); -} - bool dfu_serial_number_is_in_dfu_mode(char *serial) { char *DFU = strstr(serial, "SRTG"); return DFU != NULL; @@ -31,8 +25,3 @@ bool dfu_serial_number_is_in_yolo_dfu(char *serial) { char *yolo = strstr(serial, "YOLO"); return yolo != NULL; } - -bool device_serial_number_is_in_pongo_os(char *serial) { - char *pongo = strstr(serial, "SRTG:[PongoOS"); - return pongo != NULL; -} diff --git a/src/m8/dfu.h b/src/m8/dfu.h index 5714178..4214b00 100644 --- a/src/m8/dfu.h +++ b/src/m8/dfu.h @@ -22,7 +22,7 @@ extern "C" { #endif -int dfu_serial_number_get_cpid(char *serial); +uint16_t dfu_serial_number_get_cpid(char *serial); bool dfu_serial_number_is_in_dfu_mode(char *serial); bool dfu_serial_number_is_pwned(char *serial); bool dfu_serial_number_is_in_yolo_dfu(char *serial); diff --git a/src/m8/payload.c b/src/m8/payload.c index dd32323..ad87785 100644 --- a/src/m8/payload.c +++ b/src/m8/payload.c @@ -15,7 +15,7 @@ #include "../gen/payloads/yolo_t8015.h" bool checkm8_find_device_configuration_for_cpid( - int cpid, + uint16_t cpid, struct DeviceConfiguration *config) { bool foundMatchingConfiguration = true; @@ -58,7 +58,7 @@ bool checkm8_find_device_configuration_for_cpid( } bool checkm8_find_payload_configuration_for_cpid( - int cpid, + uint16_t cpid, struct PayloadConfiguration *config) { bool foundMatchingConfiguration = true; @@ -258,4 +258,4 @@ void create_pongo_payload_for_device( } LOG("Failed to prepare payload for device with CPID 0x%x.", cpid); -} \ No newline at end of file +} diff --git a/src/m8/payload.h b/src/m8/payload.h index a561329..654f6ac 100644 --- a/src/m8/payload.h +++ b/src/m8/payload.h @@ -44,8 +44,8 @@ typedef struct { size_t len; } yolo_payload_t; -bool checkm8_find_device_configuration_for_cpid(int cpid, struct DeviceConfiguration *config); -bool checkm8_find_payload_configuration_for_cpid(int cpid, struct PayloadConfiguration *config); +bool checkm8_find_device_configuration_for_cpid(uint16_t cpid, struct DeviceConfiguration *config); +bool checkm8_find_payload_configuration_for_cpid(uint16_t cpid, struct PayloadConfiguration *config); void create_pongo_payload_for_device(uint16_t cpid, const uint8_t **payload, size_t *payloadSize); #endif // PAYLOAD_H diff --git a/src/m8/run.c b/src/m8/run.c index 8bfb9fe..418823c 100644 --- a/src/m8/run.c +++ b/src/m8/run.c @@ -7,6 +7,7 @@ #include #include #include +#include #include "../utils.h" #include "../globals.h" diff --git a/src/main.cpp b/src/main.cpp index 31e66be..624fbe0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -128,6 +128,8 @@ void parse_arguments(int argc, char* argv[]) { } else { palerain_flags &= ~palerain_option_cli; palerain_flags |= palerain_option_gui; + // xcode doesn't know how to display colors + palerain_flags |= palerain_option_no_colors; } # endif #else diff --git a/src/utils.c b/src/utils.c index 9cbbd02..7400740 100644 --- a/src/utils.c +++ b/src/utils.c @@ -55,11 +55,11 @@ void log_write(log_level_t level, const char *fmt, ...) { snprintf(tag_buf, sizeof(tag_buf), "<%s>", level_name(level)); if (palerain_flags & palerain_option_no_colors) { - printf(" %s%-9s%s [%s%s%s] => ", + printf(" %s%9s%s [%s%s%s] => ", "", tag_buf, "", "", get_timestamp(), ""); } else { - printf(" %s%-9s%s [%s%s%s] => ", + printf(" %s%9s%s [%s%s%s] => ", level_color(level), tag_buf, RESET_COLOR, GRAY_COLOR, get_timestamp(), RESET_COLOR); } diff --git a/src/wx/DfuPanel.cpp b/src/wx/DfuPanel.cpp index 5f0948b..5fe7214 100644 --- a/src/wx/DfuPanel.cpp +++ b/src/wx/DfuPanel.cpp @@ -90,8 +90,8 @@ DfuPanel::DfuPanel(MainFrame* frame, wxWindow* parent) auto* bottomRow = new wxBoxSizer(wxHORIZONTAL); bottomRow->AddStretchSpacer(); - bottomRow->Add(m_backButton, 0, wxALL, 10); - bottomRow->Add(m_startButton, 0, wxALL, 10); + bottomRow->Add(m_backButton, 0, wxALL, 12); + bottomRow->Add(m_startButton, 0, wxALL, 12); root->Add(bottomRow, 0, wxEXPAND); diff --git a/src/wx/ExploitPanel.cpp b/src/wx/ExploitPanel.cpp index aef64d4..c39e372 100644 --- a/src/wx/ExploitPanel.cpp +++ b/src/wx/ExploitPanel.cpp @@ -67,7 +67,7 @@ ExploitPanel::ExploitPanel(MainFrame* frame, wxWindow* parent) root->Add(m_progressBar, 0, wxALL | wxEXPAND, 20); root->AddStretchSpacer(); - root->Add(m_backButton, 0, wxALL | wxALIGN_RIGHT, 10); + root->Add(m_backButton, 0, wxALL | wxALIGN_RIGHT, 12); SetSizer(root); } diff --git a/src/wx/MainPanel.cpp b/src/wx/MainPanel.cpp index 7716ce1..d70b27c 100644 --- a/src/wx/MainPanel.cpp +++ b/src/wx/MainPanel.cpp @@ -3,6 +3,7 @@ #include "MainPanel.hpp" #include +#include #include #include #include @@ -60,10 +61,46 @@ MainPanel::MainPanel(MainFrame* frame, wxWindow* parent) "Made by: asdfugil, kok3shidoll, C, mineek, nekohaxx, plooshi, staturnz\n\n" "Thanks to: llsc12, itsnebulalol, lrdsnow, kirb, ehilwyma opa334, 0x7ff,\n" "sbingner, nikias (libimobiledevice), Checkra1n (Siguza, axi0mx, littlelailo\n" - "et al.), Procursus (Hayden Seay, Cameron Katri, Keto et al.)\n\n" - "With <3 from C (claration)"); + "et al.), Procursus (Hayden Seay, Cameron Katri, Keto et al.)" + ); + + auto* credrow = new wxBoxSizer(wxHORIZONTAL); + auto* lovetext = new wxStaticText(this, wxID_ANY, + #ifdef __APPLE__ + "With 💖 from C (claration)" + #else + "With <3 from C (claration)" + #endif + ); + + auto* link1 = new wxStaticText(this, wxID_ANY, "@palera1n"); + auto* link2 = new wxStaticText(this, wxID_ANY, "https://palera.in"); + + link1->SetForegroundColour(wxColour(0, 120, 215)); + link2->SetForegroundColour(wxColour(0, 120, 215)); + + link1->SetCursor(wxCursor(wxCURSOR_HAND)); + link2->SetCursor(wxCursor(wxCURSOR_HAND)); + + link1->Bind(wxEVT_LEFT_DOWN, [](wxMouseEvent&) { + wxLaunchDefaultBrowser("https://twitter.com/intent/follow?screen_name=palera1n"); + }); + + link2->Bind(wxEVT_LEFT_DOWN, [](wxMouseEvent&) { + wxLaunchDefaultBrowser("https://palera.in"); + }); + + credrow->Add(lovetext, 0, wxALIGN_BOTTOM | wxLEFT, 0); + credrow->AddStretchSpacer(); + + auto* linkSizer = new wxBoxSizer(wxVERTICAL); + linkSizer->Add(link1, 0, wxALIGN_RIGHT | wxBOTTOM, 0); + linkSizer->Add(link2, 0, wxALIGN_RIGHT); + + credrow->Add(linkSizer, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxRIGHT, 0); root->Add(credtext, 0, wxLEFT | wxRIGHT, 10); + root->Add(credrow, 0, wxEXPAND | wxLEFT | wxRIGHT, 10); root->Add(new wxStaticLine(this), 0, wxEXPAND | wxALL, 10); @@ -119,8 +156,8 @@ MainPanel::MainPanel(MainFrame* frame, wxWindow* parent) auto* bottomRow = new wxBoxSizer(wxHORIZONTAL); bottomRow->AddStretchSpacer(); bottomRow->Add(quickMode, 0, wxRIGHT | wxTOP, 1); - bottomRow->Add(optionsButton, 0, wxRIGHT | wxLEFT | wxBOTTOM, 10); - bottomRow->Add(m_startButton, 0, wxRIGHT | wxLEFT | wxBOTTOM, 10); + bottomRow->Add(optionsButton, 0, wxRIGHT | wxLEFT | wxBOTTOM, 12); + bottomRow->Add(m_startButton, 0, wxRIGHT | wxLEFT | wxBOTTOM, 12); root->Add(bottomRow, 0, wxEXPAND); diff --git a/src/wx/RecoveryPanel.cpp b/src/wx/RecoveryPanel.cpp index fc456b1..bdfbe06 100644 --- a/src/wx/RecoveryPanel.cpp +++ b/src/wx/RecoveryPanel.cpp @@ -61,8 +61,8 @@ RecoveryPanel::RecoveryPanel(MainFrame* frame, wxWindow* parent) auto* bottomRow = new wxBoxSizer(wxHORIZONTAL); bottomRow->AddStretchSpacer(); - bottomRow->Add(m_backButton, 0, wxALL, 10); - bottomRow->Add(m_nextButton, 0, wxALL, 10); + bottomRow->Add(m_backButton, 0, wxALL, 12); + bottomRow->Add(m_nextButton, 0, wxALL, 12); root->AddStretchSpacer(); root->Add(bottomRow, 0, wxEXPAND); diff --git a/src/wx/SettingsPanel.cpp b/src/wx/SettingsPanel.cpp index 2c5d9ac..e450f92 100644 --- a/src/wx/SettingsPanel.cpp +++ b/src/wx/SettingsPanel.cpp @@ -95,7 +95,7 @@ SettingsPanel::SettingsPanel(MainFrame* frame, wxWindow* parent) auto* bottomRow = new wxBoxSizer(wxHORIZONTAL); bottomRow->AddStretchSpacer(); - bottomRow->Add(back, 0, wxALL, 10); + bottomRow->Add(back, 0, wxALL, 12); root->Add(bottomRow, 0, wxEXPAND);