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.
Kullanmak için bazı gereksinimlerde var.
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?
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;
}
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: