Difference between revisions of "Ultrasn0w"

From The iPhone Wiki
Jump to: navigation, search
(Old yellowsn0w payload w/ comments (by Darkmen) =)
Line 1: Line 1:
ultrasn0w (previously: yellowsn0w) is an [[iPhone 3G]] and [[iPhone 3GS]] [[Unlock 2.0|unlock]] payload. yellowsn0w was released on 01/01/09 [http://blog.iphone-dev.org/post/67797811/dont-eat-yellowsn0w]. ultrasn0w was released on June 23th 2009 [http://blog.iphone-dev.org/post/128573459/ultras-now].
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
==Credit==
 
MuscleNerd, and [[The dev team]]
+
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
==Exploit==
 
  +
Haxed by 1337Urmom at The Pois0nhack team
Relies on an unsigned code injection vulnerability.
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
The actual unlock works by a daemon patching the baseband's RAM on-the-fly, overriding the carrier lock code. It is not permanent because of the signature checks - the bootloader has to pass the sigchecks and the baseband has to pass them too, so any change to the baseband/bootloader cannot be made.
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
==Current Injection Vector==
 
  +
Haxed by 1337Urmom at The Pois0nhack team
ultrasn0w refers to the reuseable '''payload''', but it requires an injection vector in order to be inserted into the baseband. yellowsn0w was originally to be released with an injection vector that works on pre-2.28.00 baseband versions. However, [[geohot]] had an injection vector for 2.28.00 and the decision was made to release yellowsn0w with this injection vector to benefit the most people. This injection vector is discussed [[AT+stkprof Exploit|here]]. ultrasn0w uses a different injection vector - [[AT+XLOG Vulnerability]].
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
==ultrasn0w payload with comments (by Oranav)==
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Code loader (incl. Stage2)===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
ROM:00000000 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
ROM:00000000
 
  +
Haxed by 1337Urmom at The Pois0nhack team
ROM:00000000
 
ROM:00000000 code_loader
 
ROM:00000000 dest_addr = R1
 
ROM:00000000 src_addr = R6
 
ROM:00000000 MOVLS dest_addr, 0x110
 
ROM:00000004 ADDS dest_addr, #6
 
ROM:00000006 LSLS dest_addr, dest_addr, #8 ; unused ram to place code = 0x11600
 
ROM:00000008 ADDS R2, dest_addr, #1 ; thumbing
 
ROM:0000000A
 
ROM:0000000A loop ; CODE XREF: code_loader+24�j
 
ROM:0000000A MOVLS R0, 0x22 ; '"'
 
ROM:0000000E LDRB R3, [src_addr] ; first nibble
 
ROM:00000010 CMP R0, R3
 
ROM:00000012 LDRB R0, [src_addr,#1] ; second nibble
 
ROM:00000014 BEQ run ; branch if end of string
 
ROM:00000016 SUBS R3, #0x41 ; subtract 'A'
 
ROM:00000018 SUBS R0, #0x41 ; subtract 'A'
 
ROM:0000001A LSLS R3, R3, #4 ; make room for next nibble
 
ROM:0000001C ADDS R3, R3, R0 ; put them together as a byte
 
ROM:0000001E STRB R3, [dest_addr]
 
ROM:00000020 ADDS dest_addr, #1
 
ROM:00000022 ADDS src_addr, #2
 
ROM:00000024 B loop
 
ROM:00000026 ; ---------------------------------------------------------------------------
 
ROM:00000026
 
ROM:00000026 run ; CODE XREF: code_loader+14�j
 
ROM:00000026 BLX R2 ; handler_replace()
 
ROM:00000028 MOVLS R0, 0 ; safe exit
 
ROM:0000002C ADDS dest_addr, R0, #0
 
ROM:0000002E BLX R4
 
ROM:00000030 MOV SP, R5
 
ROM:00000032 POP {R0-src_addr,PC}
 
ROM:00000032 ; End of function code_loader
 
</pre>
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Handler replace===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011600 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011600
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011600
 
RAM:00011600 handler_replace
 
RAM:00011600 PUSH {LR}
 
RAM:00011602 LDR R0, =0x40492FC0 ; where to save task_loop_jmp + task_loop
 
RAM:00011604 ADR R1, task_loop_jmp
 
RAM:00011606 ADR R2, task_loop_end
 
RAM:00011608 SUBS R2, R2, R1 ; size of task_loop + task_loop_jmp = 0x70
 
RAM:0001160A LDR R3, =0x2040882C ; memcpy()
 
RAM:0001160C BLX R3
 
RAM:0001160E LDR R0, =0x40492C20 ; where to save task_creator_jmp + task_creator
 
RAM:00011610 ADR R1, task_creator_jmp
 
RAM:00011612 ADR R2, task_creator_end
 
RAM:00011614 SUBS R2, R2, R1 ; size of task_creator + task_creator_jmp = 0xA0
 
RAM:00011616 LDR R3, =0x2040882C ; memcpy()
 
RAM:00011618 BLX R3
 
RAM:0001161A LDR R0, =0x40492C20
 
RAM:0001161C BLX R0 ; task_creator_jmp()
 
RAM:0001161E POP {PC}
 
RAM:0001161E ; End of function handler_replace
 
</pre>
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Task creator (thanks Darkmen for the comments!)===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:40492C20 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:40492C20
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:40492C20
 
RAM:40492C20 task_creator_jmp
 
RAM:40492C20 STMFD SP!, {R1-R12,LR}
 
RAM:40492C24 BLX task_creator
 
RAM:40492C28 LDMFD SP!, {R1-R12,PC}
 
RAM:40492C28 ; End of function task_creator_jmp
 
RAM:40492C28
 
RAM:40492C2C
 
RAM:40492C2C ; =============== S U B R O U T I N E =======================================
 
RAM:40492C2C
 
RAM:40492C2C
 
RAM:40492C2C task_creator ; CODE XREF: task_creator_jmp+4�p
 
RAM:40492C2C PUSH {R4-R7,LR}
 
RAM:40492C2E LDR R3, =0x401ED3B8 ; jumptable var
 
RAM:40492C30 MOVLS R4, 0x800
 
RAM:40492C34 SUB SP, SP, #0x24
 
RAM:40492C36 STRH R0, [R3] ; task_creator_jmp addr
 
RAM:40492C38 LDR R5, =0x201493F0 ; malloc
 
RAM:40492C3A ADDS R0, R4, #0 ; 0x800
 
RAM:40492C3C ADDS R7, R1, #0 ; R7 = resp_string
 
RAM:40492C3E BLX R5 ; malloc(0x800)
 
RAM:40492C40 ADDS R6, R0, #0 ; R6 = addr returned from malloc
 
RAM:40492C42 MOVS R0, #0x98 ; sizeof(NU_TASK)
 
RAM:40492C44 BLX R5 ; malloc(sizeof(NU_TASK))
 
RAM:40492C46 MOVS R2, #0
 
RAM:40492C48 MOVS R3, #0x44
 
RAM:40492C4A LDR R1, =aDevteam1 ; char *name
 
RAM:40492C4C STR R2, [R0,#0xC] ; task.field=0
 
RAM:40492C4E STR R3, [SP,#0xC] ; priority = 0x44
 
RAM:40492C50 MOVS R3, #0xA
 
RAM:40492C52 STR R3, [SP,#0x14] ; preempt = NU_PREEMPT
 
RAM:40492C54 MOVS R3, #0xC
 
RAM:40492C56 STR R2, [SP] ; void *argv = 0
 
RAM:40492C58 STR R4, [SP,#8] ; stack_size = 0x800
 
RAM:40492C5A STR R2, [SP,#0x10] ; time_slice = 0
 
RAM:40492C5C STR R3, [SP,#0x18] ; auto_start = NU_START
 
RAM:40492C5E LDR R2, =0x40492FC0 ; task_loop_jmp address
 
RAM:40492C60 STR R6, [SP,#4] ; void *stack_address = malloc(0x800)
 
RAM:40492C62 MOVS R3, #0
 
RAM:40492C64 LDR R4, =0x2043E5B4 ; NU_Create_Task
 
RAM:40492C66 BLX R4 ; status = NU_Create_Task()
 
RAM:40492C68 ADDS R2, R0, #0 ; R2 = status (for the %d reference in sprintf)
 
RAM:40492C6A CMP R0, #0 ; success = zero
 
RAM:40492C6C BNE status_error
 
RAM:40492C6E LDR R1, =aOk ; "OK!"
 
RAM:40492C70 ADDS R0, R7, #0 ; resp_string
 
RAM:40492C72 LDR R3, =0x204B11F0 ; sprintf
 
RAM:40492C74 BLX R3 ; sprintf(resp_string, "OK!")
 
RAM:40492C76 B exit
 
RAM:40492C78 ; ---------------------------------------------------------------------------
 
RAM:40492C78
 
RAM:40492C78 status_error ; CODE XREF: task_creator+40�j
 
RAM:40492C78 LDR R1, =aErrorD ; "ERROR %d"
 
RAM:40492C7A ADDS R0, R7, #0 ; resp_string
 
RAM:40492C7C LDR R3, =0x204B11F0 ; sprintf
 
RAM:40492C7E BLX R3 ; sprintf(resp_string, "ERROR %d", status)
 
RAM:40492C80
 
RAM:40492C80 exit ; CODE XREF: task_creator+4A�j
 
RAM:40492C80 ADD SP, SP, #0x24 ; fixing stack
 
RAM:40492C82 POP {R4-R7,PC}
 
RAM:40492C82 ; End of function task_creator
 
</pre>
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Unlock task loop (thanks Darkmen for the comments!)===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011630 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011630
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011630
 
RAM:00011630 task_loop_jmp
 
RAM:00011630 STMFD SP!, {R1-R12,LR}
 
RAM:00011634 BLX task_loop
 
RAM:00011634 ; ---------------------------------------------------------------------------
 
RAM:00011638 LDMFD SP!, {R1-R12,PC}
 
RAM:00011638 ; End of function task_loop_jmp
 
RAM:00011638
 
RAM:0001163C
 
RAM:0001163C ; =============== S U B R O U T I N E =======================================
 
RAM:0001163C
 
RAM:0001163C
 
RAM:0001163C task_loop
 
RAM:0001163C PUSH {R4,R5,LR}
 
RAM:0001163E LDR R5, =0x401E829C ; sec mailbox
 
RAM:00011640 SUB SP, SP, #0x14
 
RAM:00011642
 
RAM:00011642 loop ; CODE XREF: task_loop+44�j
 
RAM:00011642 LDR R3, =0x2042FFD8 ; NU_Receive_From_Mailbox
 
RAM:00011644 ADDS R0, R5, #0 ; NU_MAILBOX *mailbox
 
RAM:00011646 MOV R1, SP ; void *Message
 
RAM:00011648 MOVS R2, #0xFF ; Timeout
 
RAM:0001164A BLX R3 ; NU_Receive_From_Mailbox(sec_mailbox,SP,0xFF)
 
RAM:0001164C LDR R3, [SP] ; Message[0]
 
RAM:0001164E CMP R3, #0xD ; Message[0] = 0xD ?
 
RAM:00011650 BNE skip
 
RAM:00011652 LDR R1, [SP,#4] ; Message[1]
 
RAM:00011654 LDR R3, =0x40301650
 
RAM:00011656 LDR R2, [R1] ; Message[1].field0
 
RAM:00011658 STR R2, [R3] ; sec_task_var1 = Message[1].field0
 
RAM:0001165A ADDS R3, #4 ; 0x40301654
 
RAM:0001165C LDR R2, [R1,#4] ; Message[1].field1
 
RAM:0001165E STR R2, [R3] ; sec_task_var2 = Message[1].field1
 
RAM:00011660 LDR R2, [R1,#8] ; Message[1].field2
 
RAM:00011662 LDR R3, =0x100FF00
 
RAM:00011664 STR R3, [R2] ; Message[1].field2[0] = 0x100FF00
 
RAM:00011666 LDR R3, =0x4020401
 
RAM:00011668 STR R3, [R2,#4] ; Message[1].field2[1] = 0x4020401
 
RAM:0001166A LDR R3, =0x4040403
 
RAM:0001166C STR R3, [R2,#8] ; Message[1].field2[2] = 0x4040403
 
RAM:0001166E MOVS R3, #1
 
RAM:00011670 STR R3, [R1,#0xC] ; Message[1].field3 = 1
 
RAM:00011672 MOVS R3, #0x20 ; ' '
 
RAM:00011674 STR R3, [SP] ; Message[0] = 0x20
 
RAM:00011676
 
RAM:00011676 skip ; CODE XREF: task_loop+14�j
 
RAM:00011676 ADDS R0, R5, #0 ; sec mailbox
 
RAM:00011678 MOV R1, SP ; void *Message
 
RAM:0001167A MOVS R2, #0xFF ; timeout
 
RAM:0001167C LDR R3, =0x20430040
 
RAM:0001167E BLX R3 ; NU_Send_To_Mailbox()
 
RAM:00011680 B loop
 
RAM:00011680 ; End of function task_loop
 
RAM:00011680
 
RAM:00011680 ; ---------------------------------------------------------------------------
 
</pre>
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
==Old yellowsn0w payload w/ comments (by Darkmen) ==
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
The exploit consists from 4 parts:
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Code loader===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
ROM:00000000 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
ROM:00000000
 
  +
Haxed by 1337Urmom at The Pois0nhack team
ROM:00000000
 
ROM:00000000 loader
 
ROM:00000000 LDR R2, =0x11700 ; unused ram to place code
 
ROM:00000002 ADDS R4, R2, #1 ; thumb switch
 
ROM:00000004 LDR R3, =0x40159FBF ; at-handler buffer where stage2 binary and following hexdata are
 
ROM:00000006
 
ROM:00000006 copy.loop ; CODE XREF: loader+12�j
 
ROM:00000006 LDRB R0, [R3] ; copying code+data until double quotes
 
ROM:00000008 CMP R0, #0x22 ; '"'
 
ROM:0000000A BEQ run ; jump thumb code
 
ROM:0000000C STRB R0, [R2]
 
ROM:0000000E ADDS R2, #1
 
ROM:00000010 ADDS R3, #1
 
ROM:00000012 B copy.loop ;
 
ROM:00000014 run ; CODE XREF: loader+A�j
 
ROM:00000014 BX R4 ; jump stage2 code
 
ROM:00000014 ; End of function loader
 
ROM:00000014
 
ROM:00000014 ; ---------------------------------------------------------------------------
 
</pre>
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Stage2(tm)===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00000000 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00000000 stage2
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00000000 ADDS R2, #0x10 ; R2 = 0x11700 + stage2 size
 
RAM:00000002 MOVS R7, #0xF
 
RAM:00000004 BICS R2, R7 ; align offset by 0x10
 
RAM:00000006 ADDS R7, R2, #0 ; saving address to jump
 
RAM:00000008 ADR R4, 0x44 ; skipping Stage2 size and taking first char from at-string
 
RAM:0000000A ADR R5, char2byte ; loading routine addr
 
RAM:0000000C ADDS R5, #1 ; thumb
 
RAM:0000000E
 
RAM:0000000E loop ; CODE XREF: stage2+2C�j
 
RAM:0000000E LDRB R1, [R4] ; at-string[index]
 
RAM:00000010 CMP R1, #'x' ; end of line?
 
RAM:00000012 BEQ jump_code
 
RAM:00000014 BLX R5 ; char2byte first hakfbyte
 
RAM:00000016 LSLS R3, R1, #4 ; <<4 0X becoming X0
 
RAM:00000018 LDRB R1, [R4,#1] ; at-string[index+1]
 
RAM:0000001A BLX R5 ; char2hex second halfbyte
 
RAM:0000001C NOP
 
RAM:0000001E NOP
 
RAM:00000020 NOP
 
RAM:00000022 NOP
 
RAM:00000024 ADDS R1, R1, R3 ; R1 = complete byte
 
RAM:00000026 STRB R1, [R2] ; storing byte to dst
 
RAM:00000028 ADDS R4, #2 ; hexstr_index+=2
 
RAM:0000002A ADDS R2, #1 ; dst++
 
RAM:0000002C B loop ; at-string[index]
 
RAM:0000002E jump_code
 
RAM:0000002E NOP
 
RAM:00000030 NOP
 
RAM:00000032 ADDS R7, #1 ; thumbing
 
RAM:00000034 BX R7 ; run Task creator code
 
RAM:00000034 ; End of function stage2
 
RAM:00000038
 
RAM:00000038 ; =============== S U B R O U T I N E =======================================
 
RAM:00000038 char2byte ; DATA XREF: stage2+A�o
 
RAM:00000038 CMP R1, #0x41 ; 'A'
 
RAM:0000003A BGE letter ; letter to number
 
RAM:0000003C SUBS R1, #0x30 ; '0' ; digit to number
 
RAM:0000003E BX LR
 
RAM:00000040 letter ; CODE XREF: char2byte+2�j
 
RAM:00000040 SUBS R1, #0x37 ; '7' ; letter to number
 
RAM:00000042 BX LR ; ret
 
RAM:00000042 ; End of function char2byte
 
</pre>
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Task creator===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:000119A0 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:000119A0
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:000119A0
 
RAM:000119A0 handler_replace
 
RAM:000119A0 LDR R0, =0x4011714C ; soft reset handler addr
 
RAM:000119A2 ADR R1, new_handler
 
RAM:000119A4 ADDS R1, #1 ; thumbing
 
RAM:000119A6 STR R1, [R0] ; setting new handler
 
RAM:000119A8 POP {R0-R4,PC} ; safe exit fixing stack
 
RAM:000119A8 ; End of function handler_replace
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:000119B0 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:000119B0
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:000119B0
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:000119B0 new_handler ; DATA XREF: handler_replace+2�o
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:000119B0 PUSH {R4-R7,LR}
 
RAM:000119B2 LDR R3, =0x403BB344 ; jamptable var
 
RAM:000119B4 MOVS R6, #0x80
 
RAM:000119B6 SUB SP, SP, #0x2C
 
RAM:000119B8 LSLS R6, R6, #4 ; 0x200
 
RAM:000119BA STRH R0, [R3] ; saving R0 to mem var
 
RAM:000119BC STR R1, [SP,#0x40+resp_string] ; saving responce prt to stack
 
RAM:000119BE LDR R4, =0x201420AC ; malloc
 
RAM:000119C0 ADDS R0, R6, #0
 
RAM:000119C2 BLX R4 ; malloc(0x200)
 
RAM:000119C4 MOVS R5, #0
 
RAM:000119C6 STR R0, [SP,#0x40+ptr_200] ; saving pointer to stack
 
RAM:000119C8 MOVS R0, #0x98 ; sizeof(NU_TASK)
 
RAM:000119CA BLX R4 ; malloc(0x98)
 
RAM:000119CC ADDS R7, R0, #0 ; R7 = task
 
RAM:000119CE STR R5, [R0,#0xC] ; task.field=0
 
RAM:000119D0 MOVS R0, 0x100
 
RAM:000119D4 BLX R4 ; malloc(0x100)
 
RAM:000119D6 MOVS R2, #0x80
 
RAM:000119D8 LDR R1, =task_loop ; src
 
RAM:000119DA LSLS R2, R2, #1 ; size to copy
 
RAM:000119DC LDR R3, =0x203C58A0 ; bytecpy
 
RAM:000119DE ADDS R4, R0, #0 ; R4 = dyn_task_loop
 
RAM:000119E0 BLX R3 ; bytecpy(task_loop, dyn_task_loop, 0x100)
 
RAM:000119E2 LDR R3, [SP,#0x40+ptr_200]
 
RAM:000119E4 STR R3, [SP,#4] ; void *stack_address = malloc(0x200)
 
RAM:000119E6 MOVS R3, #0x44
 
RAM:000119E8 STR R3, [SP,#0xC] ; priority = 0x44
 
RAM:000119EA MOVS R3, #0xA
 
RAM:000119EC ADDS R4, #1 ; thumbing dyn_task_loop
 
RAM:000119EE STR R3, [SP,#0x14] ; preempt = NU_PREEMPT
 
RAM:000119F0 MOVS R3, #0xC
 
RAM:000119F2 ADDS R2, R4, #0 ; void(*task_entry)
 
RAM:000119F4 STR R3, [SP,#0x18] ; auto_start = NU_START
 
RAM:000119F6 LDR R1, =devteam1 ; char *name
 
RAM:000119F8 STR R5, [SP] ; void *argv = 0
 
RAM:000119FA STR R6, [SP,#8] ; stack_size = 0x200
 
RAM:000119FC STR R5, [SP,#0x10] ; time_slice = 0
 
RAM:000119FE ADDS R0, R7, #0 ; NU_TASK *task
 
RAM:00011A00 MOVS R3, #0 ; int argc = 0
 
RAM:00011A02 LDR R4, =0x203FB540 ; NU_Create_Task
 
RAM:00011A04 BLX R4 ; status = NU_Create_Task()
 
RAM:00011A06 ADDS R2, R0, #0
 
RAM:00011A08 CMP R0, #0 ; success = zero
 
RAM:00011A0A BNE status_error
 
RAM:00011A0C LDR R1, =OK
 
RAM:00011A0E LDR R0, [SP,#0x40+resp_string]
 
RAM:00011A10 LDR R3, =0x2046DD00 ; sprintf
 
RAM:00011A12 BLX R3 ; sprintf(resp_string,"OK")
 
RAM:00011A14 B exit ; fixing stack
 
RAM:00011A16 ; ---------------------------------------------------------------------------
 
RAM:00011A16
 
RAM:00011A16 status_error ; CODE XREF: new_handler+5A�j
 
RAM:00011A16 LDR R1, =ERROR
 
RAM:00011A18 LDR R0, [SP,#0x40+resp_string]
 
RAM:00011A1A LDR R3, =0x2046DD00 ; sprintf
 
RAM:00011A1C BLX R3 ; sprintf(resp_string,"ERROR")
 
RAM:00011A1E
 
RAM:00011A1E exit ; CODE XREF: new_handler+64�j
 
RAM:00011A1E ADD SP, SP, #0x2C ; fixing stack
 
RAM:00011A20 POP {R4-R7,PC} ; bye
 
RAM:00011A20 ; End of function new_handler
 
RAM:00011A20
 
RAM:00011A20 ; ---------------------------------------------------------------------------
 
</pre>
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Unlock task loop===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011A64 ; =============== S U B R O U T I N E =======================================
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011A64
 
  +
Haxed by 1337Urmom at The Pois0nhack team
RAM:00011A64 task_loop ; DATA XREF: RAM:off_11A2C�o
 
RAM:00011A64 PUSH {R4,R5,LR}
 
RAM:00011A66 LDR R5, =0x40232754 ; sec mailbox
 
RAM:00011A68 SUB SP, SP, #0x14
 
RAM:00011A6A
 
RAM:00011A6A loop ; CODE XREF: task_loop+44�j
 
RAM:00011A6A LDR R3, =0x20165998 ; NU_Receive_From_Mailbox
 
RAM:00011A6C ADDS R0, R5, #0 ; NU_MAILBOX *mailbox
 
RAM:00011A6E MOV R1, SP ; void *Message
 
RAM:00011A70 MOVS R2, #0xFF ; Timeout
 
RAM:00011A72 BLX R3 ; NU_Receive_From_Mailbox(sec_mailbox,SP,0xFF)
 
RAM:00011A74 LDR R3, [SP] ; Message[0]
 
RAM:00011A76 CMP R3, #0xD ; Message[0] = 0xD ?
 
RAM:00011A78 BNE skip ;
 
RAM:00011A7A LDR R1, [SP,#4] ; Message[1]
 
RAM:00011A7C LDR R3, =0x402F79BC
 
RAM:00011A7E LDR R2, [R1] ; Message[1].field0
 
RAM:00011A80 STR R2, [R3] ; sec_task_var1 = Message[1].field0
 
RAM:00011A82 ADDS R3, #4 ; 0x402F79C0
 
RAM:00011A84 LDR R2, [R1,#4] ; Message[1].field1
 
RAM:00011A86 STR R2, [R3] ; sec_task_var2 = Message[1].field1
 
RAM:00011A88 LDR R2, [R1,#8] ; Message[1].field2
 
RAM:00011A8A LDR R3, =0x100FF00
 
RAM:00011A8C STR R3, [R2] ; Message[1].field2[0] = 0x100FF00
 
RAM:00011A8E LDR R3, =0x4020401
 
RAM:00011A90 STR R3, [R2,#4] ; Message[1].field2[1] = 0x4020401
 
RAM:00011A92 LDR R3, =0x4040403
 
RAM:00011A94 STR R3, [R2,#8] ; Message[1].field2[2] = 0x4040403
 
RAM:00011A96 MOVS R3, #1
 
RAM:00011A98 STR R3, [R1,#0xC] ; Message[1].field3 = 1
 
RAM:00011A9A MOVS R3, #0x20
 
RAM:00011A9C STR R3, [SP] ; Message[0] = 0x20
 
RAM:00011A9E
 
RAM:00011A9E skip ; CODE XREF: task_loop+14�j
 
RAM:00011A9E ADDS R0, R5, #0 ; sec mailbox
 
RAM:00011AA0 MOV R1, SP ; void *Message
 
RAM:00011AA2 MOVS R2, #0xFF ; timeout
 
RAM:00011AA4 LDR R3, =0x203ED568
 
RAM:00011AA6 BLX R3 ; NU_Send_To_Mailbox()
 
RAM:00011AA8 B loop ; NU_Receive_From_Mailbox
 
RAM:00011AA8 ; End of function task_loop
 
</pre>
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
===Planetbeing explains...===
 
  +
Haxed by 1337Urmom at The Pois0nhack team
<pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
13:24:29 <crash-x_> especially how does ultra/yellow sn0w work
 
  +
Haxed by 1337Urmom at The Pois0nhack team
13:24:40 <crash-x_> are you overwriting instructions
 
  +
Haxed by 1337Urmom at The Pois0nhack team
13:24:48 <crash-x_> or some values in memory to make it accept the sim?
 
13:24:48 <planetbeing> Nah.
 
13:24:53 <planetbeing> It's a task.
 
13:25:06 <planetbeing> That just waits for securiy messages to go through the inbox.
 
13:25:13 <westbaer> planetbeing: btw, why isnt yellowsn0w/ultrasn0w not open-source anymore? like u posted an *oooold* version once
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
...
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
13:26:33 <planetbeing> The only thing I do for ys/us is the loader bit.
 
  +
Haxed by 1337Urmom at The Pois0nhack team
13:26:39 <westbaer> so whats actually the loader stuff you've been talking about?
 
  +
Haxed by 1337Urmom at The Pois0nhack team
13:26:46 <planetbeing> That uses the exploit to start MuscleNerd's payload.
 
  +
Haxed by 1337Urmom at The Pois0nhack team
13:27:21 <westbaer> ah
 
  +
Haxed by 1337Urmom at The Pois0nhack team
13:27:26 <planetbeing> Well, you have a vulnerability.
 
13:27:30 <planetbeing> And you want to load a large chunk of code.
 
13:27:39 <planetbeing> And you don't have much room to wriggle in for your overflow
 
13:28:21 <westbaer> aah, makes sense
 
13:28:50 <planetbeing> So the solution is a small loader that loads the rest of the code, and overcomes any restrictions there are on allowable characters.
 
13:28:55 <ashikase> francis: pm
 
13:28:59 <westbaer> yeah
 
13:29:10 <crash-x_> planetbeing: the baseband is it like one process that runs there
 
13:29:19 <crash-x_> or is it like a small os with process and stuff
 
13:29:19 <planetbeing> Basically a good loader should turn a vulnerability into a reliable platform for the execution of arbitrary code, unrestricted by vulnerability-specific stuff.
 
13:29:37 <planetbeing> Oh, it's a full-featured OS.
 
13:29:38 <planetbeing> Nucleus.
 
13:29:51 <planetbeing> http://www.mentor.com/products/embedded_software/nucleus_rtos/
 
13:29:54 <crash-x_> and when you execute an at command
 
13:30:06 <crash-x_> does that start another process that is crashed then
 
13:30:21 <planetbeing> Ideally, you don't crash anything.
 
13:30:21 <crash-x_> or does it crash like the main baseband program
 
13:30:23 <planetbeing> And we don't.
 
13:30:49 <crash-x_> so am i understand it right
 
13:30:50 <westbaer> wait. is nucleus on the baseband already installed or do you actually inject it with ultrasn0w?
 
13:30:51 <planetbeing> We load a bunch of code into certain memory locations, execute them, and then return safely back to the main command parser task.
 
13:31:00 <planetbeing> Nucleus is what the baseband runs.
 
13:31:04 <westbaer> ah ok
 
13:31:29 <planetbeing> I mean, even the bootrom is an OS.
 
13:31:36 <planetbeing> With one task, but it still has a scheduler. =P
 
13:31:39 <crash-x_> ah thats how you do it
 
13:31:42 <westbaer> heh
 
13:31:44 <crash-x_> and about your payload
 
13:31:57 <crash-x_> does it start a new process like using fork()
 
13:32:03 <crash-x_> or does it all the work in the exploited process
 
13:32:11 <planetbeing> It uses Nucleus-specific calls that create the new task.
 
13:32:19 <planetbeing> Well, the payload has to create a new task
 
13:32:22 <westbaer> I think they are documented on the wiki
 
13:32:25 <planetbeing> To monitor for certain events.
 
13:32:47 <planetbeing> Yeah, just read Darkmen's decompile.
 
13:33:00 <planetbeing> us has the exact same payload as ys
 
13:33:08 <planetbeing> Just different addresses for function calls and stuff.
 
13:33:19 <planetbeing> And I had to rewrite the loader due to even tighter constraints.
 
13:33:28 <crash-x_> thats cool, thanks for explaining
 
13:33:34 <westbaer> yup, thanks
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
From irc.saurik.com #iphone on sunday the 5th of july.
 
  +
Haxed by 1337Urmom at The Pois0nhack team
</pre>
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
==Source Code==
 
  +
Haxed by 1337Urmom at The Pois0nhack team
The source code for yellowsn0w 0.9.1 (old version) was released along with yellowsn0w release. [http://xs1.iphwn.org/releases/yellowsn0w.tar.bz2]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
==See Also==
 
  +
Haxed by 1337Urmom at The Pois0nhack team
* [[X-Gold 608 Unlock]]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
* [[X-Gold 608]]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
* [[Baseband]]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
   
  +
Haxed by 1337Urmom at The Pois0nhack team
==External links==
 
  +
Haxed by 1337Urmom at The Pois0nhack team
* [http://chronic-dev.org/blog/2008/12/props/ Chronic Dev's post about Yellowsn0w]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
* [http://blog.iphone-dev.org/post/65126957/tis-the-season-to-be-jolly Yellowsn0w Announcement]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
* [http://qik.com/video/729275 MuscleNerd's yellowsn0w Demo]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
* [http://yellowsn0w.com yellowsn0w Official Website]
 
* [http://www.youtube.com/watch?v=kd5vOy2m5uY MuscleNerd's ultrasn0w demo]
 
   
  +
Haxed by 1337Urmom at The Pois0nhack team
[[Category:Unlocking Methods]]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
[[Category:Baseband]]
 
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team
  +
Haxed by 1337Urmom at The Pois0nhack team

Revision as of 06:23, 7 November 2009

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team

Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team Haxed by 1337Urmom at The Pois0nhack team