Çözüldü Tab A9+'a custom flash tool ile veri atılamıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Av2xnn

Centipat
Katılım
24 Temmuz 2024
Mesajlar
499
Makaleler
10
Çözümler
3
Daha fazla  
Cinsiyet
Erkek
Kendi flash toolumu yapmaya çalışıyorum, adı hela. Cihaz download moddayken, bilgisayar üzerinden hello ve beginsession ile sorunsuz bağlanabiliyorum ve bunun yanında requestpit çağrısını da cihaza yönlendiriyorum ama cihazdan bir türlü pit dosyasını alamıyorum, olmuyor. Tüm bunları art arda değil de tek seferde yapıyorum ve toplamı 512 byte olacak şekilde yapıyorum: 171 byte hello, 171 byte beginsession, 170 byte requestpit. Olabildiğince Heimdall’ı taklit etmeye çalışıyorum ama benim yapamadığım ne var, anlayamadım gerçekten. Endpoint’lerde herhangi bir sıkıntı yok, ben kendi deney yaptığım SM-N910C Note 4 cihazın endpoint’lerini doğru bir şekilde kullandığıma eminim. Tab A9+ cihazda da denedim ama onda hiç olmuyor. Fark ettiğim kadarıyla Tab A9+ sadece resmi Samsung Odin yazılımlarından veri kabul ediyor. Tab A9+’ta Heimdall ve Thor tool’u bile çalışmazken, Note 4 cihazda çalışıyor. C++ ile derleme yapıyorum ve Zorin OS kullanıyorum.

Kod:
#include <iostream>
#include <libusb-1.0/libusb.h>
#include <cstring>
#include <fstream>
#include <vector>
#include <unistd.h>

#define SAMSUNG_VID 0x04E8.
#define SAMSUNG_PID 0x685D.
#define OUT_EP 0x02.
#define IN_EP 0x81.
const int TIMEOUT = 10000;
const uint32_t SESSION_ID = 0xEE12AF5C;

void hela_combined_padded() {
 libusb_context* ctx = nullptr;
 libusb_device_handle* dev = nullptr;

 if (libusb_init(&ctx) != 0) {
 std::cerr << "libusb başlatılamadı!" << std::endl;
 return;
 }

 dev = libusb_open_device_with_vid_pid(ctx, SAMSUNG_VID, SAMSUNG_PID);
 if (!dev) {
 std::cerr << "Cihaz bulunamadı!" << std::endl;
 libusb_exit(ctx);
 return;
 }

 if (libusb_kernel_driver_active(dev, 0)) libusb_detach_kernel_driver(dev, 0);
 if (libusb_claim_interface(dev, 0) != 0) {
 std::cerr << "Arayüz alınamadı!" << std::endl;
 libusb_close(dev);
 libusb_exit(ctx);
 return;
 }

 libusb_set_interface_alt_setting(dev, 0, 0);
 std::cout << "🚀 Hela v0.6 (Tek 512B OUT, EndSession yok) başlıyor..." << std::endl;

 unsigned char full_block[512] = {0};

 // Hello - 171 byte.
 full_block[0] = 0x02;
 memcpy(full_block + 12, &SESSION_ID, 4);

 // BeginSession - 171 byte.
 full_block[171] = 0xA1;
 full_block[171 + 8] = 0x01;
 memcpy(full_block + 171 + 12, &SESSION_ID, 4);

 // RequestPIT - 170 byte.
 full_block[342] = 0xF7;
 full_block[342 + 8] = 0x02;
 memcpy(full_block + 342 + 12, &SESSION_ID, 4);

 int transferred;
 int res = libusb_bulk_transfer(dev, OUT_EP, full_block, 512, &transferred, TIMEOUT);
 if (res == 0 && transferred == 512)
 std::cout << "📤 512 byte (Hello+Begin+RequestPIT) gönderildi" << std::endl;
 else {
 std::cerr << "❌ Gönderim hatası. Kod: " << res << ", transfer: " << transferred << std::endl;
 libusb_release_interface(dev, 0);
 libusb_close(dev);
 libusb_exit(ctx);
 return;
 }

 std::vector<unsigned char> pit_data;
 unsigned char buffer[512];
 int actual_length = 0;

 for (int i = 0; i < 30; ++i) {
 res = libusb_bulk_transfer(dev, IN_EP, buffer, 512, &actual_length, TIMEOUT);
 if (res != 0 || actual_length == 0) break;
 pit_data.insert(pit_data.end(), buffer, buffer + actual_length);
 }

 if (!pit_data.empty()) {
 while (!pit_data.empty() && pit_data.back() == 0x00)
 pit_data.pop_back();
 std::ofstream out("hela.pit", std::ios::binary);
 out.write(reinterpret_cast<char*>(pit_data.data()), pit_data.size());
 out.close();
 std::cout << "✅ hela.pit başarıyla alındı!" << std::endl;
 } else {
 std::cerr << "❌ PIT alınamadı." << std::endl;
 }

 libusb_release_interface(dev, 0);
 libusb_reset_device(dev);
 libusb_close(dev);
 libusb_exit(ctx);
}

int main() {
 hela_combined_padded();
 return 0;
}
Kullanmak için bazı gereksinimlerde var.

Kod:
sudo apt install build-essential libusb-1.0-0-dev pkg-config

Yanlış anlamayın amacım burada hela yı tanıtmak değil yaşadığım sorun için yardım aramak.

@Crownguard @Umut Nas @Heribert Yavuz
Hocalarım siz bayağı biliyorsunuz bu konularda yardımcı olur musunuz?
 
Son düzenleyen: Moderatör:

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Yeni mesajlar

Geri
Yukarı