Archive for the 'Grinds My Gears' Category
Thwarting Online Copy Protection For Fun And Profit
As if straight out of the late 90s when people thought they could control the data they send you, websites across the internet still try to prevent you from saving content directly from your browser. It’s as if these website administrators and content owners just haven’t learned from the lessons of the music and movie industry (those organizations have been exemplified for poor content ownership in a digital era). This is a guide for thwarting those pethetic attempts to prevent the user from right clicking or flat out saving a website to your harddrive.
We’ve all seen it before. You’ll find a picture or movie that the site has feebly attempted to prevent you from saving. Lets first start by going over the most popular methods that websites employ to try and lock down the content they’ve already sent you.
Some of them just disable right clicking via some javascript. This is laughably simple to bypass, just check out the source; you can usually find what you’re looking for if you can read some HTML / JavaScript.
Some of them are slightly craftier in they try to hide the source on the server. This is done through server code that generates client-side code. ASP, servlets, and JSP are the most popular forms of server code that sends the client the actual server code. This makes reading the code more difficult since this server code is usually executed on the other end and a bit tougher to get the raw client-side code. It can be done, but the Ultimate Method listed below will always thwart it.
Then there’s the top tier of cleverness: embedded flash. This is often the most challenging to work around as it basically employs both previous methods. Most Flash players lack any ability to save them by simply right clicking. That would actually make things easy since GNOME now has a prepackaged swf player. There is usually some cryptic method employed with the CGI parameters that are passed to determine which FLV to play. Unless you are very good at mentally debugging JavaScript, you’ll probably want to skip straight to the Ultimate Method below. Otherwise, I would recommend reading the source code of every externally referenced file to find the embed statement. This may be hidden in a JavaScript, server-side code (even server-side includes), or directly into any XHTML/HTML. If you can do this, I commend your abilities but laugh at your inability to think outside the box to save significant amounts of free time.
So lets get on to describing the Ultimate Method already. This technique involves primarily using Epiphany, but I believe it should work just fine with many open source browsers such as Firefox and maybe Konquerer. This demonstration is performed with Epiphany 2.22.1.1 compiled with the following use flags: python spell xulrunner.
GNOME compliant applications drop their working and cache directories under ~/.gnome2. For example, here’s what I have under my gnome2 directory:
s1n@citadel ~ $ ls -1 .gnome2
Brasero
Dia
Totem
accels
accelsgedit
backgrounds.xml
brasero.session
conglomerate
deskbar-applet
devhelp
eog
epiphany
evince
f-spot
file-roller
gcdmaster
gedit
gedit-2
gedit-metadata.xml
gedit-print-config
glade-3
glchess
gnome-alsamixer
gnome-art
gnome-dictionary
gnome-volume-control
gthumb
invest-applet
keyrings
main
nautilus-scripts
panel2.d
rhythmbox
seahorse
session
share
splash-screens.xml
stickynotes_applet
yelp
yelp.d
These are all typical GNOME applications; the one to pay attention to is ~/.gnome2/epiphany. Under this directory, it stores its working information similar to how Firefox used to (it’s been a while since I used Firefox). Of importance is the caching directory: ~/.gnome2/epiphany/mozilla/epiphany/Cache. Notice how the mozilla directory is structured like Firefox. Remember, Epiphany was designed as a lightweight Firefox clone (then known as Galeon) when Firefox was starting to get bloated (provided by the Mozilla team).
This Cache folder is where the magic happens. Every file is given a unique name, probably through something like mkstemp or through a clever hash. None of the files have the proper extensions so if you have a ton of browser cache, you will a ton of files here. I’ll discuss how to find the file you’re looking for through this haystack in a minute.
First, lets go over the basic idea and then I’ll walk you through an example. Essentially, we want to clean up this cache folder, reload any website that hosts the content you want to find, then grep through the Cache folder to find it. By cleaning the cache folder, we have less unrelated files to worry about. Once you reload the website that sends you the content, you’ll find some new cache files and it’ll be much easier to find them. We’ll also use file and the file magic database to make our lives easier. By simply doing a file * | grep filetype to find the files we’re looking for, we’ll get a listing of all possible matches.
Now, let’s follow an example: the Keep Austin Weird photo gallery posted on Austin360. I wanted to get a local copy of the images that are browsable on this page. The content owners definately spent some time trying to block people from downloading them (notice the “BUY THIS PHOTO” link) by herding visitors to pay a small fortune for each photo. Never annoy a software junkie; the owner has already sent me the files and now I just want a local copy, so we will find a way to to take them.
At first inspection, this is either a gallery script such as lightbox or flash file. Once viewing the source, you’ll see that Austin360 is managed by a few code generators, mostly by SiteCatalyst. The code is a hodgepodge of HTML, XHTML, JavaScript, and flash (at least that’s what is generated on the server side). Digging through the code leads you to a script that figures out which Flash file to load. It’s complicated by the fact that it doesn’t actually load the gallery until some more JavaScript is called to actually embed it. Playing with it reveals it becomes a pain in the butt to access the embedded object. There are browser plugins out there that might assist with this, but then if you’ve read this far, you’re probably looking for something that will allow you to access any protected content directly.
So first things first, lets clear out our cache. From Epiphany, go to the Edit -> Preferences dialog. Click on the Privacy tab. Near the bottom, you will see a section titled Temporary Files. Set this to a size as high as you need or can stomach and then click on the Clear button. From this dialog, make sure at least the Temporary Files checkbox is checked, then hit the Clear button again. Close all of those windows. Below is the dialog from the 1.2 version of the application (this was just before they were assimilated into GNOME and had to adopt the same versioning scheme as GNOME).

At this point we want to reload the page. Doing so should start creating cache files. The flash animation has sent us 1 image so far (ironically, a picture of the iconic transgendered vagrant Leslie), so that should be enough to make sure we have something to work with. Lets go to that cache directory and find out what we have to work with. Remember, we’re going to use file magic to find only the files we care about as there will likely be too many unrelated files.
s1n@citadel ~/.gnome2/epiphany/mozilla/epiphany/Cache $ file *
0CEB37D0d01: Macromedia Flash data (compressed), version 7
1AC4830Fd01: ASCII C program text, with very long lines, with CRLF line terminators
944676BCd01: ASCII C program text, with very long lines, with CRLF line terminators
D7218B7Ad01: ASCII C++ program text
FCD476F3d01: JPEG image data, JFIF standard 1.01
FFA69BC3d01: ASCII C program text, with very long lines, with CRLF line terminators
_CACHE_001_: , 44.1 kHz, Stereo
_CACHE_002_: , 44.1 kHz, Stereo
_CACHE_003_: , 44.1 kHz, Stereo
_CACHE_MAP_: GEM Image data 0 x 1, 0 planes, 0 x 0 pixelsize
You may have noticed the Flash file there. Trying to open that with swfdec doesn’t produce anything useful. In fact, it does look like the Flash file we want, but there’s something with the way it’s coded such that it requires some input that’s missing from the standalone file (you’ll get an XML error if opened by doing: swfdec-player 0CEB37D0d01).
There is a single image file, and after inspection with EyeOfGNOME, we find it’s the image of Leslie. Paydirt! The images are downloaded as seperate files. Downside is we have to flip through each of them as only when they are viewed are they cached. After running through the entire slide show we have a bunch of files, mostly JPEGs, and we can begin sifting through them all. First, lets check out the file magic results on everything to see what we have to work with here:
s1n@citadel ~/.gnome2/epiphany/mozilla/epiphany/Cache $ file *
0C86DDDEd01: JPEG image data, JFIF standard 1.01
0CEB37D0d01: Macromedia Flash data (compressed), version 7
1AC4830Fd01: ASCII C program text, with very long lines, with CRLF line terminators
856ED57Dd01: JPEG image data, JFIF standard 1.01
86C5D54Dd01: JPEG image data, JFIF standard 1.01
86D2D54Dd01: JPEG image data, JFIF standard 1.01
87F5D55Dd01: JPEG image data, JFIF standard 1.01
944676BCd01: ASCII C program text, with very long lines, with CRLF line terminators
A28162E3d01: JPEG image data, JFIF standard 1.01
A29062F3d01: JPEG image data, JFIF standard 1.01
A2B26213d01: JPEG image data, JFIF standard 1.01
A2F66273d01: JPEG image data, JFIF standard 1.01
A36F6353d01: JPEG image data, JFIF standard 1.01
A37E6333d01: JPEG image data, JFIF standard 1.01
A4C56263d01: JPEG image data, JFIF standard 1.01
A57E6233d01: JPEG image data, JFIF standard 1.01
A6E76213d01: JPEG image data, JFIF standard 1.01
A6F66273d01: JPEG image data, JFIF standard 1.01
AC9063E3d01: JPEG image data, JFIF standard 1.01
C08161D3d01: JPEG image data, JFIF standard 1.01
C0A36153d01: JPEG image data, JFIF standard 1.01
C0B26133d01: JPEG image data, JFIF standard 1.01
C0C560C3d01: JPEG image data, JFIF standard 1.01
C16F6033d01: JPEG image data, JFIF standard 1.01
C17E6153d01: JPEG image data, JFIF standard 1.01
C1906003d01: JPEG image data, JFIF standard 1.01
C1A36063d01: JPEG image data, JFIF standard 1.01
C1B26013d01: JPEG image data, JFIF standard 1.01
C1D46043d01: JPEG image data, JFIF standard 1.01
C26F6143d01: JPEG image data, JFIF standard 1.01
C2906253d01: JPEG image data, JFIF standard 1.01
C2B26273d01: JPEG image data, JFIF standard 1.01
C2C561E3d01: JPEG image data, JFIF standard 1.01
C2E76123d01: JPEG image data, JFIF standard 1.01
C2F66153d01: JPEG image data, JFIF standard 1.01
C36F6D63d01: JPEG image data, JFIF standard 1.01
C37E6D03d01: JPEG image data, JFIF standard 1.01
C3906D33d01: JPEG image data, JFIF standard 1.01
C3E76113d01: JPEG image data, JFIF standard 1.01
C3F66273d01: JPEG image data, JFIF standard 1.01
C46F6683d01: JPEG image data, JFIF standard 1.01
C47E6693d01: JPEG image data, JFIF standard 1.01
C4816673d01: JPEG image data, JFIF standard 1.01
C5816733d01: JPEG image data, JFIF standard 1.01
C5906723d01: JPEG image data, JFIF standard 1.01
C5B26703d01: JPEG image data, JFIF standard 1.01
C5E76713d01: JPEG image data, JFIF standard 1.01
C66F6763d01: JPEG image data, JFIF standard 1.01
C69067B3d01: JPEG image data, JFIF standard 1.01
C6A36743d01: JPEG image data, JFIF standard 1.01
C6B26753d01: JPEG image data, JFIF standard 1.01
C6D46023d01: JPEG image data, JFIF standard 1.01
C7B26013d01: JPEG image data, JFIF standard 1.01
C7C567B3d01: JPEG image data, JFIF standard 1.01
CC7E62A3d01: JPEG image data, JFIF standard 1.01
CCD46D13d01: JPEG image data, JFIF standard 1.01
CD7E6DC3d01: JPEG image data, JFIF standard 1.01
CD8163F3d01: JPEG image data, JFIF standard 1.01
CD906303d01: JPEG image data, JFIF standard 1.01
CDB263D3d01: JPEG image data, JFIF standard 1.01
CDF662C3d01: JPEG image data, JFIF standard 1.01
D06F6433d01: JPEG image data, JFIF standard 1.01
D0906013d01: JPEG image data, JFIF standard 1.01
D0A361D3d01: JPEG image data, JFIF standard 1.01
D0D46133d01: JPEG image data, JFIF standard 1.01
D1D46753d01: JPEG image data, JFIF standard 1.01
D1F664C3d01: JPEG image data, JFIF standard 1.01
D26F6743d01: JPEG image data, JFIF standard 1.01
D27E6723d01: JPEG image data, JFIF standard 1.01
D2A36773d01: JPEG image data, JFIF standard 1.01
D3C56623d01: JPEG image data, JFIF standard 1.01
D46F6403d01: JPEG image data, JFIF standard 1.01
D4C56413d01: JPEG image data, JFIF standard 1.01
D4D46453d01: JPEG image data, JFIF standard 1.01
D5D46423d01: JPEG image data, JFIF standard 1.01
D6E764A3d01: JPEG image data, JFIF standard 1.01
D7218B7Ad01: ASCII C++ program text
DC6F67B3d01: JPEG image data, JFIF standard 1.01
DC816203d01: JPEG image data, JFIF standard 1.01
DC906DA3d01: JPEG image data, JFIF standard 1.01
DCB262F3d01: JPEG image data, JFIF standard 1.01
DCC56313d01: JPEG image data, JFIF standard 1.01
DCD462A3d01: JPEG image data, JFIF standard 1.01
DCF663F3d01: JPEG image data, JFIF standard 1.01
DDF667C3d01: JPEG image data, JFIF standard 1.01
E46F7423d01: JPEG image data, JFIF standard 1.01
F06F6FC3d01: JPEG image data, JFIF standard 1.01
F0A37743d01: JPEG image data, JFIF standard 1.01
F0F66E63d01: JPEG image data, JFIF standard 1.01
F1906ED3d01: JPEG image data, JFIF standard 1.01
F1A36E33d01: JPEG image data, JFIF standard 1.01
F26F7733d01: JPEG image data, JFIF standard 1.01
F2817743d01: JPEG image data, JFIF standard 1.01
F2907723d01: JPEG image data, JFIF standard 1.01
F2B27773d01: JPEG image data, JFIF standard 1.01
F36F7623d01: JPEG image data, JFIF standard 1.01
F3907633d01: JPEG image data, JFIF standard 1.01
F3A37663d01: JPEG image data, JFIF standard 1.01
F3B27653d01: JPEG image data, JFIF standard 1.01
F3C577F3d01: JPEG image data, JFIF standard 1.01
F3D47673d01: JPEG image data, JFIF standard 1.01
F3E77713d01: JPEG image data, JFIF standard 1.01
F3F67703d01: JPEG image data, JFIF standard 1.01
F46F6143d01: JPEG image data, JFIF standard 1.01
F4907683d01: JPEG image data, JFIF standard 1.01
F4A37793d01: JPEG image data, JFIF standard 1.01
F4B27633d01: JPEG image data, JFIF standard 1.01
F4D47733d01: JPEG image data, JFIF standard 1.01
F4E76E33d01: JPEG image data, JFIF standard 1.01
F5816193d01: JPEG image data, JFIF standard 1.01
F5906013d01: JPEG image data, JFIF standard 1.01
F5B26173d01: JPEG image data, JFIF standard 1.01
F66F6F63d01: JPEG image data, JFIF standard 1.01
F67E6F73d01: JPEG image data, JFIF standard 1.01
F6816F33d01: JPEG image data, JFIF standard 1.01
F6906F13d01: JPEG image data, JFIF standard 1.01
F6B26F23d01: JPEG image data, JFIF standard 1.01
F6C56073d01: JPEG image data, JFIF standard 1.01
F6E76033d01: JPEG image data, JFIF standard 1.01
F6F66013d01: JPEG image data, JFIF standard 1.01
F7A36E33d01: JPEG image data, JFIF standard 1.01
F7C56F43d01: JPEG image data, JFIF standard 1.01
F7D46FA3d01: JPEG image data, JFIF standard 1.01
F7F66F53d01: JPEG image data, JFIF standard 1.01
FC907593d01: JPEG image data, JFIF standard 1.01
FCA37613d01: JPEG image data, JFIF standard 1.01
FCB27583d01: JPEG image data, JFIF standard 1.01
FCD476F3d01: JPEG image data, JFIF standard 1.01
FCF676E3d01: JPEG image data, JFIF standard 1.01
FFA69BC3d01: ASCII C program text, with very long lines, with CRLF line terminators
_CACHE_001_: , 44.1 kHz, Stereo
_CACHE_002_: , 44.1 kHz, Stereo
_CACHE_003_: , 44.1 kHz, Stereo
_CACHE_MAP_: GEM Image data 0 x 1, 0 planes, 0 x 0 pixelsize
You’re probably thinking that I could have skipped showing you that, but I think it’s important to note the file types that we’re working with. In this case, we have nothing but JPEGs, so this will make life much easier. In fact, we can sift through things very quickly. We’ll need a quick script to help us rename the files to have an extension an image browser will recognize:
$ file * | grep -i jpeg | perl -e '@lines =; `mkdir examine`; for(@lines){ ($file, $junk) = split/:/; print “Filename: $file\n”; `mv $file “examine/$file.jpeg”`;}’
Note we’re just filtering out JPEG files because the previous file magic check revealed they were all JPEGs. If you are looking for other file types, such as PNG, GIF, MOV, and etc, make sure to use the appropriate grep string (that matches something in the file magic string as returned from above) and the appropriate file extension in the mv call in the perl script. This will give us a directory called examine. From here, we have all the content we wanted to download! Just sift through the files with something like gThumb or eog:
$ eog ./examine/or
$ gThumb ./examine/
Now we have all of the content that the authors wanted to prevent us from downloading. The problem with trying to prevent a user from saving a file when the file clearly has to be sent to their computer is like giving someone access to your house without unlocking your door or giving them a key: it cannot be done easily.
Now you have all the tools you need to thwart useless internet protection schemes. This technique will most likely work with Firefox and all Mozilla derived browsers. I’m guessing even the new Ephiphany that uses WebKit will still allow for this. I’ve downloaded many race photos from photographers that try outsmarting me by disabling the file menu, right clicks, [AJ]SP server side hacks, and so many other futile techniques. This technique works with pretty much all files and filetypes. Some of the larger media formats, such as movies and tarballs end up in /tmp, so that requires a bit more digging, but the Ultimate Method can be applied in a similar fashion.
Happy thieving.
Friday The Thirteenth
So this past weekend lived up to the mythos. In fact, the week leading up to it was something else as well. So my tale of last week is broken up into a few sections here, which I’ll go over one by one.
The Pee Pants
On Wednesday, during my tempo run, I noticed everyone I passed was giving me a funny look. An elderly couple looked at me as if they were confused. I jokingly thought to myself that they must not be used to seeing a lanky guy like myself expending so much energy to barely move. A mother and daughter walking their dog refused to respond when I greeted them. Then, one woman on a bike initially gave me a welcoming smile but then sort of glanced down and winced. It was then that I realized there was something wrong, so I checked to make sure my baggage was stowed (if you know what I mean) and everything was in order. Everything seemed fine except there was a sweat pattern developing around my crotch. I’m sure it looked like I peed my pants, but I didn’t and it could have looked far worse.
The Ulcer
Jay: I farted on Jason’s pillow, he farted on Jonah’s, thinking it was mine, and eventually pinkeye-d my pillow. I’m not proud of any of this.
Well, I didn’t develop pink-eye, but it sure felt like I did. Friday morning I stuggled to keep my eyes open and found it grew worse throughout the day, leading into light sensitivity and soreness. I assumed it was just something in my eye and a night’s sleep would clear it up. It actually became worse, so I went to the optometrist. Turns out I had developed an ulcer in my upper right eye and it had become emergent. I had to apply drops in my eye hourly and go back the next day to check to see if the prescription was effective. I took the opportunity to live like Batman the next day and avoided spending any time in the sun.
It cleared up by about 80% on Sunday and I was told I could scale back the prescription usage. I should be able to start wearing my contacts again by Friday.
The Stitch
As per our Sunday evening routine, I was finishing a few things on the grill (mushrooms and under-cooked pork) when yet another emergency occurred. Our cheap knives have this bad habit of not staying in the handle, which led to one of the steak-knives doing just that. From about 3 feet off the ground, it feel tip down into my foot. There wasn’t any pain, but gravity took over and blood starting spurting out. I yelled at Sunshine to try and get her to bring me a towel to stop the bleed. Her response: bring a towel and the Britta water pitcher, apply the later before the former. This just caused more blood to pour out, so I took the towel, wrapped the wound, and hurried into the bathroom tub.
I don’t claim to be even remotely medical, so I figured a hospital visit was in order. The hospital may be less than 5 miles away, but we had to wait 2 hours to see a doctor, bleeding wound and all. After a smart-assed male nurse came in to give me a tetanus shot, the PA decided I only needed 1 stitch, which was quickly administered.
She also recommended that I not run (the fact that I was a runner was only logical after she took my blood pressure and found it to be 104/55) until the stitch was removed next Wednesday. I said to hell with that and ran yesterday and today anyways, albeit slower than planned. I figured if there are people that can run without feet at all, then the least I could do was deal with a single stitch without whining.
So here are my pace charts for last week. I burned ~1500 calories and struggled with the heat all week. I took a few walk breaks due to the oppressive heat. Sunday was not a good run, as you can tell from all of the up and down motion in the chart. Hopefully this week will turn out better.
Pace Chart Frustrations
So last week didn’t produce anything eventful in the running area. I powered through the runs and found that I get better in second extended interval than the first. I struggled with intense 40 mph winds on Wednesday’s tempo run which sapped the energy from me and caused me to walk a few times. Uphill and into heavy winds like that is no way to start a 3 mile tough run. I also made the mistake of changing the route Wednesday due to the increased distance that I definately paid for thanks to the wind.
The only thing worth noting is I had an excellent run on Saturday. I did not fatigue until the halfway mark, which is about 2 miles further than it took last week.
I’m posting this late in the week because of the troubles I had with SportTracks again. This software is seriously pushing my patience. I accidentally hit the start button on my Garmin when I was changing on Saturday, so there was a few seconds of no movement until I realized I had done so. The trouble came with importing the data. SportTracks has this nagging bug where it does not successfully delete the last track, so my pace chart was horribly skewed because of that accidental split. I kept trying to remove it and did everything I could think of. The solution I stuck with was splitting the track at the time that I thought I finished, then removed the new activity.
These kinds of bugs are trivial to fix, but take an extrodinary amount of time to get resolved in a closed source environment. Every little nitnoid like this is driving me closer and closer to an open source solution, such as PyTrainer. In fact, I am tempted to get started helping with development.
Anyhoo, here’s the charts:
Growing Frustration
I’ve been using Gentoo Linux for several years now and have been growing increasingly frustrated. There has been a steady decline in quality assurance. The core utils team has repeatedly made changes that cause widespread breakages without warning. Many of the ebuilds languish without active maintainers. The Bugzilla database is growing rapidly out of control. There seems to be anamosity amongst the developers as they have been struggling to keep valuable developers (so devrel has failed horribly). Most importantly, the council has decided they don’t want to following the rules set forth for them (lack of attendence at meetings requires an election). The only really promising Gentoo project is the Sunrise project (users submit ebuilds), but even this comes off as an attempt to solve the problem of a lack of developers.
The problems go on and on, most of which stem from the fact that the organization has greatly strayed from it’s original purpose: source compilable meta-distribution. There has been a large focus on the management and increasingly less focus on Getting Things Done. This is usually what causes the death of a project.
Every so often, I venture into DistroWatch to see what has been popular. Most of the time, I don’t see any promise amongst the distributions to provide the same quality and features that I fell in love with when I found Gentoo. Almost every visit meets with a decrease in Gentoo popularity. Recently I have been watching the rise of a distro called Sabayon. It’s based on Gentoo and seemed to have promise.
Upon further inspection, Sabayon is nothing more than a pre-packaged Gentoo overlay. That’s right, you can check out the overlay from a Gentoo install and quickly change to a Sabayon install. This basically does not impress me. So I continue the search.
Arch looks promising but their application tree is very sparse. I used to use Slackware, and would happily switch back if there was something like an up-to-date repository for packages. The “current” repository is nice but the lack of dependencies with the package maintainer could make things very tricky.
I refuse to use a Debian or RedHat based distribution unless there is something very compelling, like Portage and eutils, to draw my attention away. So if anyone out there has an suggestions, feel free to share.
U-Verse Dissected
So I promised I would explain how my setup works and here it goes. First some background though. For the last 6 years or so, I’ve been using a Linux box as a router / firewall. About 5 years ago, I started using IPCop, which has both functionalities built into a very stable version of Linux. I did this because I didn’t trust a Linksys machine or anything my ISP could give me. That inherit distrust carried through the years as I added several services / machines behind this gateway. I now run a web server (as you can see), a file server, a proxy server, 2 desktops, and now 2 IPTV set-top boxes courtesy of AT&T.
Typically, the RED interface of the router is connected to the modem. In this case, the modem and the RED interface both plug into the same switch. From there, the rest of the physical connections remain the same (except for how the Residential Gateway is connected).
The RG (Residential Gateway) apparently has some software to (somehow) detect that there is a router behind their router. After talking to 4 levels of tech support, I learned that the RG reserves the first 63 addresses as well as the addresses used by it’s DHCP service. You can disable the DHCP server on the RG, but then you cannot host your own website. I recommend moving all of your interal IPs to 192.168.1.1xx.
I set the GREEN interface to be 192.168.1.102 and all of the internal machines use this as their default gateway. I set the RED interface to pull a DHCP address. This is very important, as it will ultimately give us full control over our connection.
Then I disable all of the firewall services. From the settings page, add all of the services you will be adding to your external access or NAT tables internally. It it important to note that you should be forwarding these ports from the RG to the RED interface detected by the RG. From IPCop, turn on the aforementioned port forwards / external access settings.
Lastly, add your website (if you are hosting one) to the hosts file of each of your internal machines so they can access it. Otherwise, you end up with a wierd loopback connection problem that never resolves itself.
At this point, if you run a port scanner against your public IP, you should finally see port 80 is now available. Now you can use gigabit ethernet internally, have a fiber connection externally, host your own services, and wield full control of your internet connection. I was really on the fence about whether or not I was going to keep the service because of this port 80 issue, but now that it is resolved, I think I’m going to keep it.
I should note that I had troubles with getting DynDns’s Port Redirect service to work, so I’m not sure if that’s a viable option as well, but it may work out for you depending on your situation.
Bad Phishing Attempt
I usually don’t see many phishing attempts in my inbox as I am make heavy use of GMail’s “Report Spam” feature. If I receive anything I don’t want and it was unsolicited, it’s marked as spam, end of story. Today, I received a rather pathetic attempt at phishing for a bank account.
From: Bank of America Security Center
Subject: Unauthorized ActivityDear Bank of America client,
You have received this email because you or someone had used your account from different locations.For security purpose, we are required to open an investigation into this matter.
In order to safeguard your account, we require that you confirm your banking details.
The help speeed up to this process, please access the following link so we ca complete the verification of your Bank of America Online Banking Account registration information.
http://0×40164870/www.bankofamerica.com/sslencrypt218bit/online_banking
If we do no receive the appropriate account verification within 48 hours, then we will assume this Bank of America account is fraudulent and will be suspended.
The purpose of this verification is to ensure that your bank account has not been fraudulently used and to combat the fraud from our community. We appreciate your support and understanding and thank you for your prompt attention to this matter.
That’s the actual email. I mean, did a blind kid with a few fingers missing type this or just a Chinese student who’s learned the basics to English find they’re short on rent this month? First of all, the URL isn’t even abstracted to look like a real Bank Of America URL.
News flash idiot: 1) Bank of America emails come from Bank of America’s domain, 2) They’ll at least run a spelling/grammer check, 3) an account cannot be fraudulent, that makes no sense at all, even less so that the bank would suspend any account (they’d suspend activity, there’s a difference), 4) banks hardly put a rush on any activity required by the customer, so the 48 hours thing is just crap, and lastly 5) most banks that send these kinds of alerts out let you see the alerts from their homepages.
I’m not sure who this was intended to fool.
Legal Distractions
I promised a while back that I would sift through some of Microsoft’s patents to show how little merit their campaign against Linux really had. Well, I’ve been distracted from doing that lately, so let me explain a bit.
I have lived in 7 apartments since I moved out of my parent’s house 7 years ago. Seems like a few too many, but I actually took advantage of the typical 10 month lease most apartments offered (at the time) and moved into a new apartment every school year. I’ve had 4 roommates, one of which I am married to. I’ve never been evicted, but I have been evacuated before (I’ll have to tell that story later, it’s long). Anyways, the point I’m trying to make is that I am finally getting tired of living in apartments and think that we should start looking for a home of our own.
One thing that’s always bothered me about buying a home though is the Home Owners Association that many neighborhood force upon the owners. I’m not a big fan of someone dictating to me what I am allowed to do with my property so as long as it doesn’t violate state and federal regulations. To make things even less appealing, you have to pay fees and fines to this association. Sure, you get a well manicured entrance and possibly a community pool, but at what cost? Sunshine mentioned a friend of hers was evicted from her home because she did not pay some fines. Knowing this person, I suspect what really happened was the association dues were not paid. While I am not largely concerned with being forced to join a HOA as I have the choice of the neighborhood, I am very interested in the possibility of eviction over fines. I’ve even read that it would be possible for an HOA to foreclose on a home you own entirely, be granted the power of sale, and sell your home (which you own) to recover some fines. That seems extremely unethical and illegal, so let’s explore that some.
I decided to dig around and look into the Texas state regulations regarding property ownership rights and HOA regulations. I first started by finding a local area HOA website and read their CC&R’s (Convenant, Conditions & Restrictions). The HOA regulation that I will cite in the rest of this post refers to the Raven’s Nest neighborhood of Rockwall, TX (east of Dallas).
First let’s start by going over some of the statutes in the Texas Property Code since Texas (specifically, Hayes county) is used as a case study for property rights in the US. The applicable statutes is found in Chapter 209, titled ‘Texas Residential Property Owners Protection Act.’ Sifting through that chapter, you’ll find Section 209.009 the most interesting as it states the following:
Sec. 209.009. FORECLOSURE SALE PROHIBITED IN CERTAIN CIRCUMSTANCES.
A property owners’ association may not foreclose a property owners’ association’s assessment lien if the debt securing the lien consists solely of:
- fines assessed by the association; or
- attorney’s fees incurred by the association solely associated with fines assessed by the association.
Now, if I’m reading this correctly, an HOA is not allowed to foreclose on a home if the debt in question is based solely on fines from the HOA or legal fees incurred related to said fines. Digging around on the internet, you’ll find that this is in stark contrast to the Inwood North case back in 1985. This basically gave HOA’s in Texas the ability to foreclose on your home when you don’t pay your HOA dues. It’s unclear if these dues are the same as the aforementioned fines or legal fees assessed by the association. There is also the question of what is classified as debt and what is classified as a fine assessed by the association. That treads a very fine line and I bet there needs to be more of a legal precedent to define these terms.
So going back to Raven’s Nest. I took a look at their CC&R and found it to be rather restrictive and it actually contradicts state policy. Have a read, you’ll find that residents aren’t allowed to place any sign visible from the street, are forced to use white or light neutral window coverings, are not allowed basketball goals, and are not allowed to perform any sort of maintenance on their vehicles without prior authorization.
Of particular note is that Raven’s Nest prohibits signs of all nature. This directly violates the Chapter 202 Section 009, which grants all citizens the right to place political signs in the yard when an election is nearing. There are other contradictions, but it’s getting late and I am having a hard time looking for more (feel free to comment to others that I am missing).
In the end, I found that I will read every single article of any HOA rules and regulations as well as finish reading the Texas Property Code, as it applies to a homeowner. The good thing is the state legislature seems to be much more effective in making changes locally than the federal government. I now know that I will have to be in complete agreement with any HOA that I sign. I also intend on taking the system down from the inside out; I’ll probably join the HOA board and try to rectify arbitrary regulations that have little to no effect on the value of property.