Skip to content

Commit 534e589

Browse files
committed
Merge pull request #57 from bgK/make_self_fix
Fix make_self for the newer firmwares
2 parents a8bb7c8 + 5b7a4e8 commit 534e589

2 files changed

Lines changed: 8 additions & 24 deletions

File tree

tools/geohot/include/self.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,11 @@ typedef struct {
8686
typedef struct {
8787
u64 segment_offset;
8888
u64 segment_size;
89-
u32 segment_crypt_flag;
89+
u32 segment_type;
9090
u32 segment_number;
91-
u32 unknown2;
91+
u32 segment_hashed_flag;
9292
u32 segment_sha1_index;
93-
u32 unknown3;
93+
u32 segment_encrypted_flag;
9494
u32 segment_erk_index;
9595
u32 segment_riv_index;
9696
u32 segment_compressed_flag;

tools/geohot/make_self.c

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -185,26 +185,14 @@ void enumerate_segments() {
185185

186186
memset(segment_ptr, 0, sizeof(Self_Segment));
187187

188-
// these are choices you can make
189-
/*segment_ptr->compressed = (i<2);
190-
segment_ptr->incrypt = (i<6); // **TESTING
191-
segment_ptr->encrypted = (i<5);*/
188+
segment_ptr->rlen = get_u64(&(elf_segment->p_filesz));
192189

193-
#ifdef NPDRM
194-
segment_ptr->encrypted = (i<5);
195-
segment_ptr->compressed = (i<4);
196-
segment_ptr->incrypt = (i<7);
197-
#else
198190
segment_ptr->encrypted = 1;
199-
segment_ptr->compressed = 1;
191+
segment_ptr->compressed = segment_ptr->rlen != 0;
200192
segment_ptr->incrypt = 1;
201-
#endif
202193

203194
set_u32(&(segment_ptr->enc_segment.segment_number), i);
204195

205-
set_u32(&(segment_ptr->enc_segment.unknown2), 2);
206-
set_u32(&(segment_ptr->enc_segment.unknown3), 3);
207-
208196
mpz_urandomb(hmac, r_state, 512);
209197
mpz_export(segment_ptr->crypt_segment.hmac, &countp, 1, 0x40, 1, 0, hmac);
210198

@@ -215,8 +203,6 @@ void enumerate_segments() {
215203
mpz_export(segment_ptr->crypt_segment.riv, &countp, 1, 0x10, 1, 0, riv);
216204
}
217205

218-
segment_ptr->rlen = get_u64(&(elf_segment->p_filesz));
219-
220206
u32 in_data_offset = get_u64(&(elf_segment->p_offset));
221207
u8* in_data = &input_elf_data[in_data_offset];
222208

@@ -252,7 +238,9 @@ void enumerate_segments() {
252238
//hexdump((u8*)elf_segment, sizeof(Elf64_Phdr));
253239

254240
set_u64(&(segment_ptr->enc_segment.segment_size), segment_ptr->len);
255-
set_u32(&(segment_ptr->enc_segment.segment_crypt_flag), 1+segment_ptr->encrypted);
241+
set_u32(&(segment_ptr->enc_segment.segment_type), 2);
242+
set_u32(&(segment_ptr->enc_segment.segment_hashed_flag), 2);
243+
set_u32(&(segment_ptr->enc_segment.segment_encrypted_flag), segment_ptr->encrypted ? 3 : 1);
256244
set_u32(&(segment_ptr->enc_segment.segment_compressed_flag), 1+segment_ptr->compressed);
257245

258246
set_u64(&(segment_ptr->pmhdr.pm_size), segment_ptr->len);
@@ -494,10 +482,6 @@ int main(int argc, char* argv[]) {
494482
// 0x*** -- Self_SDKversion
495483
set_u64(&(output_extended_self_header.e_svoff), running_size);
496484
add_file_section(&sdkversion, sizeof(sdkversion));
497-
// 0x*** -- ???
498-
#ifdef NPDRM
499-
add_file_section(zero_padding, 0x20);
500-
#endif
501485
// 0x*** -- Self_Cflags
502486
set_u64(&(output_extended_self_header.e_cfoff), running_size);
503487
add_file_section(&cflags, sizeof(cflags));

0 commit comments

Comments
 (0)