|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 64560.4481 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
14.01.2010, 19:16
|
#1
|
Senior Member
Регистрация: 01.02.2008
Адрес: Perm
Сообщений: 627
Бабло: $18225
|
gmail кто-то победил?
А именно защиту от автореги.
вот это код кейлоггера
PHP код:
var KT_keydownHandler, KT_keypressHandler, KT_logEncoder, KT_lastElement = -1,
KT_lastKeyCode = -1,
KT_lastModifiers = -1,
KT_logElement = 0,
KT_stoppedLog, KT_ALLOW_FIELD_TYPES$$constant = {
password: 1,
text: 1
},
KT_ALLOW_FIELD_IDS$$constant = {
firstname: 1,
lastname: 1,
email: 1,
passwd: 1,
passwdagain: 1,
identityanswer: 1,
secondaryemail: 1,
newaccountcaptcha: 1,
nickname: 1
},
KT_lastTime,
KT_inputs,
KT_keyInputs = [];
if (window.captureEvents) {
Event.KEYPRESS && window.captureEvents(Event.KEYPRESS);
Event.KEYDOWN && window.captureEvents(Event.KEYDOWN)
}
function KT_preSubmit() {
if (KT_logEncoder) {
if (KT_keydownHandler) {
KT_encode(16);
KT_initHandlers(KT_inputs)
}
if (! (KT_logEncoder.d == 0)) {
EN_encodeGroup(KT_logEncoder, KT_logEncoder.p);
KT_logEncoder.p = 0
}
}
}
function KT_encode(a) {
a < 0 ? KT_stopLog() : EN_encode(KT_logEncoder, a)
}
function KT_init(a, c, e) {
KT_logElement = a;
if (!a.value) a.value = "A";
KT_logEncoder = {
e: a,
p: 0,
d: 0
};
KT_initHandlers(e);
if (!c.value) {
var d;
for (d = 1; d < KT_keyInputs.length; d++) c.value += KT_keyInputs[d].name + " "
}
}
function KT_event(a, c) {
if (KT_logElement.value.length > 3000) {
KT_encode(17);
KT_stopLog()
} else {
var e, d = (new Date).getTime(),
f = d - KT_lastTime;
KT_lastTime = d;
e = f;
var b = a.k,
g = a.t,
h = a.m;
if (! (a.m & 3)) {
c |= 2;
if (b >= 65 && b <= 90) b = 65;
else if (b >= 48 && b <= 57) b = 48;
else if (c & 1) if (b >= 97 && b <= 122) b = 65;
else if (b == 197 || b == 229) c &= 5;
else if (b >= 192 && b <= 687) b = 192;
else if (b >= 1536) b = 1536;
else if (b >= 912) b = 912;
else if (b >= 160) b = 160;
else if (b >= 127) c &= 5;
else if (b >= 33) b = 59;
else c &= 5;
else if (b < 48) c &= 5;
else if (b < 65) b = 59;
else if (b < 96) c &= 5;
else if (b < 112) b = 96;
else if (b < 187) c &= 5;
else b = 59
}
if (g != KT_lastElement) {
KT_encode(c | 4);
KT_encode(g);
KT_lastElement = g
} else {
if (b == KT_lastKeyCode && h == KT_lastModifiers) {
KT_encode(c | 8);
KT_encode(e);
return
}
KT_lastKeyCode = b;
KT_lastModifiers = h;
KT_encode(c)
}
KT_encode(b);
KT_encode(h);
KT_encode(e)
}
}
function KT_initHandlers(a) {
KT_keydownHandler = 0;
KT_inputs = a;
KT_stoppedLog = 0;
var c, e = 1;
for (c = 0; c < KT_inputs.length; c++) {
var d = KT_inputs[c];
if (! (!KT_ALLOW_FIELD_TYPES$$constant[d.type] || d.id && !KT_ALLOW_FIELD_IDS$$constant[d.id.toLowerCase()] || d.offsetHeight == 0)) {
d.onkeydown = KT_initKeyHandler;
KT_keyInputs[e] = d;
d.setAttribute("n", e++)
}
}
}
function KT_stopLog() {
if (KT_keyInputs) for (var a = 1; a < KT_keyInputs.length; a++) {
KT_keyInputs[a].onkeydown = 0;
KT_keyInputs[a].onkeypress = 0
}
KT_stoppedLog = 1
}
function KT_getEventModel(a) {
if (!a) {
a = window.event;
if (typeof a.keyCode == "number") return 1;
return 0
}
if (typeof a.which == "number") return 3;
if (typeof a.keyCode == "number") return 2;
if (typeof a.charCode == "number") return 4;
return 0
}
function KT_initKeyHandler(a) {
var c, e, d = KT_logElement.value.length,
f = "";
c = KT_getEventModel(a);
switch (c) {
case 1:
a = window.event;
f += "f=window.event;var b=f.keyCode;";
break;
case 3:
f += "var b=f.which;";
break;
case 2:
f += "var b=f.keyCode;";
break;
case 4:
f += "var b=f.charCode;";
break
}
KT_keypressHandler = 0;
if (c != 0) {
if (typeof a.modifiers == "number") f += "var c=f.modifiers;";
else if (typeof a.shiftKey == "boolean") f += "var c=f.shiftKey*4+f.ctrlKey*2+f.altKey;";
else KT_stopLog();
if (a.srcElement) f += "var d=f.srcElement;";
else if (a.target) f += "var d=f.target;";
else KT_stopLog()
} else KT_stopLog();
if (!KT_stoppedLog) {
f += 'var e=0;if(d.getAttribute("n")){e=d.getAttribute("n")}KT_event({k:b, m:c, t:e},';
KT_keydownHandler = new Function("f", f + "0)");
KT_keypressHandler = new Function("f", f + "1)");
KT_lastTime = (new Date).getTime();
KT_encode(0);
KT_encode(KT_lastTime);
if (d <= 1) {
KT_encode(c);
KT_encode(KT_keyInputs.length - 1)
}
}
var b;
for (e = 1; e < KT_keyInputs.length; e++) {
b = KT_keyInputs[e];
if (KT_keydownHandler) {
b.onkeydown = KT_keydownHandler;
b.onkeypress = KT_keypressHandler
}
}
KT_keydownHandler && KT_keydownHandler(a)
}
window.KT_init = KT_init;
window.KT_preSubmit = KT_preSubmit;
this.KT_event = KT_event;
var EN_CBASE$$constant = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 *-._".length,
EN_EBASE$$constant = [5, 4, 5, 5, 4, 5, 5, 4, 5, 4, 5],
EN_nBase = [],
EN_vBase = [1];
(function () {
var a;
EN_nBase[0] = EN_EBASE$$constant[0] - 1;
for (a = 1; a < EN_EBASE$$constant.length; a++) {
EN_nBase[a] = EN_EBASE$$constant[a] - 1;
EN_vBase[a] = EN_vBase[a - 1] * EN_EBASE$$constant[a - 1]
}
})();
function EN_encodeGroup(a, c) {
var e;
for (e = 0; e < 4; e++) {
var d = c % EN_CBASE$$constant;
a.e.value += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 *-._".charAt(d);
c = (c - d) / EN_CBASE$$constant
}
a.d = 0
}
function EN_encode(a, c) {
var e = a.p;
function d(g) {
e += g * EN_vBase[a.d++];
if (a.d >= EN_EBASE$$constant.length) {
EN_encodeGroup(a, e);
e = 0
}
}
for (var f = EN_nBase[a.d]; c > 0;) {
var b = c % f;
c = (c - b) / f;
d(b);
f = EN_nBase[a.d]
}
d(f);
a.p = e;
return a
};
на выходе получается зашифрованная строка
может кто-то подсказать по алгоритму? перенесу сам
либо готовый код есть может у кого (php или python)
|
|
|
14.01.2010, 20:04
|
#2
|
Senior Member
Регистрация: 08.07.2007
Сообщений: 177
Бабло: $34565
|
нашел тут линк код PHP
PHP код:
<?php
class GmailKtl { protected $log_encoder = null; protected $last_element = -1; protected $last_key_code = -1; protected $last_modifiers = -1; protected $log_element; protected $stopped_log = false; protected $last_time = null; protected $inputs = null; // encoder protected $en_e_base; protected $en_n_base; protected $en_v_base; // own fields protected $ktl = 'A'; protected $ktf = ''; protected $fields; protected $handlers; public function __construct() { $this->key_inputs = array(); $this->log_element = array('value' => ''); $this->en_e_base = array(5, 4, 5, 5, 4, 5, 5, 4, 5, 4, 5); $this->en_n_base = array(); $this->en_v_base = array(1); $this->en_n_base[0] = $this->en_e_base[0] - 1; for ($a = 1; $a < count($this->en_e_base); ++$a) { $this->en_n_base[$a] = $this->en_e_base[$a] - 1; $this->en_v_base[$a] = $this->en_v_base[$a - 1] * $this->en_e_base[$a - 1]; } $this->log_encoder = array( 'p' => 0, 'd' => 0 ); $this->inputs = array( 'FirstName' => 1, 'LastName' => 2, 'Email' => 3, 'Passwd' => 4, 'PasswdAgain' => 5, 'IdentityAnswer' => 6, 'SecondaryEmail' => 7, 'newaccountcaptcha' => 8 ); $this->handlers = array(); foreach (array_keys($this->inputs) as $key) { $this->handlers[$key] = $this->ktf .= $key.' '; } } public function kt_pre_submit() { if ($this->log_encoder != null) { if (strlen($this->ktl) > 1) { $this->kt_encode(16); if ($this->log_encoder['d'] != 0) { $this->en_encode_group($this->log_encoder['p']); $this->log_encoder['p'] = 0; } } } } public function kt_encode($a) { if ($a < 0) $this->stopped_log = true; else $this->en_encode($a); } public function kt_event($key, $modifiers, $e, $repeated, $time_diff) { // maximum length if (!$this->stopped_log && strlen($this->ktl) > 3000) { $this->kt_encode(17); $this->stopped_log = true; } else { // invoked by: /* function anonymous(f) { var b = f.which; var c = f.shiftKey * 4 + f.ctrlKey * 2 + f.altKey; var d = f.target; var e = 0; if (d.getAttribute("n")) { e = d.getAttribute("n"); } KT_event({k: b, m: c, t: e}, 1); // 0 for down 1 for up } */ // if (!($modifiers&3)) // ctrl / alt // { $repeated |= 2; if ($key >= 65 && $key <= 90) $key = 65; else if ($key >= 48 && $key <= 57) $key = 48; else if ($repeated & 1) if ($key >= 97 && $key <= 122) $key = 65; else if ($key == 197 || $key == 229) $repeated &= 5; else if ($key >= 192 && $key <= 687) $key = 192; else if ($key >= 1536) $key = 1536; else if ($key >= 912) $key = 912; else if ($key >= 160) $key = 160; else if ($key >= 127) $repeated &= 5; else if ($key >= 33) $key = 59; else $repeated &= 5; else if ($key < 48) $repeated &= 5; else if ($key < 65) $key = 59; else if ($key < 96) $repeated &= 5; else if ($key < 112) $key = 96; else if ($key < 187) $repeated &= 5; else $key = 59; // } if ($this->last_element != $e) { $this->kt_encode($repeated | 4); $this->kt_encode($e); $this->last_element = $e; } else { if ($key == $this->last_key_code && $modifiers == $this->last_modifiers) { $this->kt_encode($repeated | 8); $this->kt_encode($time_diff); return; } $this->last_key_code = $key; $this->last_modifiers = $modifiers; $this->kt_encode($repeated); } $this->kt_encode($key); $this->kt_encode($modifiers); $this->kt_encode($time_diff); } } public function en_encode_group($c) { for ($i = 0; $i < 4; ++$i) { $b = fmod($c, 67); $charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 *-._'; $this->ktl .= $charset[$b]; $c = ($c - $b) / 67; } $this->log_encoder['d'] = 0; } public function en_encode($c) { $d = $this->log_encoder['p']; for ($e = $this->en_n_base[$this->log_encoder['d']]; $c > 0; ) { $f = fmod($c, $e); $c = ($c - $f) / $e; // b() $d += $f * $this->en_v_base[$this->log_encoder['d']++]; if ($this->log_encoder['d'] >= count($this->en_e_base)) { $this->en_encode_group($d); $d = 0; } $e = $this->en_n_base[$this->log_encoder['d']]; } // b() $d += $e * $this->en_v_base[$this->log_encoder['d']++]; if ($this->log_encoder['d'] >= count($this->en_e_base)) { $this->en_encode_group($d); $d = 0; } $this->log_encoder['p'] = $d; } public function get_ktl() { return $this->ktl; } public function get_ktf() { return $this->ktf; } protected function mstime() { return round(microtime(true) * 1000); } public function key($field, $key, $press = false, $shift = false) { if (strlen($this->ktl) <= 1) { $this->last_time = $this->mstime(); $this->kt_encode(0); $this->kt_encode($this->last_time); $this->kt_encode(3); // c = 3 -> b += "var b=f.which;"; $this->kt_encode(count($this->inputs) - 1); } $time = $this->mstime(); $diff = $time - $this->last_time; $this->last_time = $time; $this->kt_event($key, $shift << 2, $this->inputs[$field], $press, $diff); } public function populate_field($field, $string) { foreach (str_split($string) as $letter) { if (strtoupper($letter) == $letter) { $this->key($field, 16, 0, 1); // shift usleep(rand(80, 150) * 1000); $this->key($field, ord($letter), 0, 1); // key } else { $this->key($field, ord($letter)); // key } usleep(rand(10, 20) * 1000); $this->key($field, ord(strtoupper($letter)), 1, 1); usleep(rand(70, 150) * 1000); } usleep(rand(200, 400) * 1000); $this->key($field, 9); // tab return $string; } }
/* $gktl = new GmailKtl();
$gktl->populate_field('FirstName', 'Peter'); usleep(800); $gktl->populate_field('LastName', 'Peter'); usleep(3600); $gktl->kt_pre_submit(); // $gktl->kt_event(65, 0, 1, 0, 10);
var_dump($gktl->get_ktl()); */
только я так и не смог его использовать то ли не рабочий, то ли у меня руки кривые
А прошу прощения там автор написал что не довел до ума скрипт...
|
|
|
14.01.2010, 20:55
|
#3
|
Senior Member
Регистрация: 01.02.2008
Адрес: Perm
Сообщений: 627
Бабло: $18225
ТС -->
|
ТС
incognito спасибо! очень полезная инфа. покопаюсь
|
|
|
16.01.2010, 15:25
|
#4
|
Юниор
Регистрация: 20.10.2009
Сообщений: 3
Бабло: $1601
|
юзай webdriver/selenium и не парься
|
|
|
16.01.2010, 18:24
|
#5
|
Senior Member
Регистрация: 01.02.2008
Адрес: Perm
Сообщений: 627
Бабло: $18225
ТС -->
|
ТС
Цитата:
Сообщение от fuckfuck
юзай webdriver/selenium и не парься
|
нет, обертки для браузеров, хуман эмуляторы и тп. мне точно не подойдут
|
|
|
16.01.2010, 18:30
|
#6
|
Senior Member
Регистрация: 15.11.2008
Сообщений: 13,230
Бабло: $247845901
|
Цитата:
Сообщение от Barbados
нет, обертки для браузеров, хуман эмуляторы и тп. мне точно не подойдут
|
почему?
|
|
|
16.01.2010, 18:35
|
#7
|
Senior Member
Регистрация: 01.02.2008
Адрес: Perm
Сообщений: 627
Бабло: $18225
ТС -->
|
ТС
Цитата:
Сообщение от imgreen
почему?
|
попробуй его в 1000 потоков запустить
да и по скорости работы это жесть
тут нужно именно решение под python ну или php.. решение именно этого подлого куска кода джаваскрипта)
incognito пока тоже не получилось заставить его работать
|
|
|
16.01.2010, 18:52
|
#8
|
Senior Member
Регистрация: 08.07.2007
Сообщений: 177
Бабло: $34565
|
Ну я не программист, так просто балуюсь...
ЗЫ: Hector писал что победил, спроси у него может подскажет чего.
|
|
|
16.01.2010, 18:58
|
#9
|
Senior Member
Регистрация: 01.02.2008
Адрес: Perm
Сообщений: 627
Бабло: $18225
ТС -->
|
ТС
угу, спрошу
|
|
|
16.01.2010, 20:32
|
#10
|
hustle
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
|
это мой хлебушек. я не спалю, думаю это понятно.....
|
|
|
|