
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдмрд╛рд╣рд░) рд╡реЗ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ: рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рджрдмрд╛рдП рдЧрдП рдмрдЯрди, рдорд╛рдЙрд╕ рджреНрд╡рд╛рд░рд╛ рддрдп рдХреА рдЧрдИ рджреВрд░реА, рдХрд╛рдо рдХрд╛ рдФрд╕рдд рд╕рдордп рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реАред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реЗ рдПрдХрддреНрд░ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЗрдВрдЯрд░реЗрдХреНрдЯрд┐рд╡ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред рд╕рднреА рд╡рд░реНрдгрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ
Debian Wheezy
,
Python 2.7.3
,
R 2.15
рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рдХреА рдЧрдИрдВред

рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣
рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рдХрд┐ рдпрд╣ рдЧрд┐рд░рд╛рд╡рдЯ рдореИрдВ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдмрд╕реЗ рдкреВрд░реНрдг рдЖрдВрдХрдбрд╝реЗ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЬрд▓реНрджреА рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛: рд╕рдмрд╕реЗ рд╕рд░рд▓ keylogger рдиреЗ рд▓рд┐рдЦрд╛, рд╕рднреА рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдФрд░ рдХреАрдмреЛрд░реНрдб рдкрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рд░рд┐рд╣рд╛рдИ, рдорд╛рдЙрд╕ рдкрд░ рдмрдЯрди, рд╕рд╛рде рд╣реА рд╕рднреА рдорд╛рдЙрд╕ рдЖрдВрджреЛрд▓рдиреЛрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдореБрдЭреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж рд╡реЗрдмрдХреИрдо рдХреЗ рд╕рд╛рде рдПрдХ рдлреЛрдЯреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ "рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдП" рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░ рд╕рднреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб
SQLite
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ gzip рд╕рдВрдкреАрдбрд╝рд┐рдд рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рдХрдИ рдЧреБрдирд╛ рдмрдбрд╝рд╛ рд╣реИ (рдЕрдм рдбреЗрдЯрд╛рдмреЗрд╕ 0.5 рдЬреАрдмреА рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд▓реЗрддрд╛ рд╣реИ), рдпрд╣ рдЕрднреА рднреА рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЪрдпрди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдХреИрдорд░реЗ рд╕реЗ рддрд╕реНрд╡реАрд░реЗрдВ рдЕрднреА рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдХреБрд▓ рдЖрдХрд╛рд░ рдЕрдм 2.2 рдЬреАрдмреА (рд▓рдЧрднрдЧ 30,000 рдлрд╛рдЗрд▓реЗрдВ) рд╣реИред
рдЬрд╛рдирдХрд╛рд░реА рдХреА рдкреНрд░рд╕реНрддреБрддрд┐
рдЗрд╕рд▓рд┐рдП, рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рддрдп рд╣реЛ рдЧрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЧреНрд░рд╛рдлрд╝ рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рд╕рдм рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдЪреВрдВрдХрд┐ рдореИрдВ рдХрд╛рдлреА рд╕рдордп рд╕реЗ
R
рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рдерд╛, рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рдж
R
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рднреА рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬреЗрдВ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдирдХ рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реЗрдХреНрдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЙрдЯ рджреНрд╡рд╛рд░рд╛ рд╢рдмреНрдж рдЬреБрджрд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рдирд╛рдордХрд░рдг рд╢реИрд▓реА рдХреЛ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ _ рдпрд╛ рдКрдВрдЯ рдорд╛рдорд▓реЗ рдХреЗ рдмрдЬрд╛рдп)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдХреЛ рд╣реА
ggplot2
рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреИрдХреЗрдЬ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдЙрдкрдХрд░рдг (рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рдореГрджреНрдз, рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛), рдлрд┐рд░ рдореИрдВрдиреЗ рд▓рдЪреАрд▓реЗ
ggplot2
рд▓рд┐рдП
ggplot2
рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдбреЗрдЯрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рднрд╛рдЬрди-рд▓рд╛рдЧреВ-рдЧрдардмрдВрдзрди рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП
ggplot2
рдкрд╛рдпрд╛ред
knitr
рдорд╛рд░реНрдХрдЕрдк рдФрд░ рдЗрд╕рдореЗрдВ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдЖрд░ (рдЧрдгрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ
knitr
) рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпреЗ рд╕рднреА рд╕реНрдЯреИрдЯрд┐рдХ рдЧреНрд░рд╛рдлрд╝ рдФрд░ рдЯреЗрдмрд▓ рд╣реИрдВ, рдФрд░ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдмрд╕реЗрдЯ рдХрд╛ рдЪрдпрди, рд╣рд░ рдмрд╛рд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ рдЧрддрд┐рд╢реАрд▓ рдЪрд╛рд╣реВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реНрд▓рд╛рдЗрдбрд░реНрд╕, рдмрдЯрди рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрдЧреАред
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛,
R
рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдмрд╣реБрдд рдХрдо рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреЗ рд╕рд╛рдеред рдореИрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ рдерд╛, рд╕рдВрдпреЛрдЧ рд╕реЗ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЕрдлрд╕реЛрд╕ рдирд╣реАрдВ рд╣реИред рдЦреБрдж рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ:
Shiny
- "рдЖрд░ рдореЗрдВ рдЖрд╕рд╛рди рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ"ред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рд╕рд╣реА рд╣реИ, рдФрд░ рдЗрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐
Shiny
рдХрд╛рдлреА рдирдпрд╛ рдЙрддреНрдкрд╛рдж рд╣реИ, рд╡рд┐рдХрд╛рд╕ (рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП) рдкрд┐рдЫрд▓реЗ рдЬреВрди (2012) рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рдмрдЧ рдирд╣реАрдВ рдкрд╛рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕реНрдерд┐рд░ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡реИрд╕реЗ, рдЙрд╕реА рд╕рд╛рдЗрдЯ рдкрд░ рдЖрдк RStudio рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ - R рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ IDEредрдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВрдиреЗ
Shiny
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдлрд┐рд▓рд╣рд╛рд▓ рдХреНрдпрд╛ рд╣реБрдЖ, рдЗрд╕рдХреЗ рдХреБрдЫ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ:



рдЖрдк рдЗрди рдкреГрд╖реНрдареЛрдВ рдХреЛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реНрдерд┐рд░ рд░реВрдк рдореЗрдВ, рдЕрд░реНрдерд╛рддреН рдирд┐рдпрдВрддреНрд░рдг рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)
рдЪрдордХрджрд╛рд░- shample.aplavn.ru рдкрд░
рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдореГрджреНрдз рд╣реИрдВ, рдФрд░ рдкреГрд╖реНрда рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ
HTML
,
CSS
рдФрд░
JavaScript
рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдореИрдВ рд╣рд░ рдЬрдЧрд╣ рдорд╛рдирдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред рдЖрд╕рд╛рдиреА рд╕реЗ,
Shiny
рдХреЛ рдХрд┐рд╕реА рднреА рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдЖрд░-рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реА рдирд┐рд╣рд┐рдд рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░
рд╕рднреА рдХреЛрдб (рджреЛрдиреЛрдВ keylogger рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди)
BitBucket рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЕрдм рдореЗрд░реЗ рдкрд╛рд╕ рдореБрдХреБрдЯ рджреНрд╡рд╛рд░рд╛ рд╣рд░ рдорд┐рдирдЯ рдкрд░ рдПрдХ
capture
рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬреЛ 50% рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реЙрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ (рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреИрдорд░рд╛ рддреБрд░рдВрдд рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, 20 рд╢реЙрдЯ рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдВрддрд┐рдо рдмрдЪ рдЬрд╛рддрд╛ рд╣реИ)ред
keylogger.py
рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡
inittab
a (
respawn
рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ
keylogger.py
рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
statistics
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ
keylogger.stats.R
рдФрд░
keylogger.stats.Rmd
, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдЪрд┐рддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрди рдмрдирд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - HTML рдкреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ
knitr
(рджреЛрдиреЛрдВ, рдмреЗрд╢рдХ, рд╕реНрдерд┐рд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдПред рдЕрдВрдд рдореЗрдВ,
shiny_page
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреГрд╖реНрда рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ (
ui.R
,
server.R
) рдФрд░
compute.data.R
рдлрд╝рд╛рдЗрд▓ рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИ (рдЕрдм рдЗрд╕рдореЗрдВ 30 рд╕реЗрдХрдВрдб рд╕реЗ 1 рдорд┐рдирдЯ рддрдХ рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЧрдгрдирд╛ рди рд╣реЛ рдЬрдм рдЖрдк рдкреГрд╖реНрда рдЦреЛрд▓рддреЗ рд╣реИрдВ)ред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ
Makefile
рд╣реИ рдЬреЛ рдЖрдкрдХреЛ
make run
рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдЧрдгрдирд╛
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рднреА рдЧрдгрдирд╛ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ
SQLite
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдереАрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░,
plyr
рдкреИрдХреЗрдЬ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде
GROUP BY
рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐
SQLite
рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рднреА рд╕рдорд╛рди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд░рддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ (рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг) рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреВрд░реЗ рдбреЗрдЯрд╛ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдЬрдм
compute.data.R
, рддреЛ рд▓рдЧрднрдЧ 1 рдЬреАрдмреА рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдореЗрд░реЗ рд▓реИрдкрдЯреЙрдк рдкрд░ 4 рдЬреАрдмреА рдЫреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛рдУрдВ рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓реМрдЯрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ)ред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, plyr рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдорд╛рди рдПрд╕рдХреНрдпреВрдПрд▓ рдФрд░ рдЖрд░ рдХреЛрдб:
SELECT field, COUNT(*) FROM Table GROUP BY field
ddply(dataset, ~field, nrow)
рдЖрдк рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓, рдмрд╣реБ-рд╕реНрддрд░реАрдп рд╕рдореВрд╣ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ
compute.data.R
(SQL рдореЗрдВ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рдж рдпрд╣ рджреЛ-рд╕реНрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
mouse.coords.by.win <- ddply( coords, ~window, function(df) { res <- ddply( df, .(x=as.integer(x/binsize), y=as.integer(y/binsize)), .fun=nrow, .drop=F) res$V1 <- res$V1 / max(res$V1) res$cnt <- nrow(df) res })
рдпрд╣ рдХреЛрдб рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдВрдбреЛ (
window
рдХреЙрд▓рдо) рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдорд╛рдЙрд╕ рдХрд╛ рд╡рд┐рддрд░рдг рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ
binsize
рдкрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╕рдордиреНрд╡рдп рдХрд░рддрд╛ рд╣реИред
рдкрд╛рдпрдерди рдХреАрд▓реЙрдЧрд░
рдПрдХреНрд╕ рд╕рд░реНрд╡рд░ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП,
xlib
рд▓рд┐рдП
Python
xlib
; рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ
SQLite
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХрдм рд╕реЗ
xlib
рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ
root
рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛
root
,
xlib
рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
os.environ['XAUTHORITY'] = '/home/USER/.Xauthority'
ред рдлрд┐рд░ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рдЬрд┐рди рдШрдЯрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдмрдирд╛рддреЗ рд╣реИрдВ (рдХреАрд╕реНрдЯреНрд░реЛрдХ, рдмрдЯрди рдФрд░ рдорд╛рдЙрд╕ рдореВрд╡рдореЗрдВрдЯ):
dpy = display.Display(':0') ctx = dpy.record_create_context( 0, [record.AllClients], [{ 'core_requests': (0, 0), 'core_replies': (0, 0), 'ext_requests': (0, 0, 0, 0), 'ext_replies': (0, 0, 0, 0), 'delivered_events': (0, 0), 'device_events': (2, 6),
рдмрд╛рдХреА рд╕рднреА рдХреЛрдб рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХреНрд╕ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
def record_callback(reply): data = reply.data while len(data): event, data = rq.EventField(None).parse_binary_value(data, record_dpy.display, None, None)
рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛ рдореЗрдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ: рд╣рдо рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░, рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ (рдХреНрд╖реЗрддреНрд░ рд╡рд┐рд╡рд░рдг) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреВрдВрдХрд┐ рд╣рдо рдЦрд┐рдбрд╝рдХреА (рдпрд╛ рдЗрд╕рдХреЗ рд╡рд░реНрдЧ) рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдШрдЯрдирд╛ рд╣реБрдИ, рд╣рдореЗрдВ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рднреА
xlib
рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
windowvar = dpy.get_input_focus().focus wmclass = windowvar.get_wm_class()
рдмрд╛рдХреА рдХреЛрдб рдХреЛ рдХреЛрдб рд╕реЗ рдХреБрдВрдЬреА рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдирд╛рдо рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рдШрдЯрдирд╛ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЫреЛрдЯреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ: рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдлреНрд▓рд╢ рдЗрд╡реЗрдВрдЯ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдлреНрд▓рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬрдм рдЙрдирдореЗрдВ рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рддреЛ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рд▓рдЧрднрдЧ рд╣рд░ 100 рдШрдЯрдирд╛рдУрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддрд╛ рд╣реВрдВ:
if randint(0, 100) <= 0: dbconn.commit()
рдмреЗрд╢рдХ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рджреМрд░рд╛рди, рд╣рд╛рд▓ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдЪрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред
рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛:
CREATE TABLE KeyEvents(TimeStamp REAL, KeyName TEXT, EventType INTEGER, WindowClass TEXT); CREATE TABLE MouseBtnEvents(TimeStamp REAL, KeyName TEXT, EventType INTEGER, WindowClass TEXT); CREATE TABLE MouseMoves(TimeStamp REAL, MoveX INTEGER, MoveY INTEGER, WindowClass TEXT);
рдирд┐рд╖реНрдХрд░реНрд╖
рдирддреАрдЬрддрди, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐
R
- рдЗрд╕ рддрд░рд╣ рдХреА рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рднрд╛рд╖рд╛ рд╣реИ, рдПрдХреНрд╕ рд╕рд░реНрд╡рд░ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдкрд╛рд░рджрд░реНрд╢реА рдХрдмреНрдЬрд╛ рдХреЗ рд╕рд╛рде, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕реБрдВрджрд░ рдЖрдВрдХрдбрд╝реЗ рдорд┐рд▓реЗред рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдХрд┐ рдЪрд╛рд░реНрдЯ рдФрд░ рдЯреЗрдмрд▓ рдЕрднреА рднреА рдЗрд╕ рддрд░рд╣ рдХреА "рд░рд┐рдкреЛрд░реНрдЯ" рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рднреА рд╕реБрдирдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛
(рдпрджрд┐ рдХреЛрдИ рдкрд╣рд▓реЗ рдпрд╣рд╛рдВ рдкрдврд╝рд╛ рдерд╛) ред
рдкреБрдирд╢реНрдЪ: рдХреГрдкрдпрд╛ рдЖрдВрдХрдбрд╝реЛрдВ рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рдХрд┐рддрд╛рдм рдпрд╛ рдСрдирд▓рд╛рдЗрди рдХреЛрд░реНрд╕ рдФрд░ / рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЪрд┐рддреНрд░рдордп рджреГрд╢реНрдп рдХреА рд╕рд▓рд╛рд╣ рджреЗрдВред
UPD1: рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рдЕрджреНрдпрддрди рдЬрд╛рдирдХрд╛рд░реАред