IOS рдкрд░ CoreGraphics рдореЗрдВ рдХреНрд░рд┐рдЯрд┐рдХрд▓ рдмрдЧ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо iOS рдореЗрдВ CoreGraphics рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдмрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд░реНрдг рднреЗрджреНрдпрддрд╛ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдХреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдмрдЧ рдЖрдкрдХреЛ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ WebKit: Mobile Safari, iOS рдХреЗ рд▓рд┐рдП Google Chrome, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдИрдореЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╣реИрдХрд░ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддреЛ, рдЪрд▓рд┐рдП рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдмрдЧ рдЦреЛрдЬ


рд╣рдо рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:


рд╣рдо WebKit рдореЗрдВ рдпрд╛ WebKit рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдмрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВрдЧреЗред рдЖрдЧреЗ рдХреА рд╣рд▓рдЪрд▓ рдХреЗ рдмрд┐рдирд╛, рд╣рдо рдЬрд╛рдиреЗ-рдорд╛рдиреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЪрд▓реЗрдВрдЧреЗ:

  1. рдХреБрдЫ рдкреНрд░рд╛рдЪреАрди рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдкреНрд░рд╛рд░реВрдк рдЦреЛрдЬреЗрдВ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрднреА рднреА WebKit рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
  2. рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рд░реНрдЬрд╝рд░ рд▓рд┐рдЦреЗрдВ, рдЗрд╕реЗ рдХреБрдЫ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдЪрд▓рд╛рдПрдВ рдЬреЛ WebKit (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЪрд╛рдп рдкреАрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред
  3. ...
  4. рд▓рд╛рдн? .. рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЪрд░рдг 1 рдкрд░ рд▓реМрдЯреЗрдВред

рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдореЗрдВ рдЕрдлрд╡рд╛рд╣ рдлреИрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рд╡реЗрдмрдХреЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЫрд╡рд┐ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХреНрд╕рдмреАрдПрдо рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред рдпрд╣ рдПрдХ рд╢реНрд╡реЗрдд рдФрд░ рд╢реНрдпрд╛рдо рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рда рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдЬреЛ рдкреБрд░рд╛рдиреЗ рд░реВрдк рдореЗрдВ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди WebKit рдЕрднреА рднреА рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ XBM рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╡реЗрдм рдкрд░ рдХрд┐рд╕реА рдиреЗ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП WebKit рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдЗрдВрдЬрди рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдХреЛ "рдЪрд╛рдЯрдирд╛" рдХрд░рдиреЗ рдХреА рднреВрд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдкреБрд░рд╛рдиреА, тАЛтАЛрдЕрдирд╕реБрд▓рдЭреЗ рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдЦреИрд░, рд╣рдордиреЗ рдкреНрд░рд╛рд░реВрдк рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдмрдЧ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛ рдХреЗ рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╣рдо рдПрдХреНрд╕рдмреАрдПрдо рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд┐рд╡рд░рдг рдкрдврд╝рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХреА .xbm рдлрд╛рдЗрд▓ рдХреЛ .xbm рдФрд░ рдЗрд╕реЗ "рдЦрд░рд╛рдм" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ WebKit рдпрд╛ рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдиреЗ рдЬреЛ WebKit рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЫреЛрдЯреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛:

  #define test_width 16
 #define test_height 16
 рд╕реНрдерд┐рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд char test_bits [] = {
      0xff, 0xff, 0x01, 0x80, 0xfd, 0xbf, 0x05, 0xa0, 0xf5, 0xaf, 0x15, 0xa8,
      0xd5, 0xab, 0x55, 0xaa, 0x55, 0xaa, 0xd5, 0xab, 0x15, 0xa8, 0xf5, 0xaf,
      0x05, 0xa0, 0xfd, 0xbf, 0x01, 0x80, 0xff, 0xff};

рдпрджрд┐ рд╣рдо рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА рдореЗрдВ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ (16 рдкрд┐рдХреНрд╕рд▓ рдХреЗ 16 рдЗрдВрдЪ) рдХреЛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рд╡рд░реНрдЧреЛрдВ рдХреА рддрд╕реНрд╡реАрд░ рджреЗрдЦреЗрдВрдЧреЗ:


рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдЬрд╝рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рд╣рдо рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рд╕реЗ "рдЦрд░рд╛рдм" рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП test_width рдФрд░ test_height рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реИрдВ - рдЕрдЪрд╛рдирдХ WebKit рдХреЗ рд╕рднреА рдЫрд╡рд┐ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдУрд╡рд░рдлреНрд▓реЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? test_width рдХреЛ рд╢реВрдиреНрдп рдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдФрд░ test_height рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╣реБрдд рдЬрд▓реНрдж рд╣реА рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдмрдбрд╝реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде test_width рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА рдХреНрд░реИрд╢! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдРрд╕реА рдлрд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ

  #define test_width 123456
 #define test_height 16
 рд╕реНрдерд┐рд░ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд char test_bits [] = {
      0xff, 0xff, 0x01, 0x80, 0xfd, 0xbf, 0x05, 0xa0, 0xf5, 0xaf, 0x15, 0xa8,
      0xd5, 0xab, 0x55, 0xaa, 0x55, 0xaa, 0xd5, 0xab, 0x15, 0xa8, 0xf5, 0xaf,
      0x05, 0xa0, 0xfd, 0xbf, 0x01, 0x80, 0xff, 0xff};

рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА рдмрд╕ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреЗ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред IOS рдХреЗ рд▓рд┐рдП Google Chrome рдЙрд╕реА рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рджреЛрдиреЛрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ WebKit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╛ рддреЛ WebKit рдореЗрдВ рдпрд╛ рдХреБрдЫ рд╕рд┐рд╕реНрдЯрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдмрдЧ рдорд┐рд▓рд╛, рдЬреЛ WebKit рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдмрдЧ рд╡рд┐рд╢реНрд▓реЗрд╖рдг


рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реА рдмрдЧ рдХрд╣рд╛рдБ рд░рд╣рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдРрдк рдХреНрдпреЛрдВ рдХреНрд░реИрд╢ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ? рдбрд┐рдмрдЧрд░ рдХреЗ рддрд╣рдд рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА рдореЗрдВ рд╣рдорд╛рд░реА "рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд" рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдмреИрдХрдЯреНрд░реЗрд╕ рджреЗрдЦреЗрдВ:


рдЪрд▓рд┐рдП argb32_image_mark рдореЗрдВ argb32_image_mark рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ CoreGraphics , рдХреНрдпреЛрдВрдХрд┐ рдмреИрдХрдЯреНрд░реЗрд╕ рджреНрд╡рд╛рд░рд╛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреНрд░реЙрдк рдХрд░рдиреЗ рд╡рд╛рд▓реЗ memset рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдбрд┐рдмрдЧрд░ рдХреЗ рддрд╣рдд рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ argb32_image_mark рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ .xbm рдлрд╝рд╛рдЗрд▓ рдХреЛ 123456 рдХреА рдЫрд╡рд┐ рдЪреМрдбрд╝рд╛рдИ рдХреЗ рд╕рд╛рде .xbm ред рдФрд░ рдирд┐рдореНрди рд╣реЛрддрд╛ рд╣реИ (рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдмрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкрддреЗ ASLR рдХреЗ рдХрд╛рд░рдг рдмреИрдХрдЯреНрд░реЗрд╕ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ):

  CoreGraphics`argb32_image_mark (0x2f96a970 рдкрд░):
 ...
 0x2f96a97a: mov r6, sp;  r6 = рд╕рдкрд╛
 0x2f96a97c: mov r5, r0;  r5 = рдкрд╣рд▓рд╛ рддрд░реНрдХ argb32_image_mark
 ...
 0x2f96a9a0: ldr r0, [r5, # 4];  r0 = [рдкрд╣рд▓рд╛ рддрд░реНрдХ + 4] = рдЫрд╡рд┐ рдЪреМрдбрд╝рд╛рдИ
 ...
 0x2f96a9b0: str r0, [r6, # 100];  рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдЪреМрдбрд╝рд╛рдИ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
 ...
 0x2f96a9d2: ldr r3, [r1, # 12];  r3 = [рджреВрд╕рд░рд╛ рддрд░реНрдХ + 12]
 ...
 0x2f96a9ea: ldr r1, [r6, # 100];  r1 рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╕реЗ рдЫрд╡рд┐ рдЪреМрдбрд╝рд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
 ...
 0x2f96a9f6: r0, r3, # 6 рдЬреЛрдбрд╝рддрд╛ рд╣реИ;  r0 = r3 + 6
 0x2f96a9f8: muls r0, r1, r0;  r0 = r1 * r0
 0x2f96a9fa: add.w r2, r0, # 96;  r2 = r0 + 96
 ...
 0x2f96aa04: r0, r2, # 3 рдЬреЛрдбрд╝рддрд╛ рд╣реИ;  r0 = r2 + 3
 0x2f96aa06: bic r0, r0, # 3;  r0 = r0 & 0xfffffff8
 0x2f96aa0a: sub.w r11, sp, r0;  r11 = sp - r0
 0x2f96aa0e: mov sp, r11;  sp = r11

рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдирдпрд╛ sp рдорд╛рди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

  sp = sp - ([[рджреВрд╕рд░рд╛ рддрд░реНрдХ + резреи] + рем) * рдЫрд╡рд┐ рдЪреМрдбрд╝рд╛рдИ + репреп) рдФрд░ реж xfffffff8

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреЛ рднреА рдЪрд┐рддреНрд░ рдореИрдВ рдирд╣реАрдВ рдЦреЛрд▓реВрдВрдЧрд╛, [ + 12] рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рдерд╛ред рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ

  sp = sp - (6 * рдЫрд╡рд┐ рдЪреМрдбрд╝рд╛рдИ + 99) рдФрд░ 0xfffffff8

argb32_image_mark рдлрд╝рдВрдХреНрд╢рди argb32_image_mark рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдЦрд░рд╛рдм рдирд┐рдпрдВрддреНрд░рдг рд╣реИ рдФрд░ рдпрджрд┐ рдЪреМрдбрд╝рд╛рдИ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рддреЛ рдЪрдпрдирд┐рдд рд╕реНрдЯреИрдХ рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ "рдкрддреНрддреЗ" рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рддреБрд░рдВрдд рдПрдХ memset рдХреЙрд▓ рдЖрддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рд╕реЗ рдкрд░реЗ рдореЗрдореЛрд░реА рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рджреЗрддрд╛ рд╣реИ:

  0x2f96aa10: mov r0, r11;  рдирдпрд╛ рд╕рдкрд╛ рдореВрд▓реНрдп рдорд╛рдирджрдВрдб рдХрд╛ рдкрддрд╛ рд╣реИ
 0x2f96aa12: movs r1, # 0;  рдЗрд╕ рдкрддреЗ рдкрд░ рд╢реВрдиреНрдп рдореЗрдореЛрд░реА
 0x2f96aa14: blx 0x2fa339cc;  рдХреЙрд▓ рдореЗрдорд╕реЗрдЯ
 ...

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреЛрд░рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдЧ рд╣реИ, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рд▓реЗрдЦ рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдХреА рдЧрдИ рдереАред

рдпрд╣ рдХрд╣рд╛рдБ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?


рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдмрдЧ рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА рдФрд░ рдЧреВрдЧрд▓ рдХреНрд░реЛрдо рдкрд░ рдЦреЗрд▓рддрд╛ рд╣реИ


рдореИрдВрдиреЗ iOS рдХреЗ рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ / рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдирдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдирд┐рдЬреА рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рд╡реЗ рдпрд╣ рднреА рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдмрдЧ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ


рдЕрдЧрд░ рдХреЛрдИ рдЕрдкрдиреЗ iOS рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ Safari рдХреЛ рдХреНрд░реИрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

codedigging.com/test.xbm

рдирд┐рд╖реНрдХрд░реНрд╖


рдмрдЧ рдмреЗрд╢рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХрддрдо рдЬреЛ рд╣реЛрдЧрд╛ - WebKit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ .xbm рдЪрд┐рддреНрд░ рдХреЛ рдЪрдмрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ .xbm рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЕрдкреНрд░рд┐рдп рд▓реЗрдХрд┐рди рдШрд╛рддрдХ рдирд╣реАрдВред

Apple рдореЗрдВ, рдореИрдВрдиреЗ рдХрд╣рд╛, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ iOS рдЕрдкрдбреЗрдЯ рдореЗрдВ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЦреБрд╢ рдбрд┐рдмрдЧрд┐рдВрдЧ!

рдЕрдкрдбреЗрдЯ рдЬреВрди реиреж, реирежрезрек: рдЖрдЬ Apple sec рдЯреАрдо рд╕реЗ рдПрдХ рдИрдореЗрд▓ рдЖрдпрд╛ред рд╡реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реАрд╡реАрдИ рдХреЛ рдЗрд╕реЗ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдЧрд▓реЗ рдЖрдИрдУрдПрд╕ рдЕрдкрдбреЗрдЯ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред "рдЖрдзрд╛ рд╕рд╛рд▓ рдирд╣реАрдВ рдЧреБрдЬрд░реЗрдЧрд╛ ..." (рдЧ)

рдЕрдкрдбреЗрдЯ рдЬреВрди 30, 2014

  APPLE-SA-2014-06-30-3 iOS 7.1.2

 iOS 7.1.2 рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 ...

 CoreGraphics
 рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз: iPhone 4 рдФрд░ рдмрд╛рдж рдореЗрдВ,
 iPod рдЯрдЪ (5 рд╡реАрдВ рдкреАрдврд╝реА) рдФрд░ рдмрд╛рдж рдореЗрдВ, iPad 2 рдФрд░ рдмрд╛рдж рдореЗрдВ
 рдкреНрд░рднрд╛рд╡: рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рдХреА рдЧрдИ XBM рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдиреЗ рд╕реЗ a
 рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдорд╛рдкреНрддрд┐ рдпрд╛ рдордирдорд╛рдирд╛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди
 рд╡рд┐рд╡рд░рдг: рдПрдХ рдЕрдирдмрд╛рдЙрдВрдб рд╕реНрдЯреИрдХ рдЖрд╡рдВрдЯрди рд╕рдорд╕реНрдпрд╛ рдореМрдЬреВрдж рд╣реИ
 XBM рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред  рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реБрдзрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
 рдЬрд╛рдБрдЪ рдХреА рд╕реАрдорд╛ред
 CVE-рдЖрдИрдбреА
 CVE-2014-1354: codedigging.com рдХреА рдбрд┐рдорд╛ рдХреЛрд╡рд▓реЗрдВрдХреЛ 

рд╣рдореНрдо, рдУрдХреЗ, iOS 7.1.2 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛, рдЪреЛ :)

Source: https://habr.com/ru/post/In154301/


All Articles