[A Journal] A Programmers Journey Into SEO

Senotaru

Registered Member
Joined
Jan 17, 2011
Messages
67
Reaction score
11
First off, let me start off by saying good evening. I hope everyone out there is doing alright. Inspired by a few other posts in this section, I have decided to share my journey through programming in the blackhat world and provide some relevant information along the road.

I'd like to start off with a little about myself. I've worked in programming for about 6 years, although mostly freelance. I had an internship at a language company's programing department making mobile apps when I decided not to seek a position at the company. After that I was mainly doing point of sales software for local businesses and some various other things when I came across the idea of SEO. Basically eating raman noodles every day until this point, I've decided its time to pursue a different means of getting money. I've traveled around and I've done my homework and I feel pretty confident in my newest venture.

Hopefully, we can all get something out of a little bit of shared knowledge.

I started working on this project not too long ago and will catch you up on its development:

[See Attachment 1]

I figure why make a bunch of programs with sloppy code if I can make one program that works and only requires a few lines for development. That's the current plan, at least. Just so you know what I'm talking about in the future (This part might be boring, but I want to explain the idea of what I'm trying to do at the moment. Feel free to skip):

Idea:
A program that can handle massive amounts of requests to do anything on the internet quickly, proxied, undetected, and multithreaded. With rapid development for websites or ideas. Aka, never pay for SEO software.

[See Attachment 2]

To do this I know the main application is going to need to following things (These are just my notes just far.):

  1. A Webrequest class. Resorting to httpwebrequest and will switch to sockets once that replacement class is completed.
  2. A plugin system. Since the idea for the program is fast asynchronous requests. Multithreading is a must. The main program will need to be able to call to the plugin and start the necessary functions. The threading should be run on the main program, and just the web request code should be needed to be included in the plugin.
  3. A Text Replacement System (Macros). Since this can be used for things like posting and registering on sites, some randomization is key. A strong macro system makes everything simple to change at run time. This is for spinning text, or calling a function from the program to do something. Macros will consist of #Macroname(Params). Example: "#Spin(Hello!, Hello2, Hello3)" will return one of those 3. The replacement method should be recursive
  4. A method for DeCaptcha. Should be able to add, edit, or delete methods for captcha solving. Should have a system included for manual entry if no other method is selected.
  5. Anti Piracy. Some method of antipiracy to protect markets assuming the software gets into the wrong hands.
This is the layout I have to work with. I figure the two logical start points are account creation and proxy detection. I have finished most of the macro, webrequest, and plugin system, and I'm currently trying to build addons and fix bugs that are in the system. I'll provide the solution to those bugs and as many code examples of what I'm doing in future posts.

The final attachments are examples of various other aspects of the software.

Small Explanation of what you're looking at:

AddCampaign.png:
Adding a campaign. This is how you set the program to run a version of a plugin and to do its tasks. In this example, I just scraped a single page off google and had the program visit all the links it picked up. The UI in this page is all included within the plugin. Scraping of all the pages, parsing and adding of the proxies collectively took 1.5 seconds.

MacroMaker.png:
Adding a macro to the system. These macros can be used anywhere in any request, can be added or modified by addons, and empower much of what the system is. It ensures random content for every post that is sent. Basically, any text box in the program can include a macro.

MacroSystemTest.png
Testing of the macro created above.

I'll save you the trouble of more reading but hopefully you get where I'm at with the software and what I intend to do. I'll post on progress when I have time if any of you are interested in following.

Anyhow, any thoughts? Criticisms? Ideas? Let me know what you think. I'll continue with some programming tools and various methods I use to make a little coin in coming days.
 
Last edited:
All i gotta say is that, you seriously have some skills most people would want to have when doing IM.You know , I am eating raman noodles as am writing this thread too its pretty late so i was lazy to make some dinner.Building a seo tool like that one takes time and good knowledge of programming. I still program my little snippet of codes to do various tasks but nothing to that extent. I just hope you learn soon the ropes of Internet Marketing so you can use your programming skills to make yourself some mula, i dont mean like 9 to 5 wage but real money once you know the ins and out and whats tools are needed to hit it big.

Good luck bro , I like seeing bright minds at work!
 
Just make a program that people need, and charge a nominal monthly fee for it, 15$ a month multiplied by 1000 users is good money
 
Just make a program that people need, and charge a nominal monthly fee for it, 15$ a month multiplied by 1000 users is good money

The idea behind this particular project is to have a scalable tool that is capable of registering, posting and scraping. It won't be used for everything like SERP data. Just something that needs to be done and something saved to a text file. However, this system can be applied to any software since they are all classes and can work either independently or together. The program itself is really just an example of the classes I've developed for future programs being used together in a certain way.

The idea is scalability. Where you pay for one program and get access to several others (other plugins) at really a minor cost. This enables you to let the program adapt to you rather than you adapt to the program. This also cuts back on production time for bots (Can do a compete system in about 45 minutes with the most time consuming aspect just being minor ui tweaks) with a standard level of quality that the end user can expect

Just my two cents and where I'd like to be taking this software. Its not perfect yet, and really has a ways to go. I'm going from working on point of sales to SEO so its a pretty dramatic shift and I'm having to learn about stuff I've never used before.
 
Last edited:
Review what tools are already out their and in the hands of your potential customers so that your new tool set fits with these.

An example - you stated for the text replacement system - "Macros will consist of #Macroname(Params). Example: "#Spin(Hello!, Hello2, Hello3)" "

Many potential customers will have spinning tools which use the more standard {text1|text2|text3} format and hence a stockpile of prepared comments or articles using this format. As you are making a tool from scratch you should use this format rather than inventing your own. In this way your toolset can fit into their existing activities.

On a similar vein with the decaptcha. There are several services out there so ensure that your tool can link to several rather than hard coding in one service supplier. Better still include your own plug-in driven decaptcha. The ability to solve simple decaptcha images on the desktop is valuable helping customers avoid ongoing charges from the decaptcha services.
 
Interesting journal...a programmer's one, gonna watch you close

Good luck in your quest and keep us updated
 
Thanks for the post Quadratic! I just wanted to say that this already implements the standard. However, it implements the standard spin sytax on another level and will not recursively call a function placed within it. This is currently an issue I'm working on, or at least its on my list of things to finish. So for example, #Spin(#MakeString(3,6|#MakeIntString(3,6)) will produce either a random string, or a random number of integers. However, {#MakeString(3,6)|#MakeIntString(3,6)} will return either of those strings literally.

Anyhow, in terms of DeCaptcha, this is the system I have implemented and so far works for most systems I've found as long as they have a http method for upload. Its a little inconvenient to make a new service, but luckily I have several made up for download. I think the UI is a little confusing but I'm not too sure another way to solve the problem. Assuming I've heard of the service, chances are good there will already exist a version of it included in the original program. If not, you just have to add a few lines. A simple OCR class is in the works.

I really appreciate the input, by the way, taking everything you guys say seriously.

edit:

When you add an account in the decaptcher settings, they will show up in the "DeCaptcha" box when adding a campaign, seen in the other photo. It will use what ever service you have selected when making the account. You can use multiple decaptcher services, with multiple accounts, across multiple campaigns at the same time. Each Campaign is run with settings independent of the rest. Proxies, macros, decaptcher services are all variables that can be set for each campaign.
 
Last edited:
Finished this addon today. Giving an example of it running and manual captcha solving.

Total Development time was a little under an hour and it can successfully register accounts and save them.

Currently I have this set up to run 30 threads concurrently. While this employs httpwebrequest there is no identifiable difference between it and firefox. It doesnt need to wait for the page to load, only to find the values it searches for, so an account be literally made in tenths of a second only leaving time for captcha solving

I'm a little worried that employment of this software might be a little too successful. Since the requests are dynamic and can be edited at run time, you can essentially send out outrageous amounts of requests to as many sites as you want and I'm a little worried this tool, at that point, would be considered something on the level of ddos.

Sorry, I'm just speaking aloud. So far so good. I will post a final summary of progress over the night in a few hours when I wrap up what I'm working on.
 
Last edited:
Sorry for the rapid updates, but I have a strict philosophy of getting work done. Updates will be rapid in the next few days as major developments happen since this is getting near the end of the development cycle when pieces start to fit together. Sorry also for all the programming updates. This thread is of course from a programmers prospective. I have a few specific models for monetizing a few sites that have yet to be touched and I'll explain those methods in farther detail once I get a working platform off which to work. I'll post things I've learned to help those struggling. Feel free to ask questions or for me to explain something in more detail because I would be happy to do so.

I'm working on the proxy scraper and checker right now, and this along with finishing the account creator, some very obvious limits are presenting themselves with httpwebrequest. Its become obvious that, while the current method is a lot quicker than other methods currently used, its being held back in large part due to flaws of this class.

I've been dabbling in sockets for the last hour or so for the first time. I've never really had any experience on this low of a level in terms of http. The first and most obvious limiter I've run inti in this situation is SSL and HTTPS. I've had to figure out how to emulate the CONNECT method in a way that emulates another browser.

After some intense frustration of nearly computer smashing levels, I have figured out how to emulate that request.

Here is a breakdown of the major portions of the code to point you in the right direction if faced with a similar issue in the future: Substitute your own code where necessary

Code:
            String hostIp = Dns.GetHostEntry(hostname).AddressList[0].ToString();
            TcpClient client = new TcpClient(hostIp, 443);
            SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateCertificate), null);
            String returned = "";


            try
            {
                sslStream.AuthenticateAsClient(hostname);
            }
            catch (Exception ex) { client.Close(); return ex.Message; }

            byte[] postBytes = Encoding.UTF8.GetBytes(headers + container.GetCookieString(hostname) + "\r\nConnection:Close\r\n\r\n");
            sslStream.Write(postBytes);
            sslStream.Flush();

            returned = readSslStream(sslStream);
            client.Close();
The decode method:
Code:
            byte[] downloadedData = new byte[2048];
            StringBuilder returned = new StringBuilder();
            int bytes = -1;

            do
            {
                bytes = sslStream.Read(downloadedData, 0, downloadedData.Length);
                Decoder decoder = Encoding.UTF8.GetDecoder();
                char[] chars = new char[decoder.GetCharCount(downloadedData, 0, bytes)];
                decoder.GetChars(downloadedData, 0, bytes, chars, 0);
                returned.Append(chars);
                if (returned.ToString().IndexOf("<EOF>") != -1) break;
            } while (bytes != 0);

            return returned.ToString();
 
Last edited:
I have a question regarding a dilemma regarding how much of being a programmer helps us in your IM career which I am faced with.PM already sent.
Can you please guide me which would be of great help.
Thanks
 
Good evening.

Today's Plan:
-----------------------

Today I'm working on the socketed replacement class for httpwebreqest. I have successfully been able to post to https across a proxy which is fantastic news. That was one of the reasons I hadn't done this sooner. I'm currently trying to figure out a reasonable way of handling cookies since I have to write the handler from scratch. Once I figure that out, I can move forward.

The proxy checker appears to be finished, although there are some anomalies that have presented themselves, such as not writing to the save file correctly from time to time. I'm unsure what is causing this.

I plan to add a section to the Campaign List that includes the amount of bandwidth used by each campaign once the request class has been switched over to sockets, again contingent on development of a cookie handling system.

The percent portion of campaigns are currently glitched. This is likely due to a mistake in logic. Solution is just a matter of finding it.

Where I'm headed
-----------------------
Once the above is complete, the next addon I'll be making is a social bookmarking register and poster. I have been looking into message spamming on certain dating sites that have not been touched by other scripts. One site specifically employs no type of captcha and has 115 million registered members. There is no limiter as to how many messages you can send, and can even send chat requests to people who are offline. Their messaging system works like Facebook's IM system, so when a user gets a message it takes effort to actually ignore it. If they are online, it will pop up on their screen. This is a great way of sending out links. As long as you have their name, you can send a message. Assuming you have 115 million proxies, in theory, you can reach every account there. This will be a simple bot.

This is what my day is looking like.
 
Last edited:
Update:
Fixed some issues with the proxy scraper. I was able to successfully grab 360 working, anonymous proxies and I tested them against the site I intended to use them on. I also tested the ability to post with them. I grabbed all the proxies from 1 page off google, and then visiting and scraping the proxies off those pages. The system is working rather quickly, I was able to do this in 1.5 seconds roughly, and was able to test the 2,200 scraped proxies in about 2 minutes. To be sure the proxies were indeed anonymous and the software was working as intended, I ran the results through Charon, with only a few missmatches that were not out of the norm. 4 proxies returned not anonymous in Charon out of the pool, but Charon did not list a reason for this since no gateway was posted.

I tested the hotmail account creator and was able to get 70 accounts before I got bored of typing Captchas. Its time to invest some money in a DeCaptcher account and allow the software to run for a bit and amass a few thousand hotmail accounts before moving on to social media.

Also, the need for account aggregation and mass maintenance has arose. This, too, should be a really simple addon. I'll work on this after I work out a few UI bugs I'm dealing with, such as Campaign Percentage not working and to fully implement bandwidth usage for campaigns.
 
Last edited:
Hey so are you going to make this bot publically available? or is this just for your own uses?
 
I sell all the software I create either to private people as a private bot or as a public bot with monthly charges. This specific bot I'm making more for myself since I've found a few things I'd like to do which require a tool like this. However, at some point in the future, it will be sold.

edit:
Update: My first job has come about as a result of bhw, which is exciting. I cant disclose any details just yet, but its an good prospect and a good idea. As I mentioned, I'm a programmer getting into the field, and it's already been a positive experience.
 
Last edited:
Hey there Senotaru, it's cool to see a log from a more technical point of view.

Please keep posting your taughts.
 
Hi Nick! Thanks for your encouragement. I was out of town visiting the family for Easter.

Here's a small update as to my strategy going forward:
-I'm currently developing an application for a customer which I cannot give too many details on. Once I finish this, which should be tomorrow some time, I can move on to my own projects and provide a bit more the code that I'm doing at the time.

-I've registered a good deal of hotmail accounts and have set up a hotmail auto confirm class. The hotmail plugin allows for forwarding, so what I've done(and I'm sure this is common knowledge but I'll give every detail of what I do I guess) is set up a single Hotmail account as a host account and register several hundred slaves over night forwarding to that account. I log in via the http portal and scan specific emails with regex. I've considered switching this over to POP3, but it is working fine as is.

-I've run across the website called pixelpipe. To make an account for each of the sites listed here only cost 1 hotmail account per service. You can use 1 email address for each service. I'm setting up a campaign that once started, will register an account, link it to pixelpipe, and then save the result. Registering these accounts takes about a minute since everything is done asynchronously, but httpwebrequest uses the servicepointmanager.defaultconnectionlimit limiter which is as far as I can tell bugged. The need for socks is being more and more obvious, but development would take significantly longer and be more complex so its a matter of convenience vs functionality.
 
Update:

I have successfully broken google's hashing method and their post structure

They use a custom post structure that works like this:
|Post variable|Post Variable|Post variable(etc)|0|1|0|2|0|0|3|0|13|4|13|0|5

The number counting up is actually the number of the post header you're sending, and the values between that and the last number are the settings for that header.

So for example: PostVariable1|PostVariable2|Postvariable3|0|1|13|15|19|2|
Where 0 is a setting of 1 and
13, 15, and 19 are a setting of two, and two would be a characteristic of the corresponding post variable.. They set arbitrary numbers to the value to textboxes and hash them into something else.

Just an update with some knowledge if anyone out there cares or knows what I'm talking about
 
Last edited:
Update:
I'm still around. I still intend to keep you guys up with my story. So far in since the posting of the OP, I've made $1400 in small here and there software sales. Things are looking up, and I've built up a pretty decent collection of classes that I've been using for these programs. The software so far has been blackhat and white. So far I've managed adwords API, as well as going at the same problem from a blackhat prospective, which was good fun. It kind of felt like me vs google in breaking their little hashing scheme they having going on.


Anyhow, I decided to redo my macro class that I was talking about earlier, and started from scratch. I threw together this little program that I'm going to try to attach to this post that is an open source example of what this macro system does.

I also, for giggles, included a nifty little feature I learned about. Basically, .net has the ability to recompile itself. Which means that users can actually edit the program itself, and have it recompile itself. I gave an example of this in the API implementation of this example. View the pictures to better understand what I'm talking about.

P.s., while it's still in beta, feel free to use the included class in your own projects or contact me with bugs or questions.
 
Wow. I started programming a bit about a year ago for SEO purposes. I have one question: how in the world are you able to code so quickly? It seems like it takes me forever to automate simple tasks online like google queries and wordpress POST requests. It took me several hours to figure out how to configure a proxy checker, and from the looks of it, it took you a few minutes!

Here's how it usually goes for me, do you have any tips? Maybe I'm going about this the wrong way...:
*spend an hour or so on BHW trying to find out where to get proxies (you mentioned 360!?!)
*then I try to figure out how to do a curl or wget request, which usually has problems with analyzing the data, so tack on another hour
*now where in the world do I find a proxy checker? I need to look for software that I can interface with, right? Or I'll just have to figure out how to make my own proxy checker, which takes a few hours to figure out what exactly it is that they're doing
*now I can finally code the proxy checking script, and guess what- more bugs, another hour
*finally I finish the code and it works pretty well, but it took forever to write
 
what you're describing there is about 2% of what i have planned. there are lots of things you have to do, lots of details and all take time to develop. so, good luck ;)
 
Back
Top