<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>VPetkov.net</title>
	<atom:link href="http://blog.vpetkov.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.vpetkov.net</link>
	<description>My Life at 2am</description>
	<lastBuildDate>Wed, 09 May 2012 17:36:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Speak SMS over the Head Phones only when they are plugged in</title>
		<link>http://blog.vpetkov.net/2012/02/20/speak-sms-over-the-head-phones-only-when-they-are-plugged-in/</link>
		<comments>http://blog.vpetkov.net/2012/02/20/speak-sms-over-the-head-phones-only-when-they-are-plugged-in/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 23:31:30 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[tasker]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=501</guid>
		<description><![CDATA[I walk outside listening to Pandora quite a lot, and today I realized that I miss about half the SMS&#8217; that I get. Either because it&#8217;s too noisy, or maybe because the SMS&#8217; are not loud enough and I use a single beep, or because the sound trigger gets interrupted by Pandora, but either way, [...]]]></description>
			<content:encoded><![CDATA[<p>I walk outside listening to Pandora quite a lot, and today I realized that I miss about half the SMS&#8217; that I get. Either because it&#8217;s too noisy, or maybe because the SMS&#8217; are not loud enough and I use a single beep, or because the sound trigger gets interrupted by Pandora, but either way, it&#8217;s a bit annoying. I have been considering some sort of a solution that will play incoming SMS messages when my headphones are plugged in for quite some time, but I couldn&#8217;t think of an efficient way to do it &#8212; that is, efficient on the battery. I think I came up with one today.</p>
<p>&nbsp;</p>
<p>The idea behind this Tasker program is the following:</p>
<p>There are two Profiles: &#8216;<em>Detect Headphones</em>&#8216; and &#8216;<em>Play Text Over Headphones</em>&#8216;. Only one Profile has to be actually active at all times &#8211; the Detect Headphones one. When you plug in your headset (with microphone, or just regular headphones), the profile sets a variable %HEADPHONES to &#8216;yes&#8217;. It then turns on the second Profile &#8211; the one that monitors incoming SMS messages and plays them over the headset if your %HEADPHONES variable is set to &#8216;yes&#8217;.</p>
<p>The interesting discovery I made was about pausing/muting Pandora. My solution was to set the Media volume to 0, and to set the In-Call volume to 4 (since 5 is too loud over headphones), then play the SMS using the In-Call audio channel, and then set the Media volume to 9 (roughly &#8216;normal&#8217;) and the In-Call volume to 5 (max). When you unplug your headphones, the Detect Headphones profile clears the variable, and de-activates the Play Text Over Headphones profile. I truly don&#8217;t think there is a more efficient way to write this, both in terms of simplicity and in terms of battery usage &#8212; which is currently &lt;1-2% throughout the day.</p>
<p>So, to recap, the only side effect after you are done with all of this is that your Media volume will be set to 9, and your In-Call volume will be set to 5. Both of these can be customized to values that you find appropriate. Also, instead of setting each individually, you may just re-call one of my sound-profile tasks (like &#8216;Work&#8217;, or &#8216;Normal&#8217;, or &#8216;Sleep&#8217;)</p>
<p>Here are the Profiles:</p>
<blockquote><p><a title="Headphones.zip" href="http://blog.vpetkov.net/wp-content/uploads/2012/02/Headphones.zip">Headphones.zip</a> [updated: 02-22-2012]<a title="Headphones" href="http://blog.vpetkov.net/wp-content/uploads/2012/02/Headphones.zip"><br />
</a>(md5: abd66180b4f5c75125ef48e9c5e95f80)</p></blockquote>
<p>BUGS: There aren&#8217;t any really, but I&#8217;ve noticed that If you receive multiple SMS&#8217; quickly (ex: someone sending &#8220;1&#8243;, &#8220;2&#8243;, &#8220;3&#8243; within a second or two, it will only pick up the first &#8211; this is a limitation on the Android notification detection framework. Also, I am sure that even if that wasn&#8217;t a limitation, the sound synthesizer would not be able to keep up.</p>
<p>Hope you enjoy, and as always, leave comments &#8211; both about things that work and things that don&#8217;t.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2012/02/20/speak-sms-over-the-head-phones-only-when-they-are-plugged-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Timed Blackberry Sound Profiles for Android</title>
		<link>http://blog.vpetkov.net/2012/02/01/timed-blackberry-sound-profiles-for-android/</link>
		<comments>http://blog.vpetkov.net/2012/02/01/timed-blackberry-sound-profiles-for-android/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 05:06:04 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[tasker]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=482</guid>
		<description><![CDATA[The general idea behind this is that it utilizes my original Blackberry Sound Profiles for Android and it adds a &#8220;timer&#8221; element which can be set. Upon setting the timer, it will set a temporary task until the timer runs out. The idea came from one of my visitors who asked me how to do [...]]]></description>
			<content:encoded><![CDATA[<p>The general idea behind this is that it utilizes my original Blackberry Sound Profiles for Android and it adds a &#8220;timer&#8221; element which can be set. Upon setting the timer, it will set a temporary task until the timer runs out. The idea came from one of my visitors who asked me how to do this. At first, I had no idea how to do it. About 30 minutes later I had a semi-working prototype. Another 3 hours later (had to figure out how Scenes worked and interacted with variables and the rest of the system) I had the final version with a working GUI.</p>
<p>The first thing that you need are my Tasker Blackberry Sound Profiles found here: (<a href="http://blog.vpetkov.net/2011/05/10/my-tasker-program-blackberry-sound-profiles-for-android">http://blog.vpetkov.net/2011/05/10/my-tasker-program-blackberry-sound-profiles-for-android</a>). If you don&#8217;t have them yet, follow the super quick &#8220;Getting Started&#8221; section. Once you have the tasks and you have them working (if you want this to work out of the box, grab at least the &#8220;Work&#8221; task and the &#8220;Sleep&#8221; task), download the Timed extension:</p>
<p>Note: You need the current BETA to import this profile: http://tasker.dinglisch.net/beta.html (1.2.1b4m)</p>
<blockquote><p><a title="Timed.zip" href="http://blog.vpetkov.net/wp-content/uploads/2012/02/Timed1.zip">Timed.zip</a><br />
(md5: 5709a9ed0b139a027900d9f8f1e2e92a)</p></blockquote>
<p>Now unzip it and follow the same steps from the original post &#8211; grab the &#8220;Timed.tsk.xml&#8221; file and import it into the the Tasks tab, and then grab the &#8220;TimedScene.scn.xml&#8221; file and import it into the Scenes tab. Go to your home screen and create a Tasker widget of your &#8220;Timed&#8221; task. Every time you select this task, it will pop a box which will let you use a slider or directly type in a number. After this, when you hit &#8220;Set Profile&#8221;, the temporary task (by default &#8220;Sleep&#8221;) will get activated for the number of minutes you set. After that time period it will go back to the other (by default &#8220;Work&#8221;) task.</p>
<p>&nbsp;</p>
<p><strong>USAGE:</strong></p>
<p>1.) Make sure that you have at least my &#8220;Work&#8221; and &#8220;Sleep&#8221; sound-profile tasks. If you don&#8217;t, at least have any 2 sound-profiles, and edit the &#8220;Tap&#8221; action for the &#8220;Set Profile&#8221; button to have the two tasks.</p>
<p>2.) Create a widget on your home screen from the &#8220;Timed&#8221; task. Then launch the GUI from it, and set a minute count using the input box (top right), the slider, or the plus and minus keys. HINT: if you hit and hold the plus/minus buttons, they increase and decrease the minute count by 10. Use one or all. Whatever works the best</p>
<p>3.) Click &#8220;Set Profile&#8221;. What this will do is create a permanent notification with the time you started and for how long, and then set the &#8220;Sleep&#8221; profile (or whatever you chose instead) for the given time period. When the time expires, it will revert to the &#8220;Work&#8221; profile (or whatever you chose instead). If you want to cancel it early, select the &#8220;Timed&#8221; task widget from the home screen, and click &#8220;Cancel Profile&#8221;.</p>
<p>&nbsp;</p>
<p><strong>TECHNICAL DETAILS:</strong></p>
<p>1.) The &#8220;Timed&#8221; task simply acts as a launcher. I use it so that I can launch my Timed Scene as a Dialog box. Being a task, you can also create a widget out of it for the home screen. This acts as the entry point to the program/GUI. I also use it to set some defaults &#8211; specifically: the default minute count in the %TMINUTE variable, and then I reflect the variable in the input box and the slider.</p>
<p>2.) The Timed Scene is the work horse here. One way you can set things is by entering a value in the input box at the top right. As soon as you do that, the %TMINUTE variable is set and the slider is changed accordingly. The second way to set things is via the Plus and Minus buttons. If you tap them, they will increase and decrease the %TMINUTE variable by 1. If you tap and hold them, they will increase and decrease the variable by 10. Taping them will also change the slider and set the count in the input box accordingly. The third way is to slide the slider. This will once again set the %TMINUTE variable, and it will change the input box to reflect accordingly. The &#8220;Set Profile&#8221; button destroys the GUI, sets a permanent notify with the start time and the number of minutes you have selected,  and it performs the task. It then waits the number of minutes that you have chosen and it basically undoes everything when the timer goes off. The &#8220;Cancel Profile&#8221; button destroys the GUI, expires the timer and removes the permanent notification. This in turn activates the &#8220;undo&#8221; section in the &#8220;Set Profile&#8221; section, which sets the &#8220;Work&#8221; profile and removes the permanent notification.</p>
<p>&nbsp;</p>
<p>&#8220;Set Profile&#8221; button action in the Timed Scene is the work horse. It holds all the glue and magic to make this work. The main idea here is to pull the current time in seconds, add the value of seconds you want to wait (the input of minutes multiplied by 60) into a variable called %TALERT, and then poll every minute for the condition of the current time being greater than the value of %TALERT. Simple and beautiful huh? A few other things are having the sticky Notify and then removing it, and performing the Tasks obviously.</p>
<p>Good luck, and as always, feel free to ask questions. I&#8217;ll try my best to help out.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2012/02/01/timed-blackberry-sound-profiles-for-android/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Tasker &#8211; ICS (Android 4.0) &#8211; BlackBerry Sound Profiles</title>
		<link>http://blog.vpetkov.net/2011/12/27/tasker-ics-android-4-0-blackberry-sound-profiles/</link>
		<comments>http://blog.vpetkov.net/2011/12/27/tasker-ics-android-4-0-blackberry-sound-profiles/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 03:40:45 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[tasker]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=471</guid>
		<description><![CDATA[This is an update to the article &#8220;My Tasker  program &#8211; BlackBerry Sound Profiles for Android&#8221; (http://blog.vpetkov.net/2011/05/10/my-tasker-program-blackberry-sound-profiles-for-android). Download the new file here, read through &#8220;what has changed&#8221;, and &#8220;what I have updated&#8221;, and then definitely read the original post (url above) as it contains all the details and how-to information. &#160; What Has Changed: There [...]]]></description>
			<content:encoded><![CDATA[<p>This is an update to the article &#8220;My Tasker  program &#8211; BlackBerry Sound Profiles for Android&#8221; (<a title="http://blog.vpetkov.net/2011/05/10/my-tasker-program-blackberry-sound-profiles-for-android" href="http://blog.vpetkov.net/2011/05/10/my-tasker-program-blackberry-sound-profiles-for-android">http://blog.vpetkov.net/2011/05/10/my-tasker-program-blackberry-sound-profiles-for-android</a>). Download the new file here, read through &#8220;what has changed&#8221;, and &#8220;what I have updated&#8221;, and then definitely read the original post (url above) as it contains all the details and how-to information.</p>
<p>&nbsp;</p>
<p><strong>What Has Changed:</strong></p>
<p>There are a couple of things that Google has drastically changed in ICS 4.0 when it comes to Sound, Vibrate, and Volume.</p>
<p>First of all, they have greatly simplified the Sound Settings. The Volume menu now contains: &#8220;Music,Video, Games, and other media&#8221; as one volume toggle, then &#8220;Ringtone and notifications&#8221; as another, and Alarms as a third. Something to note here is that the keyboard &#8220;clicking&#8221; sound can now be found under the keyboard settings -&gt; under Advanced.</p>
<p>The Second change is the way &#8220;Vibrate&#8221; has been re-implemented. The new &#8220;Silent Mode&#8221; controls three things currently: Sound, Mute, and Vibrate. This is important as this was completely broken on 2.3. The next thing to note is the &#8220;Vibrate and Ring&#8221; option, as this has a negative effect when toggled on via Vibrate (it&#8217;s still sticky for some reason, but due to Silent Mode being fixed, we can now un-toggle it via Tasker).</p>
<p>&nbsp;</p>
<p><strong>What I have Updated:</strong></p>
<p>There are two fundamental things that I&#8217;ve changed in every single task:</p>
<p>1.) I am now toggling on and off the Silent Mode. This makes a difference since it actually works correctly in 4.0.</p>
<p>2.) I am now also setting and un-setting the &#8220;Vibrate and Ring&#8221; mode. It is being un-set in every sound-profile task, except the &#8220;Vibrate&#8221; one, where it is set, but the volume is 0, so no ringing actually happens &#8212; however it ends up vibrating. The reason for this is because if I un-toggle this, it will not vibrate, and this is where google, IMO, simply has implemented this very poorly.</p>
<p>Here is the download:</p>
<blockquote><p><a href="http://blog.vpetkov.net/wp-content/uploads/2012/01/Blackberry_Sound_Profiles_for_Android.zip">Blackberry_Sound_Profiles_for_Android</a><a title="http://blog.vpetkov.net/wp-content/uploads/2011/12/Blackberry_Sound_Profiles_for_Android.zip" href="http://blog.vpetkov.net/wp-content/uploads/2011/12/Blackberry_Sound_Profiles_for_Android.zip"><br />
</a>(md5: e57e9bc69209e1a95e8967e11488fd95)</p></blockquote>
<p>Note: I updated the zip archive on 1-09-2012. If you downloaded before then, please re-download. What I changed is the Vibrate sound-profile task. It turns out that in ICS, if you set everything to Vibrate, but then set the volume/notification sound to something else, it overrides the &#8220;Vibrate&#8221; setting. While this seems logical, this was not the case in pre-ICS. It is now fixed.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2011/12/27/tasker-ics-android-4-0-blackberry-sound-profiles/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Nexus S &#8211; 4.0.3 ICS (full stand-alone install AND partial update)</title>
		<link>http://blog.vpetkov.net/2011/12/27/google-nexus-s-4-0-3-ics-full-stand-alone-install-and-partial-update/</link>
		<comments>http://blog.vpetkov.net/2011/12/27/google-nexus-s-4-0-3-ics-full-stand-alone-install-and-partial-update/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 02:27:11 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[nexus]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=433</guid>
		<description><![CDATA[Google has released ICS (Ice Cream Sandwich) &#8211; the next version of the Nexus S OS (ICS 4.0.3- IML74K), and once again, I am posting it directly here &#8212; mostly for people who have not received it yet, people who are using a jailbroken phone, or people outside of the US who do not get the [...]]]></description>
			<content:encoded><![CDATA[<p>Google has released ICS (Ice Cream Sandwich) &#8211; the next version of the Nexus S OS (ICS 4.0.3- IML74K), and once again, I am posting it directly here &#8212; mostly for people who have not received it yet, people who are using a jailbroken phone, or people outside of the US who do not get the updates.</p>
<p>If you are on GRK39F (2.3.6), you can apply only the small update:</p>
<blockquote><p><a title="VQ8PQk_V" href="http://android.clients.google.com/packages/ota/google_crespo/VQ8PQk_V.zip">VQ8PQk_V.zip<br />
</a>(md5: 9cf66f890e71708f458df9932e5206b3)</p></blockquote>
<p>&nbsp;</p>
<p>Again, this is directly from google (it is even linked to google), and you should follow the 7 steps from the <a href="http://blog.vpetkov.net/2011/03/11/google-nexus-s-update-manually-to-2-3-1-2-3-2-and-2-3-3/" target="_blank">http://blog.vpetkov.net/2011/03/11/google-nexus-s-update-manually-to-2-3-1-2-3-2-and-2-3-3/</a> article.</p>
<p><strong>Please note that the above update is the ~128 MB update, and will only work if you are on 2.3.6 GRK39F. This is NOT for people who are running jailbroken/custom roms.</strong></p>
<p>&nbsp;</p>
<p>If the above doesn&#8217;t work, OR if you are using a jailbroken/custom rom, of if you have another version before 2.3.6, then I suggest doing the full 4.0.3 (IML74K) flash:</p>
<blockquote><p><a title="ZD3PyN0t.zip" href="http://android.clients.google.com/packages/ota/google_crespo/ZD3PyN0t.zip">ZD3PyN0t.zip</a><br />
(md5: bdb728fd1581c369cd70e7f0b0e129f2)</p></blockquote>
<p>This is the ~161 MB image. You can use the same 7 steps from the link above.<br />
If you are having problems with the update above, this is the full factory restore and it should work without any problems.</p>
<p>Please post comments if you have any problems, or if you just want to post that it works!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2011/12/27/google-nexus-s-4-0-3-ics-full-stand-alone-install-and-partial-update/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Google Nexus S – update manually to 2.3.6</title>
		<link>http://blog.vpetkov.net/2011/09/30/google-nexus-s-%e2%80%93-update-manually-to-2-3-6/</link>
		<comments>http://blog.vpetkov.net/2011/09/30/google-nexus-s-%e2%80%93-update-manually-to-2-3-6/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 18:56:01 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[nexus]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=418</guid>
		<description><![CDATA[Google has released the next version of the Nexus S OS (Gingerbread 2.3.6 &#8211; GRK39F), and once again, I am posting it directly here &#8212; mostly for people who have not received it yet, people who are using a jailbroken phone, or people outside of the US who do not get the updates. If you [...]]]></description>
			<content:encoded><![CDATA[<p>Google has released the next version of the Nexus S OS (Gingerbread 2.3.6 &#8211; GRK39F), and once again, I am posting it directly here &#8212; mostly for people who have not received it yet, people who are using a jailbroken phone, or people outside of the US who do not get the updates.</p>
<p>If you are on GRJ22 (2.3.4), you can apply only the small update:</p>
<blockquote><p><a title="7d11404284c0.signed-soju-GRK39F-from-GRJ22.7d114042.zip" href="http://android.clients.google.com/packages/ota/google_crespo/7d11404284c0.signed-soju-GRK39F-from-GRJ22.7d114042.zip">7d11404284c0.signed-soju-GRK39F-from-GRJ22.7d114042.zip<br />
</a>(md5: efd33eba8eb42ab77b0d279547bf76d1)</p></blockquote>
<p>&nbsp;</p>
<p>Again, this is directly from google (it is even linked to google), and you should follow the 7 steps from the <a href="http://blog.vpetkov.net/2011/03/11/google-nexus-s-update-manually-to-2-3-1-2-3-2-and-2-3-3/" target="_blank">http://blog.vpetkov.net/2011/03/11/google-nexus-s-update-manually-to-2-3-1-2-3-2-and-2-3-3/</a> article.</p>
<p><strong>Please note that the above update is the ~18MB update, and it will only work if you are on 2.3.4 GRJ22. This is NOT for people who are running jailbroken/custom roms.</strong></p>
<p>&nbsp;</p>
<p>If the above doesn&#8217;t work, OR if you are using a jailbroken/custom rom, then I suggest doing the full 2.3.6 (GRK39F) flash:</p>
<blockquote><p><a title="1ada25375426.signed-soju-ota-189904.1ada2537.zip" href="http://android.clients.google.com/packages/ota/google_crespo/1ada25375426.signed-soju-ota-189904.1ada2537.zip">1ada25375426.signed-soju-ota-189904.1ada2537.zip</a><br />
(md5: c3d6341f18e2723d748e1dea10623d43)</p></blockquote>
<p>This is the ~98 MB image. You can use the same 7 steps from the link above, OR you can use any custom installer (including ClockWork).<br />
If you are having problems with the update above, this is the full factory restore and it should work without any problems.</p>
<p>Please post comments if you have any problems, or if you just want to post that it works!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2011/09/30/google-nexus-s-%e2%80%93-update-manually-to-2-3-6/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Pandora Music Access-Vulnerability</title>
		<link>http://blog.vpetkov.net/2011/08/26/pandora-music-access-vulnerability/</link>
		<comments>http://blog.vpetkov.net/2011/08/26/pandora-music-access-vulnerability/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 07:42:04 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[pandora]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=387</guid>
		<description><![CDATA[UPDATE: Please check out latest version from my git repo: http://git.vpetkov.net/projects &#8211; project name: &#8220;pandora&#8221; It seems that Pandora is not putting too much time or thought into how they provide and access music online through their website. I really hope they fix this since it&#8217;s irresponsible as far as the the DMCA is concerned. [...]]]></description>
			<content:encoded><![CDATA[<p>UPDATE: Please check out latest version from my git repo: http://git.vpetkov.net/projects &#8211; project name: &#8220;pandora&#8221;</p>
<p>It seems that Pandora is not putting too much time or thought into how they provide and access music online through their website. I really hope they fix this since it&#8217;s irresponsible as far as the the DMCA is concerned. Each song is simply an encoded token, and it&#8217;s pulled down directly from, presumably, one of their proxy server. If you look at the stream while playing songs on pandora.com, you will notice something like this (ex: not real):</p>
<blockquote><p>access/197185343492159781?<br />
version=4&amp;lid=######&amp;token=Rqcw8pKLwxByRVLM6SynyT%2Fw0yGw2F3WW8efWPzuBSsaQTUKz<br />
obvQ3A8Q0Z0uDm1FiUpSiWMqH5CUwW%2B51WJs7IhT9O%85DLlKtVZuYO55LpLuaeooiYTIFvdeCyHaM<br />
i%2Fq8%2FClLJuDEipmt6%2FMR8QvwebIF8rt2Hlcqwj70Stc7E2TeB8021eG60OV%2B%2FCbVMhL3Sh<br />
0qdGSLnHK55xabtdZSoES7HYGPPG7wLjNurP%2FTGjqx%2Bz9%afdsjx2jdhg%2FMZX3A7zx8DlNEPy5<br />
ahaM8z3VjjfDGhWTElBIzveYigBdLq7j9t7mUHjtwEJZ3yHKhHNapEtmb8ZSOIwbAUfqjMiJtk7WXVDq<br />
qBZZ7</p></blockquote>
<p>Some assumptions: the &#8220;version=4&#8243; is high quality or what used to be CD quality (192 kbps). The &#8220;lid=#####&#8221; is the &#8220;login id&#8221;, or your unique user number. The &#8220;token=&#8230;&#8221; is the actual song, encoded. By finding the host of these requests, and putting it all together, where the lid is completely optional, you will have a full request URL to a song.</p>
<p>Imagine putting it together like this: (example as a POC, like this)</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
tshark <span style="color: #660033;">-i</span> en0 <span style="color: #660033;">-l</span> <span style="color: #660033;">-T</span> fields <span style="color: #660033;">-E</span> <span style="color: #007800;">separator</span>=<span style="color: #ff0000;">&quot;,&quot;</span> <span style="color: #660033;">-e</span> http.host <span style="color: #660033;">-e</span> http.request.uri <span style="color: #660033;">-R</span>
<span style="color: #ff0000;">&quot;http.request.uri contains token and http.host contains pandora&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> .<span style="color: #000000; font-weight: bold;">/</span>worker.pl</pre></div></div>

<p>Then having something that parses this &#8220;buffer&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span>
<span style="color: #000000; font-weight: bold;">use</span> Tie<span style="color: #339933;">::</span><span style="color: #006600;">File</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> WWW<span style="color: #339933;">::</span><span style="color: #006600;">Mechanize</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$tokensdb</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'.tokens.db'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$songsdb</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'.songs'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">unless</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>e <span style="color: #0000ff;">$tokensdb</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">`touch $tokensdb`</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">unless</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>d <span style="color: #0000ff;">$songsdb</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #000066;">mkdir</span> <span style="color: #0000ff;">$songsdb</span> <span style="color: #b1b100;">or</span> <span style="color: #000066;">die</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066;">tie</span> <span style="color: #b1b100;">our</span> <span style="color: #0000ff;">@tokens</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">'Tie::File'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$tokensdb</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mech</span> <span style="color: #339933;">=</span> WWW<span style="color: #339933;">::</span><span style="color: #006600;">Mechanize</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$mech</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">timeout</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$mech</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">quiet</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$mech</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">agent_alias</span><span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">'Mac Safari'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #009999;">&lt;STDIN&gt;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$host</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$token</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/,/</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$_</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$token</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">s/&amp;lid=(\d*)//g</span><span style="color: #339933;">;</span> <span style="color: #000066;">chomp</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$token</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$url</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;http://$host&quot;</span><span style="color: #339933;">.</span><span style="color: #ff0000;">&quot;$token&quot;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> <span style="color: #000066;">grep</span> <span style="color: #009900;">&#123;</span> <span style="color: #ff0000;">&quot;$_&quot;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">&quot;$token&quot;</span><span style="color: #009900;">&#125;</span> <span style="color: #0000ff;">@tokens</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Token Already Seen...<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@tokens</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$token</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;&gt;&gt; New Token Added!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$file</span> <span style="color: #339933;">=</span> <span style="color: #000066;">time</span><span style="color: #339933;">;</span>
        <span style="color: #666666; font-style: italic;"># Code removed in order to prevent Abuse!</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>One way for them to fix this would be to session encode the requests. You should not be able to make requests that originate from outside of pandora.com directly to the servers. Also, the requests should be authenticated. As an addition, they could potentially be checked against what is &#8220;played&#8221; and controlled for streaming mechanisms. I really hope this fix this as soon as possible.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2011/08/26/pandora-music-access-vulnerability/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Script to Upgrade Plugins on WordPress to the latest version fully automatically</title>
		<link>http://blog.vpetkov.net/2011/08/03/script-to-upgrade-plugins-on-wordpress-to-the-latest-version-fully-automatically/</link>
		<comments>http://blog.vpetkov.net/2011/08/03/script-to-upgrade-plugins-on-wordpress-to-the-latest-version-fully-automatically/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 18:20:41 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=368</guid>
		<description><![CDATA[UPDATE: Please check out latest version from my git repo: http://git.vpetkov.net/projects &#8211; project name: &#8220;wordpress&#8221; I already created a script to upgrade wordpress installations automatically. You can find it here: http://blog.vpetkov.net/2011/06/01/script-to-upgrade-wordpress-to-the-latest-version-fully-automatically Recently, the same general problem came about when it came to plugins. The biggest problem I had is that I had to log-into wordpress, see a [...]]]></description>
			<content:encoded><![CDATA[<p>UPDATE: Please check out latest version from my git repo: http://git.vpetkov.net/projects &#8211; project name: &#8220;wordpress&#8221;</p>
<p>I already created a script to upgrade wordpress installations automatically. You can find it here: <a href="script-to-upgrade-wordpress-to-the-latest-version-fully-automatically" target="_blank">http://blog.vpetkov.net/2011/06/01/script-to-upgrade-wordpress-to-the-latest-version-fully-automatically</a> Recently, the same general problem came about when it came to plugins. The biggest problem I had is that I had to log-into wordpress, see a number of plugins that were outdated, and then go hunt each one down by generally just copying the name and pasting it into google . Even thought most of the time, the plugin was the first hit, I then had to download the latest version, extract it, and clean it up. Imagine doing this for 10+ plugins for 5+ blogs &#8212; constantly. It was just time consuming and frustrating.</p>
<p>Here is my solution in the form of a perl script:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl</span>
<span style="color: #666666; font-style: italic;"># Usage:</span>
<span style="color: #666666; font-style: italic;"># ./update-wp-plugins.pl</span>
<span style="color: #666666; font-style: italic;">#   or</span>
<span style="color: #666666; font-style: italic;"># ./update-wp-plugins.pl registered-name-of-plugin</span>
<span style="color: #666666; font-style: italic;"># (and this works to update an exiting plugin or download+install a new one)</span>
<span style="color: #000066;">chdir</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;/var/www/domain/blog/wp-content/plugins&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> WWW<span style="color: #339933;">::</span><span style="color: #006600;">Mechanize</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$mech</span> <span style="color: #339933;">=</span> WWW<span style="color: #339933;">::</span><span style="color: #006600;">Mechanize</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>new<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$mech</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>agent_alias<span style="color: #009900;">&#40;</span> <span style="color: #ff0000;">'Mac Safari'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$wp_base_url</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;http://wordpress.org/extend/plugins&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">################################################</span>
<span style="color: #666666; font-style: italic;"># Add New Plugins Here:</span>
<span style="color: #666666; font-style: italic;"># Format:</span>
<span style="color: #666666; font-style: italic;">#   'registered-name-of-plugin',</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">@plugins</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>
    <span style="color: #ff0000;">'google-sitemap-generator'</span><span style="color: #339933;">,</span>
    <span style="color: #ff0000;">'wptouch'</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">################################################</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$ARGV</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$ARGV</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">&amp;amp</span><span style="color: #339933;">;</span>update_plugin<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">for</span> <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$name</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">@plugins</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">&amp;amp</span><span style="color: #339933;">;</span>update_plugin<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">sub</span> update_plugin <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$name</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$url</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;$wp_base_url/$name&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #0000ff;">$mech</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>get<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">$url</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$page</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$mech</span><span style="color: #339933;">-</span><span style="color: #0000ff;">&amp;gt</span><span style="color: #339933;">;</span>content<span style="color: #339933;">;</span>
    <span style="color: #b1b100;">my</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$url</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$version</span><span style="color: #339933;">,</span><span style="color: #0000ff;">$file</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$page</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/.*&amp;lt;p class=&quot;button&quot;&amp;gt;&amp;lt;a href='(.*)'&amp;gt;Download Version (.*)&amp;lt;\/a&amp;gt;&amp;lt;\/p&amp;gt;.*/</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #0000ff;">$url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
        <span style="color: #0000ff;">$version</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$2</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$url</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/http:\/\/downloads\.wordpress\.org\/plugin\/(.*)/</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #0000ff;">$file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$1</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>PLUGIN: $name | Version $version<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #ff0000;">`/bin/rm -f $file`</span><span style="color: #339933;">;</span> <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Downloading: <span style="color: #000099; font-weight: bold;">\t</span>$url<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #ff0000;">`/usr/bin/wget -q $url`</span><span style="color: #339933;">;</span> <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Unzipping: <span style="color: #000099; font-weight: bold;">\t</span>$file<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #ff0000;">`/usr/bin/unzip -o $file`</span><span style="color: #339933;">;</span> <span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Installed: <span style="color: #000099; font-weight: bold;">\t</span>$name<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #ff0000;">`/bin/rm -f $file`</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This script can be used in one of two ways:</p>
<p>1.) You can simply run it, and it will update everything that you have listed in the @plugins array.</p>
<p>2.) You can give it a parameter of a registered plugin name. This does 2 jobs &#8212; upgrades an existing plugin, AND installs new ones.</p>
<p>You can definitely add an extension to this. For #1, you can go a step further by making it scan your plugin directory and populating the list from there. If you want to be even fancier, you can relatively easily keep version tracks of what you have installed and what&#8217;s currently available, so that you don&#8217;t just blindly download new plugins. For me this is sufficient. If anyone is interested in getting help implementing any of these extra additions, feel free to ask and I&#8217;ll help as much as I can.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2011/08/03/script-to-upgrade-plugins-on-wordpress-to-the-latest-version-fully-automatically/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spoofing Caller ID on the fly from any phone for legal and legitimate purposes</title>
		<link>http://blog.vpetkov.net/2011/07/10/spoofing-caller-id-on-the-fly-from-any-phone-for-legal-and-legitimate-purposes/</link>
		<comments>http://blog.vpetkov.net/2011/07/10/spoofing-caller-id-on-the-fly-from-any-phone-for-legal-and-legitimate-purposes/#comments</comments>
		<pubDate>Sun, 10 Jul 2011 07:27:54 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=359</guid>
		<description><![CDATA[This post is a bit different, but I think some people will find it very interesting. What got me to write this was an interesting article posted by Kevin Mitnick via his twitter account: http://news.cnet.com/8301-27080_3-20077732-245/kevin-mitnick-shows-how-easy-it-is-to-hack-a-phone/?part=rss&#38;tag=feed&#38;subj=News-Security. Kevin&#8217;s claim is that &#8220;Any 15-year-old that knows how to write a simple script can find a VoIP provider that spoofs [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a bit different, but I think some people will find it very interesting. What got me to write this was an interesting article posted by Kevin Mitnick via his twitter account: <a href="http://news.cnet.com/8301-27080_3-20077732-245/kevin-mitnick-shows-how-easy-it-is-to-hack-a-phone/?part=rss&amp;tag=feed&amp;subj=News-Security" target="_blank">http://news.cnet.com/8301-27080_3-20077732-245/kevin-mitnick-shows-how-easy-it-is-to-hack-a-phone/?part=rss&amp;tag=feed&amp;subj=News-Security</a>. Kevin&#8217;s claim is that &#8220;Any 15-year-old that knows how to write a simple script can find a VoIP provider that spoofs caller ID and set this up in about 30 minutes&#8221;, and my only question is: what will you do with the other 25 minutes?</p>
<p><strong>START OF NOTE AND WARNING!<br />
</strong>Spoofing your Caller ID is legal in the US only if done via VOIP services for legal and legitimate uses, or to block sending your caller ID, but again, only if it is used for legal purposes. An example of a legitimate use is spoofing your own home/cell phone number when making outbound calls via VOIP/SIP. Another example would be spoofing an outgoing number (a bit like NATing) when sitting at a private (let&#8217;s say for example 2,3,4, or 5 digit) extension. There are many scenarios where this is absolutely needed &#8212; like offices, enterprises, remote employees/road warriors, and phone support.<br />
Spoofing your Caller ID is <strong><em>not </em></strong>legal for false identity, threatening/harassing someone, pranking, lying, or other such negative and immoral actions. If you are interested in some more information, you can find some here: <a href="http://www.gordostuff.com/2011/06/fcc-ups-caller-id-spoofing-penalties.html" target="_blank">http://www.gordostuff.com/2011/06/fcc-ups-caller-id-spoofing-penalties.html</a>, and here: <a href="http://www.gordostuff.com/2011/02/is-faking-caller-id-legal-in-united.html" target="_blank">http://www.gordostuff.com/2011/02/is-faking-caller-id-legal-in-united.html</a>. This said, I am providing this information for anyone who wants to learn about how this is done, or/and is interested in setting it up for their business or personal use, but <strong>ONLY</strong> for legal and legitimate uses. I am in no way responsible if you do something stupid or illegal. Here is a good background/history and more information on Caller ID Spoofing: <a href="http://www.calleridspoofing.info/" target="_blank">http://www.calleridspoofing.info/</a><br />
<strong>END OF NOTE AND WARNING!</strong></p>
<p>The assumption here is that you have some things already setup and working. The article is titled &#8220;Spoofing Caller ID on the fly from any phone&#8221; and not &#8220;how to spoof your Caller ID&#8221;. I am assuming that you have: a sip trunk provider with an outgoing plan, a DID, a SIP server with some advanced features (Asterisk and OpenPBX, or something like TrixBox), and most of all &#8212; a working setup. The first step is getting DISA (Direct Inward System Access &#8211; <a href="http://www.voip-info.org/wiki/view/Asterisk+cmd+DISA" target="_blank">http://www.voip-info.org/wiki/view/Asterisk+cmd+DISA</a>). The idea is that you will dial your DID phone number, and the sip trunk provider will route it to your IP address. From there, your server will handle the call and connect you inside your system. I absolutely suggest setting up a DISA password/passcode, otherwise, you leave yourself open to abuse and other people will be able to potentially make calls and use your sip account. It is also important to note that generally, you can simply set a from name and number right here in the DISA outbound options. But again, the idea is to make this dynamic. Ones you dial into your system, the next step is to setup an extension that will handle the rest of this. Leave your context &#8220;from-internal&#8221; if you want to be able to make external calls by default &#8212; necessary in order to bridge the active call to your destination. If you are using Asterisk or TrixBox, go to /etc/asterisk/extensions_custom.conf, and enter something like this:</p>
<blockquote><p>[from-internal-custom]<br />
include =&gt; proof-of-concept-custom</p>
<p>[proof-of-concept-custom]<br />
exten =&gt; 12345,1,Answer<br />
exten =&gt; 12345,n,Wait(2)<br />
exten =&gt; 12345,n,SayDigits(${CALLERID(number)})<br />
exten =&gt; 12345,n,Answer<br />
exten =&gt; 12345,n,Wait(2)<br />
exten =&gt; 12345,n,Playback(privacy-prompt)<br />
exten =&gt; 12345,n(collect),Read(digito,,10)<br />
exten =&gt; 12345,n,SayDigits($digito})<br />
exten =&gt; 12345,n,Set(CALLERID(number)=1${digito})<br />
exten =&gt; 12345,n,Answer<br />
exten =&gt; 12345,n,Wait(2)<br />
exten =&gt; 12345,n,Playback(custom/would-you-like-to-connect,skip)<br />
exten =&gt; 12345,n(collect),Read(digito,,5)<br />
exten =&gt; 12345,n,GotoIf($[${digito}==98765]?call:hangup)=<br />
exten =&gt; 12345,n(end),Hangup()<br />
exten =&gt; 12345,n(call),Answer<br />
exten =&gt; 12345,n,Wait(2)<br />
exten =&gt; 12345,n,Playback(activated,skip)<br />
exten =&gt; 12345,n,Dial(SIP/Provider/${CALLERID(number)},300)</p></blockquote>
<p>Now here&#8217;s what&#8217;s happening: When you get your DID, you get the DISA context. From there, after you authenticate yourself with a pin and now you are in your system. At this point, you would hook in your custom context, in this case called &#8220;proof-of-concept-custom&#8221;. Make sure that the word &#8220;custom&#8221; is present somewhere. At this point, your recipe will be executed. The first thing you want to do is answer. You can look up each of these commands at the voip-info.org website. For example, Answer: <a href="http://www.voip-info.org/wiki/view/Asterisk+cmd+Answer" target="_blank">http://www.voip-info.org/wiki/view/Asterisk+cmd+Answer</a>. The next step is to wait 2 seconds. Then you will speak out the current caller ID. This is really just so you know where you are coming from &#8211; it is not neccessary. The play (mp3/wav/etc&#8230;) play is not really necessary either, but it can be used to queue up different actions. If you will play something, the suggestion is to Answer the channel before hand, and pause/wait for a bit. The next step is to read 10 digits into the &#8220;digito&#8221; variable. For good measure, and to prevent a mistake, you can speak out the digits again, and then set them as the current Caller ID (the spoofing part). At this point, you can play another sound to queue up the next action. As an extra precaution/security-by-obscurity step, you can prompt for another pin. In this case, it&#8217;s &#8220;98765&#8243;. After the pin has been successfully entered, you can signal via a sound, and then dial and bridge the call to the same number that you set as your Caller ID (impractical, but just for the purpose of a proof of concept). You can very easily modify this to ask for a destination number and call that destination number instead. Please note that this will charge you a twice from the point that you dial the call and bridge it &#8212; once for the current/already active call, and once for the new call that you are making to your destination.</p>
<p>Again, there are many legitimate and absolutely necessary cases for this. If you work in any company, most of the time they will not disclose private numbers. If the company is very large, they might simply not have/want to buy individual &#8220;routable&#8221; phone numbers. Your desk extension of &#8220;1234&#8243; can be masked behind a general number which routes to &#8220;directory/support&#8221; when called back. Another great case is someone who works from remote. Say that you work from home and are part of a support group. A customer calls you and reports a problem. Now you want to call the customer back, but you don&#8217;t want him to have your personal home number/cellphone &#8211; you can spoof your support number and call the customer back.</p>
<p>Something interesting to note is that VOIP/SIP system can choose to not respect Caller ID (cid) blocking/spoofing, and and 1-800/other TOLL-FREE numbers simply do not respect it.</p>
<p>The only point of this article is to demonstrate how easy it is to achieve this dynamically. Again, this is something that you can very easily set statically in the extension or DISA settings. This is not something new or mind blowing. You could have done this over 10 years ago. The point is that you can have a setup which can be activated from any phone and within 30 seconds or less, you can have a dynamically spoofed Caller ID number.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2011/07/10/spoofing-caller-id-on-the-fly-from-any-phone-for-legal-and-legitimate-purposes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Steve Jobs has to be the biggest hypocrite I&#8217;ve ever seen</title>
		<link>http://blog.vpetkov.net/2011/06/09/steve-jobs-has-to-be-the-biggest-hypocrite-ive-ever-seen/</link>
		<comments>http://blog.vpetkov.net/2011/06/09/steve-jobs-has-to-be-the-biggest-hypocrite-ive-ever-seen/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 19:14:48 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=353</guid>
		<description><![CDATA[Apple has always been known for their innovation and technology. I recently read an article about how they don&#8217;t believe in a &#8220;for the people by the people&#8221; model, but instead follow one that&#8217;s &#8220;for the professionals by the professionals&#8221;. This has both positive and negative outcomes. Everything that apple produces is extremely clean, professional, [...]]]></description>
			<content:encoded><![CDATA[<p>Apple has always been known for their innovation and technology. I recently read an article about how they don&#8217;t believe in a &#8220;for the people by the people&#8221; model, but instead follow one that&#8217;s &#8220;for the professionals by the professionals&#8221;. This has both positive and negative outcomes. Everything that apple produces is extremely clean, professional, and very well polished. However, it forces them to be selective, limited, and exclusive, which is all negative when it comes to the internet. Freedom of expression simply does not exist within Apple. You might think you are free to express yourself, but only according to how, when, and where Apple tells you to.</p>
<p>With this information in the back of your mind, Apple recently sued Amazon for calling its app store Appstore. It has publicly lectured competitors to “create their own original technology, not steal ours”.</p>
<p>Then Apple turned around and blatantly stole Greg Hughes&#8217;, Wi-Fi Sync App &#8212; but only after first rejecting it from the Apple App Store. Infact, they not only stole the idea/concept and name, but they also ripped off the icon. Greg has sold his app in the Cydia app store at $9.99 and he has reportedly sold over 50,000 copies in the last year. Can you imagine how many more copies he would have sold in the regular Apple App Store? Greg has also reported that when his app was rejected from the Apple store, a developer from Apple called him to tell him how great his app was and how the entire Apple dev team was extremely impressed with it.</p>
<p>I think that Apple needs to decide where they stand. If they truly believe in copyright and patents, they have to use the same stick when judging themselves. They cannot steal other&#8217;s work, and then turn around and preach how you should not steal innovation, designs, and code.</p>
<p>If you want to read the full article, you can find it at: <a href="http://www.theregister.co.uk/2011/06/08/apple_copies_rejected_app/" target="_blank">http://www.theregister.co.uk/2011/06/08/apple_copies_rejected_app/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2011/06/09/steve-jobs-has-to-be-the-biggest-hypocrite-ive-ever-seen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Script to Upgrade WordPress to the latest version fully automatically</title>
		<link>http://blog.vpetkov.net/2011/06/01/script-to-upgrade-wordpress-to-the-latest-version-fully-automatically/</link>
		<comments>http://blog.vpetkov.net/2011/06/01/script-to-upgrade-wordpress-to-the-latest-version-fully-automatically/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 15:28:37 +0000</pubDate>
		<dc:creator>Ventz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://blog.vpetkov.net/?p=349</guid>
		<description><![CDATA[UPDATE: Please check out latest version from my git repo: http://git.vpetkov.net/projects &#8211; project name: &#8220;wordpress&#8221; When you host a WordPress installation for yourself, and there is some sort of an update about every month, it can get annoying doing all the upgrade steps manually (for the people who do not have a CPANEL or FTP [...]]]></description>
			<content:encoded><![CDATA[<p>UPDATE: Please check out latest version from my git repo: http://git.vpetkov.net/projects &#8211; project name: &#8220;wordpress&#8221;</p>
<p>When you host a WordPress installation for yourself, and there is some sort of an update about every month, it can get annoying doing all the upgrade steps manually (for the people who do not have a CPANEL or FTP account). Now imagine  hosting 5-6 WordPress installations. Now imagine 500+. Welcome to my nightmare. Eventually I caved in and wrote this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># http://codex.wordpress.org/Updating_WordPress#Step_1:_Replace_WordPress_files</span>
<span style="color: #666666; font-style: italic;"># This strictly follow the directions mentioned above.</span>
<span style="color: #666666; font-style: italic;"># Utilizes: &quot;rm&quot;, &quot;cp&quot;, &quot;mv&quot;, &quot;wget&quot;, &quot;unzip&quot;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">umask</span> 0022
<span style="color: #007800;">WEBROOT</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>domain
<span style="color: #007800;">CURRENT_BLOG</span>=<span style="color: #007800;">$WEBROOT</span><span style="color: #000000; font-weight: bold;">/</span>CURRENT_BLOG
<span style="color: #007800;">TEMP_NEW</span>=<span style="color: #007800;">$WEBROOT</span><span style="color: #000000; font-weight: bold;">/</span>wordpress
&nbsp;
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$WEBROOT</span>
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-Rf</span> latest.zip
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>wordpress.org<span style="color: #000000; font-weight: bold;">/</span>latest.zip
<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">unzip</span> <span style="color: #660033;">-q</span> latest.zip
&nbsp;
<span style="color: #666666; font-style: italic;"># Remove outdated CURRENT_BLOG files per instructions</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$CURRENT_BLOG</span>
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-Rf</span> wp-includes wp-admin
&nbsp;
<span style="color: #666666; font-style: italic;"># Copy TEMP_NEW files per instructions</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$TEMP_NEW</span>
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-Rf</span> wp-includes <span style="color: #007800;">$CURRENT_BLOG</span><span style="color: #000000; font-weight: bold;">/</span>.
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-Rf</span> wp-admin <span style="color: #007800;">$CURRENT_BLOG</span><span style="color: #000000; font-weight: bold;">/</span>.
&nbsp;
<span style="color: #7a0874; font-weight: bold;">cd</span> wp-content
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #660033;">-Rf</span> <span style="color: #000000; font-weight: bold;">*</span> <span style="color: #007800;">$CURRENT_BLOG</span><span style="color: #000000; font-weight: bold;">/</span>wp-content<span style="color: #000000; font-weight: bold;">/</span>.
<span style="color: #7a0874; font-weight: bold;">cd</span> ..
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">*</span>.php <span style="color: #007800;">$CURRENT_BLOG</span><span style="color: #000000; font-weight: bold;">/</span>.
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> readme.html <span style="color: #007800;">$CURRENT_BLOG</span><span style="color: #000000; font-weight: bold;">/</span>.
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">mv</span> license.txt <span style="color: #007800;">$CURRENT_BLOG</span><span style="color: #000000; font-weight: bold;">/</span>.
&nbsp;
<span style="color: #666666; font-style: italic;"># Cleanup TEMP_NEW - remove extraction and download.</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #007800;">$WEBROOT</span>
<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-Rf</span> wordpress latest.zip
&nbsp;
<span style="color: #666666; font-style: italic;"># CUSTOM</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;go to: http://YOUR-BLOG-URL/wp-admin/upgrade.php&quot;</span></pre></div></div>

<p>So, to summarize, this will download the latest version of wordpress, unzip it, and move the new things accordingly. At the end, it will remind you to upgrade your DB, just in case. I highly suggest backing up your primary blog before you begin this, just because it&#8217;s the &#8220;safe thing&#8221; to do.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.vpetkov.net/2011/06/01/script-to-upgrade-wordpress-to-the-latest-version-fully-automatically/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

