<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>rebl0g</title>
	<atom:link href="http://rebl0g.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://rebl0g.wordpress.com</link>
	<description>Blog about reverse engineering</description>
	<lastBuildDate>Tue, 24 Jan 2012 10:25:25 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='rebl0g.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>rebl0g</title>
		<link>http://rebl0g.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://rebl0g.wordpress.com/osd.xml" title="rebl0g" />
	<atom:link rel='hub' href='http://rebl0g.wordpress.com/?pushpress=hub'/>
		<item>
		<title>О чем молчат маркетологи microsoft windows</title>
		<link>http://rebl0g.wordpress.com/2012/01/24/%d0%be-%d1%87%d0%b5%d0%bc-%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d1%82-%d0%bc%d0%b0%d1%80%d0%ba%d0%b5%d1%82%d0%be%d0%bb%d0%be%d0%b3%d0%b8-microsoft-windows/</link>
		<comments>http://rebl0g.wordpress.com/2012/01/24/%d0%be-%d1%87%d0%b5%d0%bc-%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d1%82-%d0%bc%d0%b0%d1%80%d0%ba%d0%b5%d1%82%d0%be%d0%bb%d0%be%d0%b3%d0%b8-microsoft-windows/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 10:19:20 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[windows home]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=186</guid>
		<description><![CDATA[Решили вы к примеру с перепою купить лицензионный windows, зашли на страничку сравнения редакций http://windows.microsoft.com/en-US/windows7/products/compare посмотрели на табличку, и подумали: &#171;Что я дурак? Платить за professional ради Windows XP Mode, BitLocket и возможность работы в домене? Мне для дома home premium будет достаточно.&#187; Купили, поставили и тут выясняется&#8230; Фича №1 Visual Studio Remote Debugger работает [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=186&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Решили вы к примеру с перепою купить лицензионный windows, зашли на страничку сравнения редакций http://windows.microsoft.com/en-US/windows7/products/compare посмотрели на табличку, и подумали: &laquo;Что я дурак? Платить за professional ради Windows XP Mode, BitLocket и возможность работы в домене? Мне для дома home premium будет достаточно.&raquo; Купили, поставили и тут выясняется&#8230;<br />
<span id="more-186"></span><br />
<strong>Фича №1</strong><br />
Visual Studio Remote Debugger работает в home версиях, только для Native отладки. Отладка .NET накрывается медным тазом.</p>
<p><strong>Фича №2</strong><br />
Вы решили писать программы для windows mobile, ставите себе студию, sdk, образы эмулятора. Доходите до установки Virtual PC, без которого эмулятор не сможет ходить в сеть и соединиться по DMA с &laquo;activesync&raquo;. И тут оба-на! Virtual PC нельзя установить на home, покупайте professional, потому что его интегрировали в professional как windows xp mode.</p>
<p>Думаю, что есть какие-то еще такие скрытые фишки home версий, присылайте мне если знаете. Народ должен знать своих героев.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/186/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/186/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/186/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=186&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2012/01/24/%d0%be-%d1%87%d0%b5%d0%bc-%d0%bc%d0%be%d0%bb%d1%87%d0%b0%d1%82-%d0%bc%d0%b0%d1%80%d0%ba%d0%b5%d1%82%d0%be%d0%bb%d0%be%d0%b3%d0%b8-microsoft-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
		<item>
		<title>Макросы &#8211; это все-таки опасно&#8230;</title>
		<link>http://rebl0g.wordpress.com/2012/01/07/%d0%bc%d0%b0%d0%ba%d1%80%d0%be%d1%81%d1%8b-%d1%8d%d1%82%d0%be-%d0%b2%d1%81%d0%b5-%d1%82%d0%b0%d0%ba%d0%b8-%d0%be%d0%bf%d0%b0%d1%81%d0%bd%d0%be/</link>
		<comments>http://rebl0g.wordpress.com/2012/01/07/%d0%bc%d0%b0%d0%ba%d1%80%d0%be%d1%81%d1%8b-%d1%8d%d1%82%d0%be-%d0%b2%d1%81%d0%b5-%d1%82%d0%b0%d0%ba%d0%b8-%d0%be%d0%bf%d0%b0%d1%81%d0%bd%d0%be/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 13:50:23 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[c++]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=181</guid>
		<description><![CDATA[Ловили недавно просто замечательный баг, который, как оказалось, растет из макроса. Чтобы продемонстрировать вот код тестового приложения: #include "stdafx.h" #include #include #include #define DECLARE_UNICODE_STRING_BY_WSTRING(strName, stdWstring) \ UNICODE_STRING strName = {(USHORT)stdWstring.size() * 2, (USHORT)stdWstring.size() * 2, (PWSTR)stdWstring.c_str()} std::wstring GetPath() { return L"C:\\windows\\system32"; } int _tmain(int argc, _TCHAR* argv[]) { DECLARE_UNICODE_STRING_BY_WSTRING(moduleName, GetPath()); return 0; //здесь moduleName.Buffer указывает [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=181&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ловили недавно просто замечательный баг, который, как оказалось, растет из макроса.<br />
<span id="more-181"></span><br />
Чтобы продемонстрировать вот код тестового приложения:</p>
<pre>
#include "stdafx.h"
#include
#include
#include 

#define DECLARE_UNICODE_STRING_BY_WSTRING(strName, stdWstring) \
	UNICODE_STRING strName = {(USHORT)stdWstring.size() * 2, (USHORT)stdWstring.size() * 2, (PWSTR)stdWstring.c_str()}

std::wstring GetPath()
{
	return L"C:\\windows\\system32";
}

int _tmain(int argc, _TCHAR* argv[])
{

	DECLARE_UNICODE_STRING_BY_WSTRING(moduleName, GetPath());
	return 0; //здесь moduleName.Buffer указывает на пустую строку
}
</pre>
<p>Как же так получается, что строка становится пустой. Видно это только из ассемблера:</p>
<pre>
.text:00411558                 call    GetPath(void)
...
.text:00411581                 call    ds:std::basic_string::c_str(void)
...
.text:0041158E                 mov     [ebp+moduleNameUs.Buffer], eax
...
.text:004115A0                 call    ds:std::basic_string::~basic_string
</pre>
<p>Вызывается деструктор!<br />
А связано это с тем, что область видимости экземпляра std::wstring, который вернула GetPath(), это:</p>
<pre>
{(USHORT)stdWstring.size() * 2, (USHORT)stdWstring.size() * 2, (PWSTR)stdWstring.c_str()}
</pre>
<p>То есть сразу же после, того как moduleName.Buffer будет присвоено значение, будет вызыван деструктор. И сделано это будет до строки return 0; А макрос это скрывает! И создается впечатление что объект будет уничтожен на выходе из функции.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/181/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/181/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/181/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=181&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2012/01/07/%d0%bc%d0%b0%d0%ba%d1%80%d0%be%d1%81%d1%8b-%d1%8d%d1%82%d0%be-%d0%b2%d1%81%d0%b5-%d1%82%d0%b0%d0%ba%d0%b8-%d0%be%d0%bf%d0%b0%d1%81%d0%bd%d0%be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
		<item>
		<title>&#171;Чужие&#187; spinlock&#8217;и</title>
		<link>http://rebl0g.wordpress.com/2011/11/30/%d1%87%d1%83%d0%b6%d0%b8%d0%b5-spinlock%d0%b8/</link>
		<comments>http://rebl0g.wordpress.com/2011/11/30/%d1%87%d1%83%d0%b6%d0%b8%d0%b5-spinlock%d0%b8/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 17:11:23 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[drivers]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=177</guid>
		<description><![CDATA[Иногда приходится делать хаки при написании драйверов, для того чтобы иметь возможность работать со какими-то недокументированными фичами ядра. И для того чтобы обеспечить синхронизацию, приходится использовать чужие объекты синхронизации. Это, как оказалось, вместо стабильности может наоборот привнести хаоса в код. Я хочу рассказать как я обжегся на спинлоках. Для работы со спинлоком есть целый набор [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=177&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Иногда приходится делать хаки при написании драйверов, для того чтобы иметь возможность работать со какими-то недокументированными фичами ядра. И для того чтобы обеспечить синхронизацию, приходится использовать чужие объекты синхронизации. Это, как оказалось, вместо стабильности может наоборот привнести хаоса в код. Я хочу рассказать как я обжегся на спинлоках.<br />
<span id="more-177"></span><br />
Для работы со спинлоком есть целый набор функций:</p>
<blockquote><p>Before calling any support routine that requires access to a caller-supplied executive spin lock, a driver must call KeInitializeSpinLock to initialize the corresponding executive spin lock. Support routines that require an initialized executive spin lock include the following: </p>
<p>KeAcquireSpinLock and, subsequently, KeReleaseSpinLock<br />
KeAcquireSpinLockAtDpcLevel and, subsequently, KeReleaseSpinLockFromDpcLevel<br />
KeAcquireInStackQueuedSpinLock and, subsequently, KeReleaseInStackQueuedSpinLock<br />
KeAcquireInStackQueuedSpinLockAtDpcLevel and, subsequently, KeReleaseInStackQueuedSpinLockFromDpcLevel
</p></blockquote>
<p>Но не пишется о том, что будет если вы используете разные функции на одном и том же спинлоке. Как показал опыт, ничего не будет, ровно до того момента пока не будет захвачен спинлок и начнется ожидание.<br />
Например, ОС инициализирует спинлок через KeInitializeSpinLock, и дальше использует пару KeAcquireSpinLock/KeReleaseSpinLock для работы с ним. Тут вы своим кодом начинаете пытаться лочить его через KeAcquireInStackQueuedSpinLock/KeReleaseInStackQueuedSpinLock. И вот если лок был уже захвачен через KeAcquireSpinLock, KeAcquireInStackQueuedSpinLock рухнет, потому что KeAcquireSpinLock хранит в SPIN_LOCK просто DWORD равный 0 или 1. А KeAcquireInStackQueuedSpinLock хранит там указатель на очередь. Спинлок один и тот же данные абсолютно разные. Соответственно, в спинлоке, залоченом через KeAcquireSpinLock хранится число 1, а KeAcquireInStackQueuedSpinLock попытается прочитать по указателю = 1.</p>
<p>В моем случае все оказалось еще веселее, в одних версии ОС для этого спинлока использовались KeAcquireSpinLock/KeReleaseSpinLock, а в других KeAcquireInStackQueuedSpinLock/KeReleaseInStackQueuedSpinLock. Баг получился плавающим. </p>
<p>Вывод: при использовании чужих спинлоков обязательно проверьте какими функциями пользуется ОС.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/177/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=177&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2011/11/30/%d1%87%d1%83%d0%b6%d0%b8%d0%b5-spinlock%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
		<item>
		<title>Как сделать свой процесс критически важным для системы</title>
		<link>http://rebl0g.wordpress.com/2011/11/30/%d0%ba%d0%b0%d0%ba-%d1%81%d0%b4%d0%b5%d0%bb%d0%b0%d1%82%d1%8c-%d1%81%d0%b2%d0%be%d0%b9-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81-%d0%ba%d1%80%d0%b8%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8-%d0%b2/</link>
		<comments>http://rebl0g.wordpress.com/2011/11/30/%d0%ba%d0%b0%d0%ba-%d1%81%d0%b4%d0%b5%d0%bb%d0%b0%d1%82%d1%8c-%d1%81%d0%b2%d0%be%d0%b9-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81-%d0%ba%d1%80%d0%b8%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8-%d0%b2/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 08:00:39 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Цiкавi дослiди]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=171</guid>
		<description><![CDATA[Мне всегда было интересно каким образом система уходит в BSOD когда убиваешь ей csrss.exe или другой &#171;важный процесс&#187;, но все руки не доходили посмотреть как это работает. А работает это так: if (LastThread &#38;&#38; (Process-&#62;Flags &#38; PS_PROCESS_FLAGS_BREAK_ON_TERMINATION)) { if (KD_DEBUGGER_ENABLED) { PspCatchCriticalBreak ("Critical process 0x%p (%s) exited\n", Process, Process-&#62;ImageFileName); } else { KeBugCheckEx (CRITICAL_PROCESS_DIED, (ULONG_PTR)Process, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=171&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Мне всегда было интересно каким образом система уходит в BSOD когда убиваешь ей csrss.exe или другой &laquo;важный процесс&raquo;, но все руки не доходили посмотреть как это работает.<br />
<span id="more-171"></span><br />
А работает это так:</p>
<pre>
if (LastThread &amp;&amp;
    (Process-&gt;Flags &amp; PS_PROCESS_FLAGS_BREAK_ON_TERMINATION)) {
    if (KD_DEBUGGER_ENABLED) {
        PspCatchCriticalBreak ("Critical process 0x%p (%s) exited\n",
                               Process,
                               Process-&gt;ImageFileName);
    } else {
        KeBugCheckEx (CRITICAL_PROCESS_DIED,
                      (ULONG_PTR)Process,
                      0,
                      0,
                      0);
    }
}
</pre>
<p>Вот такой код в PspExitThread(). Если у процесса стоит флаг PS_PROCESS_FLAGS_BREAK_ON_TERMINATION, то система героически уйдет в BSOD.</p>
<p>Какой из этого следует вывод: любой процесс можно сделать критическим для системы. То есть запросто можно какой-то notepad.exe сделать критическим. Более того, не нужно лезть для этого в EPROCESS. Есть NtSetInformationProcess() с типом ProcessBreakOnTermination, и похоже что это можно даже сделать из ring-3! </p>
<p>Так что убивая процесс, стоит проверить, а не поставил ли он себе такой флаг <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=171&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2011/11/30/%d0%ba%d0%b0%d0%ba-%d1%81%d0%b4%d0%b5%d0%bb%d0%b0%d1%82%d1%8c-%d1%81%d0%b2%d0%be%d0%b9-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81-%d0%ba%d1%80%d0%b8%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%b8-%d0%b2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
		<item>
		<title>Бесплатное повышение уровня безопасности приложений, такое бесплатное</title>
		<link>http://rebl0g.wordpress.com/2011/10/11/%d0%b1%d0%b5%d1%81%d0%bf%d0%bb%d0%b0%d1%82%d0%bd%d0%be%d0%b5-%d0%bf%d0%be%d0%b2%d1%8b%d1%88%d0%b5%d0%bd%d0%b8%d0%b5-%d1%83%d1%80%d0%be%d0%b2%d0%bd%d1%8f-%d0%b1%d0%b5%d0%b7%d0%be%d0%bf%d0%b0%d1%81/</link>
		<comments>http://rebl0g.wordpress.com/2011/10/11/%d0%b1%d0%b5%d1%81%d0%bf%d0%bb%d0%b0%d1%82%d0%bd%d0%be%d0%b5-%d0%bf%d0%be%d0%b2%d1%8b%d1%88%d0%b5%d0%bd%d0%b8%d0%b5-%d1%83%d1%80%d0%be%d0%b2%d0%bd%d1%8f-%d0%b1%d0%b5%d0%b7%d0%be%d0%bf%d0%b0%d1%81/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 10:10:35 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Цiкавi дослiди]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=164</guid>
		<description><![CDATA[Недавно наткнутлся на статью про EMET(Enhanced Mitigation Experience Toolkit). Тулза, которая повышает безопасность небезопасных приложений. Статья меня впечатлила и мне стало интересно как реализована вся эта система. Для начала о том, каким образом оно улучшает работу приложения. EMET регистрирует свои DLL в Application Compatibility Interface aka shim, что позволяет грузить эти dll в процесс на [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=164&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Недавно наткнутлся на <a href="http://kb.atraining.ru/new-emet-2-1/">статью</a> про EMET(Enhanced Mitigation Experience Toolkit). Тулза, которая повышает безопасность небезопасных приложений. Статья меня впечатлила и мне стало интересно как реализована вся эта система.<br />
<span id="more-164"></span><br />
Для начала о том, каким образом оно улучшает работу приложения. EMET регистрирует свои DLL в Application Compatibility Interface aka shim, что позволяет грузить эти dll в процесс на этапе обработки импорта. Дальше, когда DLL подгружена в процесс, она смотрит какие настройки нужно применить для процесса в котором она загрузилась. Настройки лежат в реестре.</p>
<p>Итак технологии.<br />
<strong>DEP</strong><br />
Если у приложения отключен DEP, EMET может его софтварно включить. Через SetProcessDEPPolicy(). То есть малварь при желании тоже может вызвать SetProcessDEPPolicy, и вернуть все как было.</p>
<p><strong>ASLR</strong><br />
Во-первых эта фича работает только начиная с висты, что уже наводит на мысли. Во-вторых ASLR возможен только для образов с флагом IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE в OptionalHeader.DllCharacteristics. То есть форсить особенно не выйдет изначально. Что тогда оно делает? Оно смотрит какие модули в процессе имеют IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE. Размапливает такие модули (NtUnmapViewOfSection), выделяет блок памяти на котором раньше находился модуль, и снова мапит. То есть старый адрес уже занят, и системе приходится ремапить модуль на другие адреса. </p>
<p><strong>SEHOP</strong><br />
Здесь ничего особенного, дописывают всем потокам, которые запущенны на момент срабатывания EMET, свое исключение в Teb.ExceptionList. Так что бы при раскрутке исключения проверить осталось ли оно на месте, или нет. Для того, чтобы сделать проверку вешают свой VEH обработчик. Все хорошо, только новые потоки не контролируются. А на момент срабатывания EMET, создан только главный поток.</p>
<p><strong>EAF</strong><br />
По описанию, создается впечатление, что оно каким-то образом отслеживает попытки доступа к элементам EAT. Но на самом деле все проще. EMET берет указатель на поле IMAGE_DATA_DIRECTORY.VirtualAddress у kernel32.dll и у ntdll.dll и ставит на эти адреса хардварный брейкпоинт (т.е. через отладочные регистры). А чтобы ловить исключения он еще ставит свой VEH обработчик, где собственно принимает решение убивать или не надо. Кроме того, для того чтобы его брейкпоинты не сняли, он с перодичностью 100 мс, переустанавливает брейкпоинты. Вот так чудо защита&#8230; Шелкоду нужно очистить отладочные регистры, а потом просто уложиться в 100 мс <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>HSA</strong><br />
Защита от Heap Spraying. Метод состоит в том, чтобы забить под себя стандартные адреса куда выпрыгивает эксплоит. То есть те блоки, где при Heap Spraying будет лежать шелкод, уже будут заняты, и шелкод выполняться не сможет. Для этого имеется список таких адресов:<br />
<code>0x0a040a04<br />
0x0a0a0a0a<br />
0x0b0b0b0b<br />
0x0c0c0c0c<br />
0x0d0d0d0d<br />
0x0e0e0e0e<br />
0x04040404<br />
0x05050505<br />
0x06060606<br />
0x07070707<br />
0x08080808<br />
0x09090909<br />
0x14141414</code><br />
Обход со стороны малвареписателей простой: использовать другие адреса <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><strong>NPA</strong><br />
Защита от попытки выделить память по адресу 1, т.е. нулевая страница. Защита сводится к тому, что EMET сам вызывает NtAllocateVirtualMemory по этому адресу. Снова метод &laquo;первонаха&raquo;. Ничто не мешает освободить эту память и выделить под себя снова.</p>
<p><strong>BUR</strong></p>
<blockquote><p>Суть проста – к базовым адресам выделяемых сегментов (кучи, стека, и прочих) прибавляется случайное число размером в 8 бит</p></blockquote>
<p>Это неправда. Они просто выделяют рандомное количество(от 0 до 255, отсюда и бред про 8 бит) блоков памяти размером 0&#215;10000 для того, чтобы heap имел псевдорандомный адрес. Опять же, за счет того, что стандартные адреса уже заняты, heap выделят в другом месте. Но он все равно будет выравнен под размер страницы. </p>
<p><strong>Вывод</strong><br />
Нефиговые такие memory leak&#8217;и делает этот EMET. А чего вы хотели за такие деньги? Бесплатная халтура.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/164/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/164/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/164/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=164&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2011/10/11/%d0%b1%d0%b5%d1%81%d0%bf%d0%bb%d0%b0%d1%82%d0%bd%d0%be%d0%b5-%d0%bf%d0%be%d0%b2%d1%8b%d1%88%d0%b5%d0%bd%d0%b8%d0%b5-%d1%83%d1%80%d0%be%d0%b2%d0%bd%d1%8f-%d0%b1%d0%b5%d0%b7%d0%be%d0%bf%d0%b0%d1%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
		<item>
		<title>Как узнать имя по почтовому адресу. Недокументированная фича почтовых сервисов.</title>
		<link>http://rebl0g.wordpress.com/2011/10/07/%d0%ba%d0%b0%d0%ba-%d1%83%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%b8%d0%bc%d1%8f-%d0%bf%d0%be-%d0%bf%d0%be%d1%87%d1%82%d0%be%d0%b2%d0%be%d0%bc%d1%83-%d0%b0%d0%b4%d1%80%d0%b5%d1%81%d1%83-%d0%bd%d0%b5%d0%b4/</link>
		<comments>http://rebl0g.wordpress.com/2011/10/07/%d0%ba%d0%b0%d0%ba-%d1%83%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%b8%d0%bc%d1%8f-%d0%bf%d0%be-%d0%bf%d0%be%d1%87%d1%82%d0%be%d0%b2%d0%be%d0%bc%d1%83-%d0%b0%d0%b4%d1%80%d0%b5%d1%81%d1%83-%d0%bd%d0%b5%d0%b4/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 16:55:46 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Цiкавi дослiди]]></category>
		<category><![CDATA[anonymity]]></category>
		<category><![CDATA[email]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=159</guid>
		<description><![CDATA[Не спалось мне, и пришла в голову одна интересная мысль на счет того, на сколько &#171;уведомление о прочтении письма&#187; безопасно с точки зрения анонимности. И я решил проверить. Берем, регистрируем два ящика на mail.ru (на самом деле не важно где, я так понял описанная фича есть у всех почтовых серверов с вэб интерфейсом). Что-то типа [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=159&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Не спалось мне, и пришла в голову одна интересная мысль на счет того, на сколько &laquo;уведомление о прочтении письма&raquo; безопасно с точки зрения анонимности. И я решил проверить.<br />
<span id="more-159"></span><br />
Берем, регистрируем два ящика на mail.ru (на самом деле не важно где, я так понял описанная фича есть у всех почтовых серверов с вэб интерфейсом). Что-то типа &laquo;Дмитрий Сорокин&raquo; lisyok@mail.ru и &laquo;Гарик Харламов&raquo; buldog@mail.ru. </p>
<p>Изначально, у lisyok@mail.ru нет информации о том, что buldog@mail.ru &#8211; это Гарик Харламов. А buldog@mail.ru не знает что lisyok@mail.ru &#8211; это Дмитрий Сорокин. Если lisyok напишет просто письмо buldog&#8217;у, но buldog не ответит, то так они ничего и не узнают друг о друге. </p>
<p>Другое дело, если отправить письмо с запросом подтверждения о прочтении. Если buldog разрешит отправить отчет о прочтении, lisyok получит письмо вида:<br />
<code><br />
Ваше письмо от Дмитрий Сорокин<br />
    Тема asdasd<br />
    Отправленное Fri, 07 Oct 2011 19:36:03<br />
Было прочитано Fri, 07 Oct 2011 20:36:34<br />
    Получателем Гарик Харламов<br />
</code></p>
<p>Зачет! Человек просто подтвердил, что он согласен выслать подтверждение о прочтении, но он не говорил, что хочет заодно отправить информацию о том, как его зовут. И теперь lisyok знает, buldog@mail.ru &#8211; это Гарик Харламов.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/159/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/159/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/159/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=159&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2011/10/07/%d0%ba%d0%b0%d0%ba-%d1%83%d0%b7%d0%bd%d0%b0%d1%82%d1%8c-%d0%b8%d0%bc%d1%8f-%d0%bf%d0%be-%d0%bf%d0%be%d1%87%d1%82%d0%be%d0%b2%d0%be%d0%bc%d1%83-%d0%b0%d0%b4%d1%80%d0%b5%d1%81%d1%83-%d0%bd%d0%b5%d0%b4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
		<item>
		<title>На чем писать GUI для C++ приложений</title>
		<link>http://rebl0g.wordpress.com/2011/10/06/%d0%bd%d0%b0-%d1%87%d0%b5%d0%bc-%d0%bf%d0%b8%d1%81%d0%b0%d1%82%d1%8c-gui-%d0%b4%d0%bb%d1%8f-c-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9/</link>
		<comments>http://rebl0g.wordpress.com/2011/10/06/%d0%bd%d0%b0-%d1%87%d0%b5%d0%bc-%d0%bf%d0%b8%d1%81%d0%b0%d1%82%d1%8c-gui-%d0%b4%d0%bb%d1%8f-c-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 19:40:43 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Цiкавi дослiди]]></category>
		<category><![CDATA[gui]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=137</guid>
		<description><![CDATA[Представьте ситуацию: вы пишете-пишете проект, и вдруг этому проекту требуется GUI. И тут вас спрашивают &#171;на чем будем писать?&#187;. Хочу поделиться своими мыслями на тему того, о чем стоит задумываться, перед тем как отвечать на такой вопрос. Я вам конечно &#171;не скажу за всю Одессу&#187;, но думаю что могу сказать про GUI всяких системных утилит [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=137&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Представьте ситуацию: вы пишете-пишете проект, и вдруг этому проекту требуется GUI. И тут вас спрашивают &laquo;на чем будем писать?&raquo;. Хочу поделиться своими мыслями на тему того, о чем стоит задумываться, перед тем как отвечать на такой вопрос.<br />
<span id="more-137"></span><br />
Я вам конечно &laquo;не скажу за всю Одессу&raquo;, но думаю что могу сказать про GUI всяких системных утилит и security-related софта.</p>
<p>На самом деле все фреймворки для написания GUI &#8211; проблемные. Я полностью согласен с <a href="http://www.rsdn.ru/forum/usability/4415382.aspx?tree=tree">фразами</a> о том, что какой фреймворк не выбери, написание кода GUI будет не добавлением, а сращиванием. Обязательно придется переделывать код так, чтобы он вписывался в GUI, а не делать GUI на основе существующего кода. Поэтому надеяться на то, что какой-то фреймворк будет лучше для моего проекта &#8211; бесполезно. И заявления о том, что какой-то фреймворк лучше подходит для каких-то задач, скорее миф чем правда. </p>
<p>Для подтверждения своих слов вот результат исследования фреймворков используемых в современных приложениях:</p>
<table>
<tr>
<td><strong>Приложение</strong></td>
<td><strong>Фреймворк</strong></td>
</tr>
<tr>
<td>acronis true image</td>
<td>QT</td>
</tr>
<tr>
<td>skype</td>
<td>QT</td>
</tr>
<tr>
<td>araxis merge</td>
<td>свой на основе ATL</td>
</tr>
<tr>
<td>teamviewer</td>
<td>WTL</td>
</tr>
<tr>
<td>EaseUS Partition Master Home Edition</td>
<td>GTK</td>
</tr>
<tr>
<td>Folder Lock</td>
<td>HTMLLayout</td>
</tr>
<tr>
<td>agnitum outpost</td>
<td>HTMLLayout</td>
</tr>
<tr>
<td>hex workshop</td>
<td>MFC</td>
</tr>
<tr>
<td>vmware</td>
<td>свой на основе ATL</td>
</tr>
<tr>
<td>trillian</td>
<td>свой на основе GDI+</td>
</tr>
<tr>
<td>drweb</td>
<td>MFC + WTL</td>
</tr>
<tr>
<td>symantec</td>
<td>SymHTML</td>
</tr>
<tr>
<td>kaspersky</td>
<td>QT</td>
</tr>
<tr>
<td>NOD</td>
<td>MFC</td>
</tr>
</table>
<p>Я выбирал приложения где GUI &#8211; это не просто форма, две кнопки, один прогресс и список, и нужно лишь напрячь дизайнера, чтобы он это красиво оформил. Я выбирал приложения, где нужно отображать достаточно много данных, где действительно требовалась большая работа по юзабилити, где есть сложные взаимодействия элементов. Ну и где проект уже существует много лет.</p>
<p>Как вы видите, на любом фреймворке можно написать сложный GUI, и на любом фреймворке можно продолжать его расширять. И как видите, некоторые компании не пугает факт того, что свой делать фреймворк &#8211; это долго и сложно. Пишут.</p>
<p>На что же влияет выбор фреймворка?<br />
1) Конечно же фреймворк влияет на внешний вид. </p>
<p><strong>MFC, ATL, WTL и их потомки</strong><br />
<img src="http://i1-win.softpedia-static.com/screenshots/Hex-Workshop_6.png" alt="" /></p>
<p><img src="http://popprograms.com/reviewsimg/drweb/3.png" alt="" /></p>
<p><img src="http://www.eset-nod32.com.ua/img/obzor/eset_nod_32_obzor_6.jpg" alt="" /></p>
<p><img src="http://www.zipsoft.ru/images/screenshots/big/iviKOT0z7.gif" alt="" /></p>
<p><img src="http://media.pcwin.com/images/screen/64797-araxis_merge.gif" alt="" /></p>
<p><img src="http://kopona.net/uploads/posts/2010-05/1274895970_vmware_workstation_7_interface2.jpg" alt="" /></p>
<p>Комментировать особо нечего. Если сильно постараться, то можно получить конфету похожую на интерфейс windows 7 (Nod), но в целом получается &laquo;классика&raquo;. </p>
<p><strong>QT</strong><br />
<img src="http://img651.imageshack.us/img651/3695/acronis.png" alt="" /></p>
<p><img src="http://softomixer.ru/_ld/104/10481.jpg" alt="" /></p>
<p><img src="http://skype.od.ua/wp-content/uploads/2011/07/63bdc.jpg" alt="" /></p>
<p>Белое, но не пушистое, модное направление.</p>
<p><strong>HtmlLayout и производные</strong><br />
<img src="http://invizz.net/uploads/posts/2010-05/1273908124_agnitum_outpost_firewall_pro___security_suite_pro_.png" alt="" /></p>
<p><img src="http://www.newsoftwares.net/images/encrypt-files-and-create-lockers-large-shot.jpg" alt="" /></p>
<p><img src="http://i.i.com.com/cnwk.1d/i/tim//2009/09/24/Foreman_10883662_3533_Foreman_10883662_3233_nismainUIlg_540x367.jpg" alt="" /></p>
<p>Совсем новое направление, но люди используют. И получается, имхо очень даже прилично.</p>
<p><strong>Экзотика</strong><br />
<img src="http://topdownloads.ru/screenshots/6077590/EaseUS-Partition-Master-Home-Edition.gif" alt="" /><br />
А GTK-то может быть вполне приятным глазу.</p>
<p><img src="http://npopson.com/wp-content/uploads/2010/08/Trillian-Astra_screenshot.jpg" alt="" /><br />
Астру cerulean studios &laquo;пилили&raquo;, насколько я помню, почти 3 года. Все это время они, похоже, изобретали свой кросплатформенный фреймворк с панелями и виджетами на основе GDI+. Поражаюсь как они смогли так долго не выпускать новых версий и не помереть&#8230;</p>
<p>2) Фреймворк влияет на сложность поиска людей<br />
Вот вбили вы себе в голову к примеру, что надо писать GUI только на WxWidgets. Даете объяление, находите какого человека, который думает что знает как писать на wxWidgets. Он начинает делать GUI. GUI растет, кода все больше, а потом этот человек берет и уходит. А за то время, пока вы писали GUI, ситуация изменилась, и желающих писать на wxWidgets больше не осталось. Все ушли на WPF, к примеру. Или еще есть любители wxWidgets, но неспособные разгрестись в сложном GUI, который был создан первым человеком, а профессионалов нет. И что дальше? Переписывать заново? </p>
<p>Поэтому стоит сделать запрос вида &laquo;резюме с++ ИМЯ_ФРЕЙМВОРКА&raquo; в гугл чтобы оценить сложность поиска человека. На момент написания статьи гугл выдавал вот такое:<br />
MFC &#8211; 120000 результатов<br />
WTL &#8211; 17600<br />
ATL &#8211; 46700<br />
QT &#8211; 112000<br />
Htmlayout &#8211; 113 (sic!)<br />
GTK &#8211; 7600<br />
wxWidgets &#8211; 17500<br />
У вас все еще есть вопросы?<br />
Конечно же, эта статистика гугла не говорит о том, что ATL-программиста ровно в 3 раза легче найти, чем WTL-программиста. Но какая-то корреляция здесь есть: ATL-программистов все же проще будет найти, чем человека для GTK или WTL.</p>
<p>Для полноты картины:<br />
C# WPF &#8211; 1280000 результатов! Мухи не ошибаются <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>3) Фреймворк влияет на разработку<br />
И вот только в-третьих стоит начинать думать, о том грабли какого фреймворка, вас ударят менее сильно. Фреймворки навязывают размер приложения, одинаковый/изменчивый внешний вид под разными ОС и темами рабочего стола, сложность создания кастомных контролов, способ создания MUI и хранения ресурсов, степень корявости UI-дизайнера, шаблоны проектирования, но это уже холиварная тема&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=137&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2011/10/06/%d0%bd%d0%b0-%d1%87%d0%b5%d0%bc-%d0%bf%d0%b8%d1%81%d0%b0%d1%82%d1%8c-gui-%d0%b4%d0%bb%d1%8f-c-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b9/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>

		<media:content url="http://i1-win.softpedia-static.com/screenshots/Hex-Workshop_6.png" medium="image" />

		<media:content url="http://popprograms.com/reviewsimg/drweb/3.png" medium="image" />

		<media:content url="http://www.eset-nod32.com.ua/img/obzor/eset_nod_32_obzor_6.jpg" medium="image" />

		<media:content url="http://www.zipsoft.ru/images/screenshots/big/iviKOT0z7.gif" medium="image" />

		<media:content url="http://media.pcwin.com/images/screen/64797-araxis_merge.gif" medium="image" />

		<media:content url="http://kopona.net/uploads/posts/2010-05/1274895970_vmware_workstation_7_interface2.jpg" medium="image" />

		<media:content url="http://img651.imageshack.us/img651/3695/acronis.png" medium="image" />

		<media:content url="http://softomixer.ru/_ld/104/10481.jpg" medium="image" />

		<media:content url="http://skype.od.ua/wp-content/uploads/2011/07/63bdc.jpg" medium="image" />

		<media:content url="http://invizz.net/uploads/posts/2010-05/1273908124_agnitum_outpost_firewall_pro___security_suite_pro_.png" medium="image" />

		<media:content url="http://www.newsoftwares.net/images/encrypt-files-and-create-lockers-large-shot.jpg" medium="image" />

		<media:content url="http://i.i.com.com/cnwk.1d/i/tim//2009/09/24/Foreman_10883662_3533_Foreman_10883662_3233_nismainUIlg_540x367.jpg" medium="image" />

		<media:content url="http://topdownloads.ru/screenshots/6077590/EaseUS-Partition-Master-Home-Edition.gif" medium="image" />

		<media:content url="http://npopson.com/wp-content/uploads/2010/08/Trillian-Astra_screenshot.jpg" medium="image" />
	</item>
		<item>
		<title>Реассемблирование. Full version.</title>
		<link>http://rebl0g.wordpress.com/2011/09/08/%d1%80%d0%b5%d0%b0%d1%81%d1%81%d0%b5%d0%bc%d0%b1%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-full-version/</link>
		<comments>http://rebl0g.wordpress.com/2011/09/08/%d1%80%d0%b5%d0%b0%d1%81%d1%81%d0%b5%d0%bc%d0%b1%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-full-version/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 10:34:52 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Реверсивная инженерия]]></category>
		<category><![CDATA[assembler]]></category>
		<category><![CDATA[IDA]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=126</guid>
		<description><![CDATA[Издавна предпринимались попытки по реассемблированию. Например раз, два и три. Но ни разу не описывался опыт полного, и главное удачного реассемблирования exe файла. Их есть у меня. Для чего это нужно Захотели вы, к примеру, скажем так, написать &#171;полный аналог&#187; любимой программы/игры/операционной системы. Если садиться за декомпиляцию(hexrays не предлагать), то восстановление функции за функцией займет [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=126&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Издавна предпринимались попытки по реассемблированию. Например <a href="http://xtin.activebb.net/t10-topic" target="_blank">раз</a>, <a href="http://www.insidepro.com/kk/150/150r.shtml" target="_blank">два</a> и <a href="http://www.insidepro.com/kk/151/151r.shtml" target="_blank">три</a>. Но ни разу не описывался опыт полного, и главное удачного реассемблирования exe файла. Их есть у меня.<br />
<span id="more-126"></span><br />
<strong>Для чего это нужно</strong><br />
Захотели вы, к примеру, скажем так, написать &laquo;<u>полный</u> аналог&raquo; любимой программы/игры/операционной системы. Если садиться за декомпиляцию(hexrays не предлагать), то восстановление функции за функцией займет годы (скорость где-то 512 кб кода в год). К тому же узнать о том, правильно ли вы все декомпилировали, вы сможете только когда декомпилируете достаточно много кода. Т.е. первый раз месяца через 2-3. За это время можно наплодить столько багов&#8230; Отладка будет та еще.</p>
<p>И чтобы таким делом не заниматься, можно полностью реассемблировать бинарь. То есть сделать полный ассемблерный листинг, привести его к компиляберному состоянию(чтобы на выходе получался работоспособный бинарь). А потом полученный ассемблер можно нужными порциями заменять своим сишным кодом. Благодаря такому подходу баги видны сразу, результаты работы тоже.</p>
<p><strong>Как это сделать</strong></p>
<blockquote><p>how do you do &#8211; как вы это делаете?<br />
alright &#8211; всегда правой. </p></blockquote>
<p>Понадобятся довольно прямые руки и понимание как стыковать ассемблер с си. Но до того как начать декомпиляцию предстоит еще 4 этапа.</p>
<p><strong>Этап №1. Создание базы</strong><br />
Нельзя реассемблировать просто так любую базу иды. Нужна девственная, а не та в которой проводится реверсинг. Иначе это будет весьма веселое занятие, как в <a href="http://www.insidepro.com/kk/151/151r.shtml" target="_blank">статье у Касперски</a>. Наша цель получить компилируемый ассемблер, а не ассемблер похожий на тот, что в IDA (с примененными на нем энумами, структурами, коментами). Поэтому создаем базу с ноля.</p>
<p>Перед тем как создавать базу, я рекомендую изменить в файле ida.cfg настройку</p>
<pre>ASCII_PREFIX            = "a"</pre>
<p>на</p>
<pre>ASCII_PREFIX            = &quot;ga&quot;</pre>
<p>Это префикс, который ида проставляет строкам. Если использовать просто &laquo;a&raquo;, то строка &laquo;%d%d&raquo; получает имя aDD, что является ассемблерной инструкцией. Оно нам надо?</p>
<p>В окне &laquo;Load new file&raquo;:</p>
<li>Отключаем автоанализ: убрать птичку &laquo;Analysis&raquo; &#8211; &laquo;Enabled&raquo;</li>
<li>В &laquo;kernel options 1&#8243; отключаем использование сигнатур &laquo;Use filrt signatures&raquo;</li>
<li>В &laquo;kernel options 2&#8243; отключаем использование уникода &laquo;check for unicode strings&raquo; и &laquo;create function tails&raquo;</li>
<p>Все. Теперь можно грузить.</p>
<p><strong>Этап №2. Подготовка базы к генерации ассемблера</strong><br />
База создалась, но анализ не начался, потому что отключен. Так и должно быть.<br />
Перед тем как отпустить анализ, нужно удалить в окне Type Libraries (shift-F11) все библиотеки типов. Иначе затянет кучу структур и энумов, которые нам при реассембировании будут только проблемы создавать. Отпускаем автоанализ и ждем завершения. </p>
<p>Теперь:<br />
Раскрываем все hidden функции. Иначе в ассемблер попадет текст:</p>
<pre>[00000005 BYTES: COLLAPSED FUNCTION RegisterClassA(x). PRESS KEYPAD "+" TO EXPAND]</pre>
<p>А не сам код.</p>
<p>Удаляем align&#8217;ы. Если ида случайно промаркирует данные кодом, то она запросто может вставить там align директивы, тем самым просто отбросит изначальные данные. И константные указатели в ассемблере начнут указывать в никуда.<br />
Все align директивы нужно удалить. Вот в помощь IDC скрипт:</p>
<pre>
auto ea,f;
for (ea=0x400000;ea&lt;&quot;ваш адрес&quot;;ea++)
{
if (isAlign(GetFlags(ea)))
   MakeUnkn(ea,DOUNK_EXPAND);
}
</pre>
<p>Обязательно нужно отключить деманглинг, иначе MASM потом будет возмущаться.</p>
<p>Импорт. Это проблема с которой сталкиваешься, когда уже казалось бы все проблемы этапа №3 решены. А приходится все начинать заново. Все потому, что ida проставляет импортируемым функциям имена из секции импорта. Она понятия не имеет какие там нужны имена функций, чтобы импорты смог потом подхватить линкер. В двух словах на примере:<br />
Чтобы линкер подхватил импорт win api, например функцию CreateWindowExA импорт должен выглядеть вот так:</p>
<pre>extrn __imp__CreateWindowExA@48:dword</pre>
<p>А ида генерит вот так:</p>
<pre>extrn __imp_CreateWindowExA:dword</pre>
<p>или так:</p>
<pre>extrn CreateWindowExA:dword</pre>
<p>а если импорт встречается дважды, то еще и вот так:</p>
<pre>extrn __imp_CreateWindowExA_0:dword</pre>
<p>Чтобы не повеситься с переделкой вручную, вот облегчающий жизнь кусочек плагина:</p>
<pre>
	for (ea_t ea=НАЧАЛО СЕКЦИИ ИМПОРТА;ea&lt;КОНЕЦ СЕКЦИИ ИМПОРТА;ea+=4)
	{
		int purgedBytes=0;
		if (netnode_supval(ea,0xf,&amp;purgedBytes,sizeof(purgedBytes),&#039;A&#039;)!=-1)
		{

			if (purgedBytes)
				purgedBytes--; // это не хак, там действительно всегда на 1 байт больше

			char name[250]={0};
			get_true_name(BADADDR,ea,name,sizeof(name));

			char * pname=name;
			if (!strncmp(name,&quot;__imp_&quot;,6))
				pname+=6;

			char newName[250]={0};
			sprintf(newName,&quot;__imp__%s@%d&quot;,pname,purgedBytes);
			set_name(ea,newName);
		}

	}</pre>
<p>Этот код вычитывает размер &laquo;purged bytes&raquo; для каждой из функции и заменяет имя импорта на правильное. В моем случае exe файл использовал только библиотеки windows. Соответственно там везде был stdcall, и фокус проканал. Для повторяющися импортов, где в имени был суффикс &laquo;_0&#8243;, пришлось руками удалить дубликат в сгенеренном ассемблере. </p>
<p>В самом конце обязательно нужно проверить, чтобы не было кода в данных. Чтобы не было приколов типа как с align&#8217;ами.</p>
<p>Все, можно генерить ассемблер.</p>
<p><strong>Этап №3. Работа напильником, приведение ассемблера в компиляберный вид</strong><br />
Ассемблер, который генерирует IDA раньше был заточен под TASM, сейчас слава богу есть выбор, и &laquo;Generic for Intel 80&#215;86&#8243; это почти MASM. Поэтому напильником теперь пользоваться приходится гораздо меньше.<br />
Что придется изменить перед тем как пытаться собрать через ML:</p>
<li>Инструкции repnz movXX на rep movXX</li>
<li>Слова Name и Size. Если какая-то переменная или строка будет иметь такое имя &#8211; не скомпилится</li>
<li>Префикс large. Просто удаляем везде.</li>
<li>Префиксы short для jxx. Иногда почему-то приходится делать длиный, хотя в оригинале вроде как расстояние до инструкции позволяло использовать short</li>
<p>Могут быть еще какие-то мелкие проблемы несовместимости синтаксиса иды и MASM. Но не думаю, что будут какие-то особые сложности.<br />
Наконец можно пробовать скомпилировать. </p>
<p>Я все также собираю командой: ML.EXE /coff /Fl /Sf /I. /Zi /c /Cp /Zp1 /Zm /Ta<br />
Потому что мне нужен obj, который я буду потом линковать к моим сишным сорцам. В моем случае перечисленных выше действий оказалось достаточно. Мой asm файл, размером 32 мб, скомпилился в красивый obj.</p>
<p><strong>Этап №4. Сборка в Visual studio</strong><br />
Я создавал пустой проект типа &laquo;windows application&raquo; и добавлял туда конечный asm файл. Дальше прописывал для asm файла custom build tool и командную строку для ML. В настройках линкера я отключал DEP и ASLR, и указывал имя start в поле Entry Point. Этого достаточно, чтобы собрался EXE файл. Таким образом будет получен бинарь который прямо с энтрипоинта двинет в функцию start, которая была точкой входа первоначального EXE. Благодаря этому оригинальный runtime init отработает как надо и (о чудо!) программа запустится.</p>
<p><strong>Что придется доделать</strong><br />
TLS колбэки. В новособранном EXE их нет, придется самостоятельно вызывать их перед запуском рантайма.</p>
<p><strong>Как выносить код из ассемблера</strong><br />
Предположим нашел функцию, которую готов переписать как сишный код, или даже уже ее переписал, но непонятно как теперь ее правильно убрать из ассемблера, так чтобы сохранилась работоспособность. Я делал следующим образом:<br />
1) написал свою функцию в си<br />
2) написал wrapper над своей функцией, чтобы соблюсти конвенцию вызова и сохранить все регистры не измененными. Да, оказывается мало просто call перенаправить, нужно еще и окружение не испортить, чтобы по возвращению из вашей функции код смог продолжить выполнение.<br />
пример враппера, который я использовал для перенаправления fastcall в stdcall:</p>
<pre>
extern "C" __declspec(naked) int * jMyCFunc(Object *object)
{
	static void * result;
	__asm pushad
	__asm push eax
	__asm call MyCFunc
	__asm mov result, eax
	__asm popad
	__asm mov eax, result
	__asm ret
}
</pre>
<p>3) создавал extern декларацию в ассемблере</p>
<pre>extern _jMyCFunc : proc</pre>
<p>4) удалял оригинальную функцию в ассемблере и заменял все call sub_XXXX на call _jMyCFunc</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/126/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/126/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/126/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=126&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2011/09/08/%d1%80%d0%b5%d0%b0%d1%81%d1%81%d0%b5%d0%bc%d0%b1%d0%bb%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-full-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
		<item>
		<title>Ключи автозагрузки в реестре</title>
		<link>http://rebl0g.wordpress.com/2011/06/15/%d0%ba%d0%bb%d1%8e%d1%87%d0%b8-%d0%b0%d0%b2%d1%82%d0%be%d0%b7%d0%b0%d0%b3%d1%80%d1%83%d0%b7%d0%ba%d0%b8-%d0%b2-%d1%80%d0%b5%d0%b5%d1%81%d1%82%d1%80%d0%b5/</link>
		<comments>http://rebl0g.wordpress.com/2011/06/15/%d0%ba%d0%bb%d1%8e%d1%87%d0%b8-%d0%b0%d0%b2%d1%82%d0%be%d0%b7%d0%b0%d0%b3%d1%80%d1%83%d0%b7%d0%ba%d0%b8-%d0%b2-%d1%80%d0%b5%d0%b5%d1%81%d1%82%d1%80%d0%b5/#comments</comments>
		<pubDate>Wed, 15 Jun 2011 09:55:14 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Цiкавi дослiди]]></category>
		<category><![CDATA[автозапуск]]></category>
		<category><![CDATA[реестр]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=120</guid>
		<description><![CDATA[Буду коллекционировать ключи реестра откуда возможен запуск DLL и EXE. Этот пост будет обновляться. Поехали: HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\load HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls HKLM\Software\Microsoft\Rpc\Extensions HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=120&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Буду коллекционировать ключи реестра откуда возможен запуск DLL и EXE. Этот пост будет обновляться.<br />
<span id="more-120"></span><br />
Поехали:</p>
<li>HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\load</li>
<li>HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls</li>
<li>HKLM\Software\Microsoft\Rpc\Extensions</li>
<li>HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon</li>
<li>HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run </li>
<li>HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run</li>
<li>HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs</li>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=120&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2011/06/15/%d0%ba%d0%bb%d1%8e%d1%87%d0%b8-%d0%b0%d0%b2%d1%82%d0%be%d0%b7%d0%b0%d0%b3%d1%80%d1%83%d0%b7%d0%ba%d0%b8-%d0%b2-%d1%80%d0%b5%d0%b5%d1%81%d1%82%d1%80%d0%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
		<item>
		<title>Как запустить Matlab скрипт с коммандной строки</title>
		<link>http://rebl0g.wordpress.com/2011/05/27/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d1%82%d1%8c-matlab-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d1%81-%d0%ba%d0%be%d0%bc%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b9-%d1%81%d1%82/</link>
		<comments>http://rebl0g.wordpress.com/2011/05/27/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d1%82%d1%8c-matlab-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d1%81-%d0%ba%d0%be%d0%bc%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b9-%d1%81%d1%82/#comments</comments>
		<pubDate>Fri, 27 May 2011 15:11:10 +0000</pubDate>
		<dc:creator>Hex</dc:creator>
				<category><![CDATA[Цiкавi дослiди]]></category>
		<category><![CDATA[matlab]]></category>

		<guid isPermaLink="false">http://rebl0g.wordpress.com/?p=113</guid>
		<description><![CDATA[Попалась интересная задача: нужно во время сборки запустить тест, который является матлабовским скриптом. То есть .m файл. Проблема №1: Как передать скрипт в матлаб с командной строки? Да у matlab.exe есть ключ -r с помощью которого вы можете передать команду на выполнение в интерпретатор матлаба. Замечательно, но сразу облом. Если передать вот так: matlab -r [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=113&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Попалась интересная задача: нужно во время сборки запустить тест, который является матлабовским скриптом. То есть .m файл.<br />
<span id="more-113"></span><br />
<strong>Проблема №1: Как передать скрипт в матлаб с командной строки?</strong><br />
Да у matlab.exe есть ключ -r с помощью которого вы можете передать команду на выполнение в интерпретатор матлаба. Замечательно, но сразу облом. Если передать вот так:<br />
<code>matlab -r c:\build\myscript.m</code> не работает. </p>
<p>Но работает если ваш текущий каталог это c:\build вот так:<br />
<code>matlab -r myscript</code></p>
<p>Не подходит, сборка многозадачная, текущий каталог пляшет как угодно. Выход обнаружился после долгого и нудного ковыряния в доках матлаба:<br />
<code>matlab -r "cd c:\build, run('c:\build\myscript.m')"</code><br />
cd c:\build нужно, чтобы matlab не выдал сообщение, что текущий каталог не там же, где .m файл.</p>
<p><strong>Проблема №2: Как заставить сборку дождаться окончания работы скрипта?</strong><br />
Если просто запускать bin\matlab.exe, то управление вернется в сборку сразу же. А матлаб пойдет работать сам по себе. Это связано с тем, что bin\matlab.exe &#8211; это просто промежуточный бинарь, который проверяет среду и переключается потом на bin\win32\matlab.exe или bin\win64\matlab.exe. А вот эти matlab.exe уже настоящие. Если запускать именно их, то сборка будет ждать пока не завершится процесс.</p>
<p><strong>Проблема №3: Как заставить матлаб закрыться после выполнения скрипта?</strong><br />
Да, вот такой прикол: матлаб запускается, запускает скрипт и висит дальше, ждет пока его закроют. Еще копаемся в командах матлаба и рожаем:<br />
<code>matlab -r "cd c:\build, run('c:\build\myscript.m'), quit"</code></p>
<p><strong>Проблема №4: Как заставить матлаб закрыться после ошибки выполнения скрипта?</strong><br />
И еще более веселая проблема. Если во время выполнения скрипта происходит ошибка, то матлаб остается висеть ожидая ввода. Тут уже без &laquo;звонка другу&raquo; не обошлось:<br />
<code>matlab -r "cd c:\build, try, run('c:\build\myscript.m'); end; quit"</code></p>
<p>Слава тебе господи, что я на нем не программирую&#8230;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/rebl0g.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/rebl0g.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/rebl0g.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/rebl0g.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/rebl0g.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/rebl0g.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/rebl0g.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/rebl0g.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/rebl0g.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/rebl0g.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/rebl0g.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/rebl0g.wordpress.com/113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/rebl0g.wordpress.com/113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/rebl0g.wordpress.com/113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=rebl0g.wordpress.com&amp;blog=7902163&amp;post=113&amp;subd=rebl0g&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://rebl0g.wordpress.com/2011/05/27/%d0%ba%d0%b0%d0%ba-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d1%82%d1%8c-matlab-%d1%81%d0%ba%d1%80%d0%b8%d0%bf%d1%82-%d1%81-%d0%ba%d0%be%d0%bc%d0%bc%d0%b0%d0%bd%d0%b4%d0%bd%d0%be%d0%b9-%d1%81%d1%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1caad3d2570e37eb02dcd8e3449456b3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Hex</media:title>
		</media:content>
	</item>
	</channel>
</rss>
