Tuesday, March 31, 2009

Pidgin Crashreporter

The following pic shall show you how the crashreporter springs up when the application crashes. The plugin i wrote had a simple *a=NULL; *a=bla; which made it crash.

The plugin will be correctly reported in the reporter window. It's shows that even w/o debugging symbols we might find what the source of problem is, specially for third party plugins

Monday, March 30, 2009

Breakpad Functioning

This is an Illustration of how Breakpad works.... just to illustrate how the Library behaves etc....

The code I am using is pretty trivial hence the trace etc shall be pretty small newayz....

Here's a simple program that crashes relentlessly :P



include

#include

#include

#include

#include

#include

#include "client/linux/handler/exception_handler.h"

#include "client/linux/handler/linux_thread.h"

using namespace google_breakpad;

static ExceptionHandler* handler_process=NULL;

// Callback when minidump written.

static bool MinidumpCallback(const char *dump_path,

const char *minidump_id,

void *context,

bool succeeded) {

printf("%s is dumped\n", minidump_id);

return true;

}

static void *thread_crash(void *) {

ExceptionHandler handler_process(".", NULL, MinidumpCallback,

NULL, true);

while(true) sleep(1);

}



static void CreateCrashThread() {

pthread_t h;

pthread_create(&h, NULL, thread_crash, NULL);

pthread_detach(h);

}



int main(int argc, char *argv[]) {

int handler_index = 0;

CreateCrashThread();

int *a=NULL;

*a=0; //crash

while (true)

sleep(10);

return 0;

}



What i'll do is compile this code via linking it through the Breakpad Library! I had to compile the code bit by bit.... most of the tools etc were not built by default and were left for( i dunno ) exercise? Newayz......

sanket@sanket-desktop:~/.subversion/google-breakpad-read-only/src/client/linux/handler$ gcc -c -gstabs -I ../../../ myCrash.cc

sanket@sanket-desktop:~/.subversion/google-breakpad-read-only/src/client/linux/handler$ g++ -gstabs -lpthread myCrash.o exception_handler.o linux_thread.o minidump_generator.o ../../minidump_file_writer.o ../../../common/convert_UTF.o ../../../common/string_conversion.o ../../../common/linux/file_id.o ../../../common/linux/guid_creator.o md5.o -o output

sanket@sanket-desktop:~/.subversion/google-breakpad-read-only/src/client/linux/handler$ ./output

5012fabe-5cd6-0ede-35eb05fb-77e2564c is dumped

sanket@sanket-desktop:~/.subversion/google-breakpad-read-only/src/client/linux/handler$ ls -lh 5012fabe-5cd6-0ede-35eb05fb-77e2564c.dmp

-rw------- 1 sanket sanket 18K 2009-03-30 16:55 5012fabe-5cd6-0ede-35eb05fb-77e2564c.dmp


Hence we have a dump which will invariably be of size of 10-20 Kb. There can be optimization here based on local processing so as to reduce server load... but i'll defer from treating that topic here :)

The important thing is the generation of meaningful data from this dump. As I have used the normal libs( libstdc++ etc ) which dont have symbol information the output might not be that well percieved;

sanket@sanket-desktop:~/.subversion/google-breakpad-read-only/src/tools/linux/dump_syms$ ./dump_syms ../../../client/linux/handler/myCrash.o > myCrashSyms.sym

There's a python code which i searched and it's pretty good when creating Symbols from files in a very systematic File Hierarchy i shall use that code as a Part of a larger project that might need more tweaking... here's the link..


http://crashopensource.files.wordpress.com/2007/12/symbolstore12_07_2007.txt

Continuing i shall show you the result after running minidump_stackwalk on the minidump file along with the symbols file we just created:

Here's the o/p when run with minidump_stackwalk bin.



------------------------------------------------------------------------------------------------------------------------

Operating system: Linux

0.0.0 Linux 2.6.27-11-generic #1 SMP Thu Jan 29 19:24:39 UTC 2009 i686 GNU/Linux

CPU: x86

GenuineIntel family 6 model 6 stepping 5

2 CPUs

Crash reason: SIGSEGV

Crash address: 0x80497d1

Thread 0 (crashed)

0 output + 0x17d1

eip = 0x080497d1 esp = 0xbfe87360 ebp = 0xbfe87378 ebx = 0xb7e14ff4

esi = 0x08053650 edi = 0x080496c0 eax = 0x00000000 ecx = 0x00005045

edx = 0xb7cb9b90 efl = 0x00010246

1 libc-2.8.90.so + 0x16684

eip = 0xb7cd1685 esp = 0xbfe87380 ebp = 0xbfe873e8

Thread 1

0 0xb7f87430

eip = 0xb7f87430 esp = 0xb7cb6d50 ebp = 0xb7cb6f28 ebx = 0xb7cb6f14

esi = 0xb7cb6f14 edi = 0xb7cb6f14 eax = 0xfffffdfc ecx = 0xb7cb6f14

edx = 0xb7e14ff4 efl = 0x00000246

1 output + 0x1929

eip = 0x0804992a esp = 0xb7cb6f30 ebp = 0xb7cb93b8

2 libpthread-2.8.90.so + 0x650e

eip = 0xb7f4350f esp = 0xb7cb93c0 ebp = 0xb7cb94b8

Loaded modules:

0x08048000 - 0x08056fff output ??? (main)

0x08057000 - 0x08057fff output ???

0x08058000 - 0x08058fff output ???

0xb7cbb000 - 0xb7e12fff libc-2.8.90.so ???

0xb7e13000 - 0xb7e14fff libc-2.8.90.so ???

0xb7e15000 - 0xb7e15fff libc-2.8.90.so ???

0xb7e19000 - 0xb7e25fff libgcc_s.so.1 ???

0xb7e26000 - 0xb7e26fff libgcc_s.so.1 ???

0xb7e27000 - 0xb7e27fff libgcc_s.so.1 ???

0xb7e28000 - 0xb7e4bfff libm-2.8.90.so ???

0xb7e4c000 - 0xb7e4cfff libm-2.8.90.so ???

0xb7e4d000 - 0xb7e4dfff libm-2.8.90.so ???

0xb7e4f000 - 0xb7f31fff libstdc++.so.6.0.10 ???

0xb7f32000 - 0xb7f35fff libstdc++.so.6.0.10 ???

0xb7f36000 - 0xb7f36fff libstdc++.so.6.0.10 ???

0xb7f3d000 - 0xb7f51fff libpthread-2.8.90.so ???

0xb7f52000 - 0xb7f52fff libpthread-2.8.90.so ???

0xb7f53000 - 0xb7f53fff libpthread-2.8.90.so ???

0xb7f6d000 - 0xb7f86fff ld-2.8.90.so ???

0xb7f88000 - 0xb7f88fff ld-2.8.90.so ???

0xb7f89000 - 0xb7f89fff ld-2.8.90.so ???


------------------------------------------------------------------------------------------------------------------------


It sums it all.... we can now start creating symbol compiled library and compile them with -gstabs etc to produce the appropriate symbols etc.

Chao :-)





Sunday, March 29, 2009

AbiwSnap


Here's the .png file

Monday, March 9, 2009

Crash'em all

NOTE:- This is a high end technical post.... if you are really not into it, I really don't care of the total hits :)

It's been a long time since I've been working on a new library. I wont be opening the flood gates by letting all information flow... but still show you some glimpses of how technology has changed in this all so complex Open Source business.

What generally happens when your program crashes... well most of you think it in terms of "Hanging of the binary" and it's consequential termination by the Kernel.
The kernel does so when it sees that the binary is either trying to occupy some domain not in it's program stack space or when it tries to access pointer to some restricted space.

Now it's an interesting fact that most of you might not know.... whenever a program is executing, the processor takes one instruction at a time( for the time being the instruction can be thought of as a line in the program ). It's interesting to note that, what all happens is that the program counters, it's activations records and other state variables move from one state to other. Changing the configuration continuously. And yes... you can capture each configuration seperately. Have a look at this C file:

#include
#include

void bug();

int main(int argc, char *argv[])
{
int a=0,b=1,c=2;
printf("till here everthing is fine %d %d %d",a,b,c);
bug(); //wooo... crash
printf("dont hope to reach here :P");
return 0;
}

void bug(){

int i,a[10];

for(i=0;i<1000;i++) style="color: rgb(51, 51, 255);">sanket@sanket-laptop:~$ gdb ./a.out

GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(gdb) b main
Breakpoint 1 at 0x8048385: file bug_c.c, line 8.
(gdb) r
Starting program: /home/sanket/a.out

Breakpoint 1, main () at bug_c.c:8
8 int a=0,b=1,c=2;
(gdb) s
9 printf("till here everthing is fine %d %d %d",a,b,c);
(gdb) s
10 bug(); //wooo... crash
(gdb) s
bug () at bug_c.c:17
17 int *a=NULL;
(gdb) s
20 a=10; //my classic was to trigger bug.. unless kernel is too generous :D
(gdb) s
21 printf("%d",*a);
(gdb) s

Program received signal SIGSEGV, Segmentation fault.
0x080483f1 in bug () at bug_c.c:21
21 printf("%d",*a);
(gdb) bt full
#0 0x080483f1 in bug () at bug_c.c:21
a = (int *) 0xa
#1 0x080483c0 in main () at bug_c.c:10
a = 0
b = 1
c = 2

The interesting thing here is the command bt full, which displays the position of the function while it crashed. Clearly, we had a crash in bug() followed by that in main() and the backtrace has two function calls as it is evident.

This information is extremely essential when debuggers/programmers set out to solve a bug. This trace has a lot more to it then it'll look at first... just for instance look at this trace( it's a crash of a proprietry software ;) )

(gdb) core-file core
(no debugging symbols found)
Core was generated by `/media/disk/iViz/project/avgscan avg_poc.exe'.
Program terminated with signal 11, Segmentation fault.
[New process 31608]
#0 0xb7d1b4e7 in ?? ()
(gdb) bt full
#0 0xb7d1b4e7 in ?? ()
No symbol table info available.
#1 0x080809c4 in ?? ()
No symbol table info available.
#2 0x080826f2 in ?? ()
No symbol table info available.
#3 0x08052651 in ?? ()
No symbol table info available.
#4 0x08053753 in ?? ()
No symbol table info available.
#5 0x08053a82 in ?? ()
No symbol table info available.
#6 0x0806bf7f in ?? ()
No symbol table info available.
#7 0x081685b2 in ?? ()
No symbol table info available.
#8 0x08168b19 in ?? ()
No symbol table info available.
#9 0x0816976b in ?? ()
No symbol table info available.
#10 0x0818898e in ?? ()
No symbol table info available.
#11 0x081894f9 in ?? ()
---Type to continue, or q to quit---
No symbol table info available.
#12 0x0818b331 in ?? ()
No symbol table info available.
#13 0x0817c20f in ?? ()
No symbol table info available.
#14 0x0817d51f in ?? ()
No symbol table info available.
#15 0x08192df5 in ?? ()
No symbol table info available.
#16 0x08193348 in ?? ()
No symbol table info available.
#17 0x0818c1a7 in ?? ()
No symbol table info available.
#18 0x0818d18f in ?? ()
No symbol table info available.
#19 0x08158429 in ?? ()
No symbol table info available.
#20 0x08151006 in ?? ()
No symbol table info available.
#21 0x08151d40 in ?? ()
No symbol table info available.
#22 0x0815301d in ?? ()
No symbol table info available.
---Type to continue, or q to quit---
#23 0xb7cbe450 in ?? ()
No symbol table info available.
#24 0x0804e4f1 in ?? ()
No symbol table info available.
(gdb)

some more information that can be useful:

(gdb) info all-registers
eax 0x0 0
ecx 0x35427516 893547798
edx 0x0 0
ebx 0xd50bd000 -720646144
esp 0xbfffdee8 0xbfffdee8
ebp 0xbfffdf28 0xbfffdf28
esi 0xd50bd000 -720646144
edi 0x834b000 137670656
eip 0xb7d1b4e7 0xb7d1b4e7
eflags 0x10246 [ PF ZF IF RF ]
cs 0x73 115
ss 0x7b 123
ds 0x7b 123
es 0x7b 123
fs 0x0 0
gs 0x33 51
st0 0 (raw 0x00000000000000000000)
st1 0 (raw 0x00000000000000000000)
st2 0 (raw 0x00000000000000000000)
st3 0 (raw 0x00000000000000000000)
st4 0 (raw 0x00000000000000000000)
st5 0 (raw 0x00000000000000000000)
st6 39855 (raw 0x400e9baf000000000000)
---Type to continue, or q to quit---
st7 39855.5 (raw 0x400e9baf800000000000)
fctrl 0x37f 895
fstat 0x4020 16416
ftag 0xffff 65535
fiseg 0x73 115
fioff 0x81fe18a 136307082
foseg 0x7b 123
fooff 0xbfffe960 -1073747616
fop 0x59d 1437
xmm0 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm1 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm2 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm3 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
---Type to continue, or q to quit---
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm4 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm5 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm6 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm7 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 }, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
mxcsr 0x1f80 [ IM DM ZM OM UM PM ]
mm0 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm1 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
---Type to continue, or q to quit---
mm2 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm3 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm4 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm5 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm6 {uint64 = 0x9baf000000000000, v2_int32 = {0x0, 0x9baf0000},
v4_int16 = {0x0, 0x0, 0x0, 0x9baf}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0xaf, 0x9b}}
mm7 {uint64 = 0x9baf800000000000, v2_int32 = {0x0, 0x9baf8000},
v4_int16 = {0x0, 0x0, 0x8000, 0x9baf}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x80, 0xaf, 0x9b}}
(gdb)

Newayz the registers are really important though you may not even get a sniff from the above depiction. Another interesting output I want you to see... just refer to the first program:

sanket@sanket-laptop:~$ gdb ./a.out
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu"...
(gdb) breakpoint main
Breakpoint 1 at 0x8048385: file bug_c.c, line 8.
(gdb) run
Starting program: /home/sanket/a.out

Breakpoint 1, main () at bug_c.c:8
8 int a=0,b=1,c=2;
(gdb) s
9 printf("till here everthing is fine %d %d %d",a,b,c);
(gdb) bt full
#0 main () at bug_c.c:9
a = 0
b = 1
c = 2
(gdb) info sharedlibrary
From To Syms Read Shared Object Library
0xb7fe47f0 0xb7ff979f Yes /lib/ld-linux.so.2
0xb7e90230 0xb7f90d84 Yes /lib/tls/i686/cmov/libc.so.6
(gdb) info locals
a = 0
b = 1
c = 2
(gdb)

What I've done is... stopped the program flow at a certain point( by use of breakpoints ) stepped through a few lines and shown you the state of the program... wow!! You can get what the program is doing at any damn stage of execution :P. You might want to play with it.... and debug and do whatever you want to :D:D


All that I've shown you is the importance of a Backtrace... what exactly it implies and what it has in store of interested parties!!



Saturday, March 7, 2009

In Order to Understand RECURSION.... you need to understand RECURSION

Thats a pretty famous quote.... more of an Intellectual humour aimed at the lesses beings often called programmers. It's really amazing how programmers are treated.. and how they themselves treat the society!

Almost none of them have ever met each other.... though they are always chatting away :P. They follow hell of a lot Protocols where there lives themselves are a complete hapazad.

I was recently going through some of the Company names and some of them struck to me, to be VERY interesting....

NOTE:- If you cant understand the utility of the article... then open your WINDOWS and explore Vista's of opportunity through it :P.

If you didnt understand the note.... goshh.... u r stuck into a recursion... only a Stack Overflow can save you :D:D

It struck to me when I was actually watching a movie on Linux, GNU and Open Source.( There are very few available, though I have some personal copies... try to xplore my DC share ).

The Name GNU is interesting in the fact that it's Recursive in Nature:-

GNU - GNU's not UNIX.

GNU is basically a Open Source Operating System based on UNIX family, developed my Richard Stallman. He named it GNU because it was a general feeling that GNU would be considered as a successor of UNIX hence the Open Source thingy shall never be very Open.

Well all of you, who try to run hopeless Win Apps in Ubuntu, must have gone through this application called WINE.

Though the application devels have made a Wine glass to have sip on ;), it's actually a recursive name:-

WINE - Wine is not an Emulator.

Basically there's a misconception about the working of wine, and the programmers have a unique way to answer critics.... way to go people :P

There's another company, which is in itself a ingenous in the way it works:-

CYGNUS- Cygnus, your GNU support.

Looking at it, wow, thats a double recursive name.

There are some more interesting one's,though I wont be detailing all of them... have a look:-

  • giFT — giFT: Internet File Transfer
  • GiNaC — GiNaC is Not a CAS (Computer Algebra System)
  • GNE — GNE's Not an Encyclopedia
  • GNU — GNU's Not Unix
  • JACK — JACK Audio Connection Kit
  • JOE — Joe's Own Editor
  • KAGE — KAGE: Alternative Game Engine
  • KINACS — KINACS is not a circuit simulator
  • LAME — LAME Ain't an MP3 Encoder[2]
  • LiVES — LiVES is a Video Editing System
  • MiCRS - MiCRS is a Car Rental System
  • MiNT — MiNT is Not TOS (later changed to "MiNT is Now TOS")
  • MINT — MINT Is Not TRAC
  • Mung — Mung Until No Good[3]
  • Nagios — Nagios Ain't Gonna Insist On Sainthood
  • NiL — NiL Isn't Liero
  • NINJA - Ninja Is Not Just Air[4]
  • PHP — PHP: Hypertext Preprocessor (originally "Personal Home Page" tools, officially changed for PHP 3)[5]
  • PINE — PINE Is Nearly Elm, originally; PINE now officially stands for "Pine Internet News and E-mail"[6]
  • PIPS — PIPS Is POSIX on Symbian OS
  • RPM — RPM Package Manager (originally "Red Hat Package Manager")
  • Scaled — Scaled Composites: Advanced Link to Efficient Development
  • SPARQL — SPARQL Protocol And RDF Query Language
  • TiLP — TiLP is a Linking Program
  • TIP — TIP isn't Pico (original name for Nano text editor)
  • UIRA — UIRA Isn't a Recursive Acronym
  • WAM - WAM Account Manager
  • Wine — Wine Is Not an Emulator[7]
  • XBMC — XBMC Media Center (originally Xbox Media Center)
  • XINU — Xinu Is Not Unix
  • XNA — XNA's Not Acronymed
  • YAML — YAML Ain't Markup Language (initially "Yet Another Markup Language")
  • ZINF — Zinf Is Not Free
  • ZINC — ZINC Is Not CMS

Well I hope you enjoyed the recursion.......... chao :P

Monday, March 2, 2009

FACEBOOK GONE... awww i have Your Freedom

Hey all.

I am back with a purpose to fulfill through this post, well recently i heard that Bits has restricted the proxy servers to block Orkut, Facebook and etcetera and etcetera.

Well I have a solution for you... this might not work at once but if you give me proper inputs on what exactly is happening, I may get things cosy and running for you.

So let's get going.

First thing you need to do is to get the Your Freedom Client from the Site. Pretty simple :)

http://www.your-freedom.net/

You can have many download options. Those using Windows flavors may download the executable and those using *NIX flavors may use the .jar ones.

If you are a mundane Windows user just get the simple executable. :)

Now here's what Your Freedom is all about...

As you can see in the image, the firewall the institute bounds you in is generally what restricts you from the sites like Orkut, Facebook etc because it knows the IP address these sites provide and hence block it directly in their Domain Name Service( DNS ).

But what the Your Freedom client will do is this... it'll send your request to an unrestricted site( there are lots of site that can act as servers and your institute jut cannot stop'em all... :P) . When you send your request of orkut.com it actually dosent goto orkut, it is rather wrapped in a request to one of the servers of Your Freedom( that u'll select ). Hence the firewall dosent know that it's a request to Orkut as it has been wrapped in a request to the YF server. The YF server then unwraps it, knows that u want to access Orkut, gets that page( because it has got the access rights ) and sends that page of orkut.com as a reply.

Again an interesting fact.... how does the firewall not know that it's a Orkut page while it is comming inside your Network.

Actually the page orkut.com as been sent by the YF server... and hence it's got a tab of YF.

To installation and working:

1. Get yourself registered on the Your Freedom site. They'll mail you a username password pair:

this is what i created for u guys:

Username: orkuthack
Pass: orkuthack

Please register yourself in case this dosent work or mail, reply to this post in case you want one.

2. Steps to Configuration:

The first screen you'll see is this:


Click the usual next :)


Now as far as i know this is the most critical step.... in Kgp here we use proxies and hence the fields are filled with those. But as far as i have gained knowledge many LAN's dont have proxy services... i am pretty amazed how they get them to work.... but if you have one put it there... else leave it blank.

If you do the usual nexts... and if the settings are all fine u'll get this list of servers.... not xactly this but maybe more maybe less.... :)


Now choose one of them and you're almost done.



Now save and exit....




Start the connection.... if you got this far them congrats.... you are through!

Now to the real stuff... how to access the restricted pages....

Fisrt open your Firfox, Internet Explorer and have a look at these screenshots... u'll get the feel automatically... :)

Goto: tools->options->advanced



Now goto the settings tab:

it's just full screened so dont be banboozled.... now put the placeholders as they are :)

If everything has been done perfectly... you may sufr the net.

Just a simple logic here... if you open google.com... what shall you get??

You wont get the familiar google.com/in but rather the google.com which is local to the sever... so if it's a france server then the language of googl shall be french :P.

Please gimme comments over where xactly you are facing problems..

Regards to all distressed friends
Sanket