The iPhone Wiki is no longer updated. Visit this article on The Apple Wiki for current information. |
Difference between revisions of "DFU 0x1227"
(→Code) |
m (→Code: optimized code) |
||
Line 5: | Line 5: | ||
==Code== |
==Code== |
||
+ | int ???(???) |
||
− | hexdump(fbuf, usb_control_msg(idev, 0x80, 6, 0x200, 0, fbuf, 0x100, 1000)); |
||
+ | { |
||
− | printf("WTF: "); |
||
+ | hexdump(fbuf, usb_control_msg(idev, 0x80, 6, 0x200, 0, fbuf, 0x100, 1000)); |
||
− | fgets(buf, 100, stdin); |
||
+ | printf("WTF: "); |
||
− | buf[strlen(buf) - 1] = 0; |
||
− | + | fgets(buf, 100, stdin); |
|
− | + | buf[strlen(buf) - 1] = 0; |
|
− | + | FILE *f = fopen(buf, "rb"); |
|
− | + | int s = 0; |
|
− | + | int c = 0; |
|
− | + | if (f <= 0) |
|
− | { |
||
− | s = fread(fbuf, 1, 0x800, f); |
||
− | if (usb_control_msg(idev, 0x21, 1, c, 0, fbuf, s, 1000) == s) |
||
− | { |
||
− | printf("."); |
||
− | } |
||
− | else |
||
− | { |
||
− | printf("x"); |
||
− | } |
||
− | if (usb_control_msg(idev, 0xA1, 3, 0, 0, fbuf, 6, 1000) != 6|| fbuf[4] != 5) |
||
− | { |
||
− | printf("%d", fbuf[4]); |
||
− | } |
||
− | c++; |
||
− | } while (s > 0); |
||
− | printf("\n"); |
||
− | usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000); |
||
− | hexdump(buf, 6); |
||
− | usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000); |
||
− | hexdump(buf, 6); |
||
− | usb_reset(idev); |
||
− | fclose(f); |
||
− | } |
||
− | else |
||
{ |
{ |
||
printf("file not found\n"); |
printf("file not found\n"); |
||
+ | system("PAUSE"); |
||
+ | return 0; |
||
} |
} |
||
+ | do |
||
+ | { |
||
+ | s = fread(fbuf, 1, 0x800, f); |
||
+ | if (usb_control_msg(idev, 0x21, 1, c, 0, fbuf, s, 1000) == s) |
||
+ | { |
||
+ | printf("."); |
||
+ | } |
||
+ | else |
||
+ | { |
||
+ | printf("x"); |
||
+ | } |
||
+ | if (usb_control_msg(idev, 0xA1, 3, 0, 0, fbuf, 6, 1000) != 6 || fbuf[4] != 5) |
||
+ | { |
||
+ | printf("%d", fbuf[4]); |
||
+ | } |
||
+ | c++; |
||
+ | } while (s > 0); |
||
+ | printf("\n"); |
||
+ | usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000); |
||
+ | hexdump(buf, 6); |
||
+ | usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000); |
||
+ | hexdump(buf, 6); |
||
+ | usb_reset(idev); |
||
+ | fclose(f); |
||
system("PAUSE"); |
system("PAUSE"); |
||
return 0; |
return 0; |
Revision as of 05:05, 11 February 2012
This is the protocol used to talk to DFU Mode and WTF version 2.
Protocol
Same as sending a file to the 2.x Recovery Mode
Code
int ???(???) { hexdump(fbuf, usb_control_msg(idev, 0x80, 6, 0x200, 0, fbuf, 0x100, 1000)); printf("WTF: "); fgets(buf, 100, stdin); buf[strlen(buf) - 1] = 0; FILE *f = fopen(buf, "rb"); int s = 0; int c = 0; if (f <= 0) { printf("file not found\n"); system("PAUSE"); return 0; } do { s = fread(fbuf, 1, 0x800, f); if (usb_control_msg(idev, 0x21, 1, c, 0, fbuf, s, 1000) == s) { printf("."); } else { printf("x"); } if (usb_control_msg(idev, 0xA1, 3, 0, 0, fbuf, 6, 1000) != 6 || fbuf[4] != 5) { printf("%d", fbuf[4]); } c++; } while (s > 0); printf("\n"); usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000); hexdump(buf, 6); usb_control_msg(idev, 0xA1, 3, 0, 0, buf, 6, 1000); hexdump(buf, 6); usb_reset(idev); fclose(f); system("PAUSE"); return 0; }