tag:blogger.com,1999:blog-62066567529042201492024-03-14T12:39:33.367+08:00PyroStrexLife of PyroStrex as a Teenage Programmer and his creations.PyroStrexhttp://www.blogger.com/profile/00069872735407533887noreply@blogger.comBlogger18125tag:blogger.com,1999:blog-6206656752904220149.post-81224934759382331272015-02-23T21:40:00.000+08:002015-02-23T21:40:56.745+08:00MangaReader GUI<img style="width: 100%; padding: 0; box-shadow: none;" border="0" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWQL9py7vA_Efhnl55GY6T87etA6VuUck5hvweuF3Qgv5cWFG0HfyAszdrFcKSUTHascFuy6YRwj5LhwYiy_luuF0NbZR8L7fwTcTOLWao1u5VyxRRHnDjKPmRoaD4YKcCzGm1uuTgJU72/s1600/img_mangareader_1.png" />
<p>
I really love manga! Who doesn't? Where did I often go to read a manga? You guess it, <a href="http://www.mangareader.net">MangaReader.Net</a>. Just yesterday, while I was reading the latest One Piece chapter, I realize, MangaReader.Net always force the image to become small whenever we refresh the page. So just imagine the annoyance on having to click the "Larger Image" button repeatedly. So, I thought, why not, I make one application that make the annoyance go away. So, after about a day or two, I managed to make this cute application. I know I will be hated but who cares. Enjoy!
</p>
<a name='more'></a>
<style>
.comparison-table {
margin: auto;
margin-top: 25px;
margin-bottom: 25px;
width: 100%;
border-collapse: collapse;
}
.comparison-table th, .comparison-table td {
padding: 15px;
border: 1px solid #bbb;
text-align: center;
}
.comparison-table th:first-child, .comparison-table td:first-child {
text-align: right;
background: #eee;
vertical-align: top;
}
.comparison-table th:last-child, .comparison-table td:last-child {
background: lightyellow;
}
.download-button, .download-button:visited {
background: lightblue;
color: #348fac;
padding: 10px;
display: block;
width: 200px;
margin: 25px auto;
text-decoration: none;
font-weight: bold;
border-radius: 5px;
}
.download-button:hover {
background: #c1e1ec;
color: #4baac9;
text-decoration: none;
}
.download-button > div {
font-weight: normal;
font-size: 11px;
color: #666;
}
</style>
<h3 style="text-align: center">How to use?</h3>
<p style="margin-bottom: 25px;">
Start by typing the name of your manga on the first box 'One Piece'. Select your chapter on the second box and Select your page on the third box. After that, use the left and right arrow key to navigate between pages and across chapters.
</p>
<div style="text-align: center">
<h3>Why use this application?</h3>
<table class="comparison-table">
<thead>
<tr>
<th>Comparison</th>
<th style="width: 40%">MangaReader.Net</th>
<th style="width: 40%">MangaReader GUI</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tidyness</td>
<td>Full of bloatware</td>
<td>Slick, clean and awesome!</td>
</tr>
<tr>
<td>Pagination</td>
<td>Click to view next page, back button to go back.</td>
<td>Left and right arrow key until you satisfied!</td>
</tr>
<tr>
<td>Image</td>
<td>
Forced to see a small image whenever you went to a new page.<br><br>You have to click the 'Larger Image' button to go back to normal.
</td>
<td>Always scale to 100% and you can scale up to 150%.<br><br>Drag the image around using your mouse!</td>
</tr>
</tbody>
</table>
</div>
<div style="text-align: center">
<h3>Nuff said! Download button plz!</h3>
<a class="download-button" href="https://dl.orangedox.com/brcAN4dvJ7nhddLuB5/mangareader.rev001.zip">Download Now!<div>mangareader.rev001.zip</div></a>
</div>PyroStrexhttp://www.blogger.com/profile/00069872735407533887noreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-14746201781869317582012-04-24T02:53:00.000+08:002012-04-24T02:53:00.516+08:00My First Step Towards Building My Own Game<div style="text-align: justify">
Last time, I really interested in creating a private server for MapleStory but of course, I fall in love with Ghost Online after playing it for just a day. But sadly, Ghost Online has been closed due to lack of revenue they said. Sorry to say but for me, Ghost Online is a better game than MapleStory. Since then, I thought, why not I make my own platform game? So this is my first step toward building a game similar to Ghost Online. It is also the result of 4 days playing around with SFML 2.0.
</div>
<br/>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnt625SDQ9_oEk-gpEea1_Raz0cWS6rHY35hwZ1swXNNk1ejiqEaiQE4Uk00ufC7HbV1Tfqy7zyOkAZ3M055wmKkRmy8KH3vVuifxCe2yujUfgETQqsvOqxpGSbPmkCJz2xEwDy0Ebn8fn/s1600/gravity.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnt625SDQ9_oEk-gpEea1_Raz0cWS6rHY35hwZ1swXNNk1ejiqEaiQE4Uk00ufC7HbV1Tfqy7zyOkAZ3M055wmKkRmy8KH3vVuifxCe2yujUfgETQqsvOqxpGSbPmkCJz2xEwDy0Ebn8fn/s320/gravity.png" width="350" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Basic Gravity</td></tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixbsjre4tM5-5_lq1ULpKxu6hYqkZgyWscW11sXCwxSPudYMC-H3tVXZoRfKMjFgKAaZj9BQwXDkngDlIp1PRzYOknaugps8fz2WV7YbTx4UMVvY6TFabngFBJ-fbuU7evAJRwPNjAYotf/s1600/jumping.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixbsjre4tM5-5_lq1ULpKxu6hYqkZgyWscW11sXCwxSPudYMC-H3tVXZoRfKMjFgKAaZj9BQwXDkngDlIp1PRzYOknaugps8fz2WV7YbTx4UMVvY6TFabngFBJ-fbuU7evAJRwPNjAYotf/s320/jumping.png" width="350" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Basic Jumping</td></tr>
</tbody></table>
<div style="height:1px;clear:both"></div>
<br/>
<div style="text-align:justify">
I use a simple white rectangle as a temporary "sprite" for the character because I'm still waiting for proper sprites from <a href="//matsuoamon.blogspot.com">Matsuo Amon</a>.<br/><br/>
It is actually really hard for me to build a game since Physics is kinda hard!. Not to mention that I lack of Math knowledge. I hate collision detection. Right now, I'm trying to find a way to build a floor system using collection of lines.<br/><br/>
</div>
<div>
As always, if you feel like wanting to ask me anything, just leave a comment anywhere or email me if you shy haha.
</div>PyroStrexhttp://www.blogger.com/profile/00069872735407533887noreply@blogger.com1tag:blogger.com,1999:blog-6206656752904220149.post-27819217272067321152012-03-29T11:44:00.000+08:002012-03-29T11:49:24.347+08:00NodeJS Http Request That Supports Predefined HeadersHere is another code example on how to create a Http Request function that enables you to predefined the values inside the header of your http request while still maintaining.<br><br>
<a name='more'></a>
<h3>Prerequisite</h3>
<ul>
<li>Awesome knowledge of NodeJS</li>
<li>Reason to use NodeJS's HTTP.Request</li>
<li>SublimeText to get awesome view of the codes below</li>
</ul>
<br>
There are two ways on doing this, one with the help of "underscore" library and second is without it.
<br><br>
<h3>With Underscore Library</h3>
<br>
Install this wonderful library with NPM (Node Package Manager)
<pre>npm install underscore</pre>
Add this on your dependencies section (often on the top of your script page)
<pre>var _ = require("underscore");</pre>
And this wherever you want
<pre>var httpRequest = function(link, headers, body) {
// remove this if you already used it on the dependencies section
var url = require("url"), http = require("http");
// Parse the link so it will become a URL object
link = url.parse(link);
// generate the options which will be used by the Http.Request later on
var options = {
host : link.hostname
, port : link.port ? link.port : link.protocol == "https:" ? 443 : 80
, path : link.path
}
// Predefined the headers (you can change it anyway you want)
options.headers = {
host : link.hostname
, 'user-agent' : 'Your User Agent Here'
, 'Accept-Charset' : 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
, 'Accept-Language' : 'en-GB,en-US;q=0.8,en;q=0.6'
, 'content-length' : body ? body.length : ""
}
// Extend the Options's Headers so that we can add in custom headers
if (headers) _.extend(options.headers, headers);
// Remove empty headers to reduce bandwidth and unwanted errors
for (var element in options.headers)
if (!!!options.headers[element])
delete options.headers[element];
// Request the data (Http.Request)
var request = http.request(options, function(response) {
// This event will be triggered on arrival of data
response.on("data", function(data) {
// more code here.
});
// This event will be triggered on response finished
response.on("end", function(err) {
// more code here.
});
});
// This will be triggered if any errors occurred while requesting
// you can use this to handle unwanted errors
request.error(function(error) {
// more code here.
});
// End the request to make NodeJS start requesting
// It will request depending on the body we specified
request.end(body ? body : "");
}</pre>
<br>
<h3>Without Underscore Library</h3>
<br>
Just change a part of the above code from
<pre>if (headers) _.extend(options.headers, headers);</pre>
To
<pre>if (headers) for (var element in headers) option.headers[element] = headers[element];
</pre>
<br>
That's it! Enjoy! If you have anything in your mind, just leave it on the comment section below.
<br><br><br>
<h3>Further Readings:</h3>
<ul>
<li><a href="http://nodejs.org/api/">NodeJS Documentation</a></li>
<li><a href="http://documentcloud.github.com/underscore">Underscore Documentation</a></li>
</ul>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-54431928841578050502012-03-29T00:14:00.000+08:002012-04-24T02:57:04.288+08:00PyroStrex's Mediafire LeecherThis is yet another program created by me originally for fun but well, since I think it's worth to share with you guys, here you go. Also, it was coded in PureBasic.<br />
<br />
<a name='more'></a>
<h3>Features</h3>
<ul>
<li>Generate downloadable link from mediafire. (duh!)</li>
<li>Process multiple links (One link per line)</li>
<li>Can process links such as:
<pre>1. http://..../...
2. http://..../...
3. http://..../...</pre>
So it will support quoted links.
</li>
<li>Thread was used to generate links so it will not clog up your processor.</li>
</ul>
<br />
<h3>
Download Link : </h3>
<ul>
<li><a href="http://www.filedropper.com/mflrev001"><span style="text-decoration:line-through">FileDropper</span> (Dead)</a>
</li>
<li><a href="http://minus.com/mbeuRv9WNQ/1f">Minus</a>
</ul>
<br />
<h3>
Disclaimer</h3>
<ul>
<li>This program was made just to play around with HTTP Request and help better understanding about the computer itself.</li>
<li>I will not be responsible for anything that might happened to you guys while using this program.</li>
<li>This program is free and can be downloaded freely from here. Do not pay for it.</li>
<li>This program does not contain any kind of virus inside (eg. keylogger, spyware), you can check it yourself by using your favorite software (eg. HTTP Debugger, SoftIce, Olldbg, Wireshark) </li>
</ul>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-6206656752904220149.post-4281680230808433952012-03-03T02:20:00.004+08:002012-03-28T12:53:47.406+08:00My Way of Installing Transmission Client (transmission-daemon)<div align="justify">
A few days back, I've discovered a very good torrent client and decided to try it out. It was really good because of one of its feature "transmission-daemon" that enables me to do exactly what I wanted to do on which is to control the torrent movement just by using my website browser. <a name='more'></a>Not to mention that it was very easy to install too:</div>
<div style="margin: 20px 0;">
<pre>apt-get install transmission-daemon</pre>
</div>
<div align="justify">
But, after sometimes, I accidentally hit the about menu button and saw that I am currently having a version 2.13 of this wonderful client. But when I looked inside the official website, It was version 2.42 and the worst thing is when I looked inside the Debian packages website, It looks like they only make the latest version installable to people who have Ubuntu 12.04 while the one I had is Ubuntu 10.04 (This is the only option I had). So after some more digging, I found out that they post their own packages <a href="https://launchpad.net/~transmissionbt/+archive/ppa">here</a>. The best thing about this new place is that they released the latest version here in the most lowest operating system it can support which in my case is version 2.42 for Ubuntu 10.04 and Ubuntu 10.10.</div>
<br>
<div align="justify">So, here is how I installed it:</div>
<pre>Go to <a href="https://launchpad.net/~transmissionbt/+archive/ppa">launchpad.net version of transmission release page</a>
</pre>
<pre>Click the "Read about Installing" and follow the part "On older (pre 9.10) Ubuntu systems".
</pre>
<pre>apt-get install transmission-daemon
</pre>
<br />
<b><span style="font-size: large;">How do I change the Configuration Now?
</span></b><br />
<br />
Basically when I've installed transmission-daemon using my method above, I followed exactly like the transmissionbt's wiki said.
<br />
<br />
<strong>To edit the configuration file:</strong>
<br />
<br />
Normally by using "service transmission-daemon start" to start transmission-daemon it would be inside:
<pre>nano '/var/lib/transmission-daemon/info/settings.json'</pre>
But if somehow you used "sudo transmission-daemon" it will be at:
<pre>nano '/root/.config/transmission-daemon/settings.json'
</pre>
It is better to use the first one. because it is the original file generated right after you've installed transmission.
<br />
<br />
<strong>To make my transmission-daemon reload the configuration file</strong>
<br />
<pre>pkill -HUP transmission-da
</pre>
<br>
<div>But sadly, right after achieving my goal, they released a new version (2.5) and It is no longer supported in Ubuntu Server 10.04.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-74411061004507193952011-01-26T14:42:00.001+08:002011-01-26T14:44:13.603+08:00Stop JavaScript Injection<p style="text-align: justify;">
Have you ever encountered a problem where some people trying to inject JavaScript code to 'test' your JavaScript if it have a leak or not?. If you are a web developer, you will always found out that this is extremely irritating. This is the same for me who are always trying to hide my code. Darn those hackers!. So today, I'm going to tell you how to stop this irritating problem. Not fully stop them but you can actually make them unable to change your predefined code.<a name='more'></a></p>
<h3 style="text-align: justify;">But before that, I need to thank paulirish for this. His 53 minutes video is worth watching! <a href="http://paulirish.com/2010/10-things-i-learned-from-the-jquery-source/">Click here to watch the video!</a></h3>
<p class="Apple-style-span" style="color: #660000;"><b>I adviced you to start watching the video first!</b></p>
<p style="text-align: justify;">OK, so, here comes the tutorial.<br>
<br>
<span style="color:#000">1st</span>, I want you to take a look at these codes:</p>
<pre>(function(document, window, screen, anObject){
//... some more code ...
})(document, window, screen);</pre>
<p>The code above is exactly the same like below:</p>
<pre>
anything = function(document, window, screen, anObject){
//... some more code ...
}
anything(document, window, screen);
</pre>
<p> or </p>
<pre>function anything(document, window, screen, anObject){
//... some more code ...
}
anything(document, window, screen);
</pre>
<p>Now you will be asking, why do you want to use the first method? Well, this is basically because if you use the second method or the third method, some "JavaScript Hacker" can easily do something like below to stop the code from executing.</p>
<pre>anything = undefined;</pre>
<p style="text-align: justify;">But, if you used the first method, JavaScript will immediately call the function after defining the function. So, there will be no way around to access the code right?.</p>
<p><span style="color:#000">2nd</span>, you will now be asking, what did the function arguments have to do with anything right?</p>
<p style="text-align: justify;">OK, these arguments are only for changing the global variable such as document, window, screen, etc.. to a local variable document, window, screen, etc so that if you are using yui-compressor to compress your .js files, every document, window and screen variable inside the function itself will be shrinked. So, this can somehow make a newbie JavaScript Hacker confuse. Which is really cool because you don't need to use packer. :P</p>
<p><span style="color:#000">3rd</span>, Again, have a look at these codes below (I will be using jQuery to assist) :</p>
<pre>(function(document, window, screen, anObject){
(anObject = {
initializeScript: function(){
$(function(){
// Inside jQuery window.ready, do anything you want here.
});
}
}).initializeScript();
})(document, window, screen);</pre>
<p>What??! It is getting harder to understand!!</p>
<p style="text-align: justify;">This is actually quite easy to understand. Before, the function only call itself after defined right? Now, the called function then define a <B>LOCAL</B> 'anObject' object and immediately call the <B>LOCAL</B> anObject.initializeScript() which then do all the window.ready stuff using jQuery.</p>
<p style="text-align: justify;">This can help you protect from the "Javascript Hacker" so that the "JavaScript Hacker" can't use something like below to messup the whole script because 'anObject' itself is a local variable!</p>
<pre>anObject = undefined;</pre>
<p style="text-align: justify;"><span style="color:#000">4th</span>, every function or options that you want to put in your script should be put inside the anObject definition and be called within the 'anObject' object. This is so that every area in your script will be a local variable and not a global variable because global variable is extremely easy to hack (JavaScripter also state that global variable is evil).</p>
<p style="text-align: justify;"><span style="color:#000">5th</span>, every variable declaration inside the 'anObject' declaration must also include a 'var' at the beginning to prevent any local variables to leak into global variables. Example:</p>
<pre>var lalala = 0;</pre>
<p style="text-align: justify;"><span style="color:#000">6th</span>, jQuery itself is a global object. To prevent someone from removing the stuff you did using jQuery for example like $('#element').click(function(){ ... }); You can use a timer to prevent this by checking the click if it is a function or undefined and......... <b>NEVER USE SETINTERVAL() TO CREATE A TIMER!</b></p>
<p style="text-align: justify;"><span style="color:#000">Finally</span>, these are all the things that I think I should tell people about and these are the things that I did not forget to write. So, if you have any question, I hope you will use the comment section below.</p>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-6206656752904220149.post-32856529139796944892011-01-04T14:42:00.001+08:002011-01-04T14:43:06.198+08:00RAN EP6 S1 and EP6 S2 Encryption Algorithm<div style="font-size: 20px; font-weight: bold; text-align: center;">
..~::HAPPY NEW YEAR TO EVERYONE::~..
<br />
<br />
Got Anyone Interested in RAN EP6 S1 and EP6 S2 Encryption Algorithm?
</div>
<br>
<div style="font-size: 16px; text-align: center;">
Well, I do!
<br />
<br />
So today... I'm going to release my result after 3 days learning reverse engineering.
<br />
<br />
These are the results.. Some nice screenshot from me!
</div>
<div style="font-size: 16px; text-align: center;">
<br /></div>
<div style="font-size: 16px; text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgen-1dv28BG77eo8ZC7cMt0nZgWxLpms0iY2zDDICNvPrSrspgB_gWQGe2V1m_h-ZR2humzERZ6bmzy2sr4aBeYF73viZJwuC-bf1riT1XdUlp02GWbLR7o-NhZsZjEkhwkPwRrWapBaQ/s1600/01.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="419" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgen-1dv28BG77eo8ZC7cMt0nZgWxLpms0iY2zDDICNvPrSrspgB_gWQGe2V1m_h-ZR2humzERZ6bmzy2sr4aBeYF73viZJwuC-bf1riT1XdUlp02GWbLR7o-NhZsZjEkhwkPwRrWapBaQ/s640/01.PNG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdjdEMcrLWEHlgU5lpStKaVbdvFOXjKvQUrGv1SICrKIXQBlEA5yI9fnyyJ3m8j0vbwsPdSOSp5i8PqXat8hbC7kCH0tSTcgahYKDnGnOoxeHxC6Geb2tx6qE_h5sY_goZgbqgmS1citM/s1600/02.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="418" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdjdEMcrLWEHlgU5lpStKaVbdvFOXjKvQUrGv1SICrKIXQBlEA5yI9fnyyJ3m8j0vbwsPdSOSp5i8PqXat8hbC7kCH0tSTcgahYKDnGnOoxeHxC6Geb2tx6qE_h5sY_goZgbqgmS1citM/s640/02.PNG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjINQ2r5EISWLSl2zmDRhOsnuE6xwCL9K8p3eFu90AfFf1ytD_oSDn7kGX9j_fWtxe4vkgA0JFJlCxDI11o_qP95jm6aoJN4d8lMAQaYmdKF0mqLLOFtPnqaeZ8TwFdHUaXlCAdjg1a3Ao/s1600/03.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="418" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjINQ2r5EISWLSl2zmDRhOsnuE6xwCL9K8p3eFu90AfFf1ytD_oSDn7kGX9j_fWtxe4vkgA0JFJlCxDI11o_qP95jm6aoJN4d8lMAQaYmdKF0mqLLOFtPnqaeZ8TwFdHUaXlCAdjg1a3Ao/s640/03.PNG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggAFM6yj9wdTo7tF4_bwvzypjXRZ-riiQwu_xOvj2-0PfxO_2iw4vd-yrzW55DC-cyX0VvJzDXGAhe6Hvnotxf-y3nnGM3UbXBPcYr1tpjCPm5aFqZTUa7QrbC9HsR9HPAPswAPCJNTvk/s1600/04.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggAFM6yj9wdTo7tF4_bwvzypjXRZ-riiQwu_xOvj2-0PfxO_2iw4vd-yrzW55DC-cyX0VvJzDXGAhe6Hvnotxf-y3nnGM3UbXBPcYr1tpjCPm5aFqZTUa7QrbC9HsR9HPAPswAPCJNTvk/s640/04.PNG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzHfO8z9uLn8Ae0EHxV2xufGt9ki3KuZKSWOg3O7XeclZPLNOXDQqeqbwOXLFTE_MVOFVecEEHk6GCckmZ2lwulN-mkBObo3YYmaWQpgNP61jqF9u31rtnZdSF7-LLHMaEHtfNkZklbdw/s1600/05.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="418" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzHfO8z9uLn8Ae0EHxV2xufGt9ki3KuZKSWOg3O7XeclZPLNOXDQqeqbwOXLFTE_MVOFVecEEHk6GCckmZ2lwulN-mkBObo3YYmaWQpgNP61jqF9u31rtnZdSF7-LLHMaEHtfNkZklbdw/s640/05.PNG" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM83LNsmhy5uPehjyspNGoZM58IQZEhKzGC5h5AJ14wb9S8oe6jtngXIPVBz0Ad7qu6UrUypzJ4PNK_xERJSnyDN6zln4eUK5OHCO_xFEV-rw9L0k-q_lVnbPPLrWgYXNWV5Ncb0tfxYk/s1600/06.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="418" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM83LNsmhy5uPehjyspNGoZM58IQZEhKzGC5h5AJ14wb9S8oe6jtngXIPVBz0Ad7qu6UrUypzJ4PNK_xERJSnyDN6zln4eUK5OHCO_xFEV-rw9L0k-q_lVnbPPLrWgYXNWV5Ncb0tfxYk/s640/06.PNG" width="640" /></a></div>
</div>
<p style="text-align:center">
As you can see above, I can fully decrypt ItemStrTable.bin now and can do the same thing with param.ini. So it is not limited to only one file but works with any EP6 S2 files.
<br><br>
If you see the screenshot, you will be asking, why do I have to change the name right?. Well, this is to tell you all that I'm not cheating. This is to tell you all that the picture is real.
<br><br>
One more important thing I should say is, currently I can only decrypt the files. But! to create the encrypting algorithm, It is very.. No!.. EXTREMELY easy!.
<br><br>
<b>I've done decrypting EP6 S2 Encryption. Until I released it, Stay tuned.</b>
</p>Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-6206656752904220149.post-32682624601998182822010-09-28T23:19:00.004+08:002010-09-28T23:26:07.062+08:00The End of RAN Online Client Launcher Source Code<div style="text-align:justify">Ughh, Arghh, Ighh, Oghh, If I can really scream, I really would like to scream now because of what happened during my backup yesterday. I got really carried away and suddenly while talking to philax (RageZone ID), He then reminded me back about my RAN Online Client Launcher which is still under development and I totally forgot about it (My bad). Then I tried to find the source code in all my backup folders until... I realized that I have accidentally deleted the whole RAN Related files and this is where I put all my RAN Related Project source code including the source code for this development! (Thank god Recil development was not there)<br />
<br />
It is a burden for me to re-code the whole thing again but what can I do if it is because of my own mistakes right?. So, I just wanna say here that, I will not stop developing RAN Online Client Launcher even though I've already accidentally deleted the source code for it. But I wanna tell you guys that I need some time to re-research the whole things again and because of my current Recil project, I will halt this project until my Recil project finished.<br />
<br />
Even though I know that many of you has currently telling yourself that RAN Online Client Launcher which i promised to you all before is already dead. But the fact is, I'm still searching the way to finish it and until then... Hope you all have a good day with the current issues in RAN Server.<br />
<br />
Owh, and somehow, I also wanna change that really long name to Ranoc from now on.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-62729582442032170002010-09-28T20:24:00.001+08:002010-09-28T23:23:05.139+08:00DLL Injection in PureBasicAPI Injection will never going to be fun without the way on how to insert it in a DLL and then inject the DLL into the process you wanna try. So, here is an example of code which you can use it to inject your DLL in PureBasic. It's fun! You should try it out!.<br />
<a name='more'></a><br />
Only the injection method:<br />
<pre>Procedure.i InjectLibrary(ProcessID.l, DLLPath.s)
Define ProcessHandle.l
Define StartAddress.l
Define BufferSize.i
Define ParamAddress.l
Define ThreadHandle.l
ProcessHandle = OpenProcess_(#PROCESS_ALL_ACCESS,#False,processID)
If ProcessHandle = 0
ProcedureReturn -1
EndIf
StartAddress = GetProcAddress_(GetModuleHandle_("kernel32.dll"), "LoadLibraryA")
If StartAddress = 0
ProcedureReturn -1
EndIf
BufferSize = Len(DLLPath) + 1
ParamAddress = VirtualAllocEx_(ProcessHandle, 0, BufferSize, #MEM_COMMIT, #PAGE_READWRITE)
If ParamAddress = 0
ProcedureReturn -1
EndIf
If Not WriteProcessMemory_(ProcessHandle, ParamAddress, DLLPath, BufferSize, 0)
ProcedureReturn -1
EndIf
ThreadHandle = CreateRemoteThread_(ProcessHandle, 0, 0, StartAddress, ParamAddress, 0, 0)
WaitForSingleObject_(ThreadHandle, #INFINITE)
If ParamAddress <> 0
VirtualFreeEx_(ProcessHandle, ParamAddress, 0, #MEM_RELEASE)
Else
ProcedureReturn -1
EndIf
CloseHandle_(ProcessHandle)
ProcedureReturn 0
EndProcedure</pre><br />
Complete with Example:<br />
<b>injector.pb</b><br />
<pre>Procedure.i InjectLibrary(ProcessID.l, DLLPath.s)
Define ProcessHandle.l
Define StartAddress.l
Define BufferSize.i
Define ParamAddress.l
Define ThreadHandle.l
ProcessHandle = OpenProcess_(#PROCESS_ALL_ACCESS,#False,processID)
If ProcessHandle = 0
ProcedureReturn -1
EndIf
StartAddress = GetProcAddress_(GetModuleHandle_("kernel32.dll"), "LoadLibraryA")
If StartAddress = 0
ProcedureReturn -1
EndIf
BufferSize = Len(DLLPath) + 1
ParamAddress = VirtualAllocEx_(ProcessHandle, 0, BufferSize, #MEM_COMMIT, #PAGE_READWRITE)
If ParamAddress = 0
ProcedureReturn -1
EndIf
If Not WriteProcessMemory_(ProcessHandle, ParamAddress, DLLPath, BufferSize, 0)
ProcedureReturn -1
EndIf
ThreadHandle = CreateRemoteThread_(ProcessHandle, 0, 0, StartAddress, ParamAddress, 0, 0)
WaitForSingleObject_(ThreadHandle, #INFINITE)
If ParamAddress <> 0
VirtualFreeEx_(ProcessHandle, ParamAddress, 0, #MEM_RELEASE)
Else
ProcedureReturn -1
EndIf
CloseHandle_(ProcessHandle)
ProcedureReturn 0
EndProcedure
NotePad = RunProgram("notepad", "", "", #PB_Program_Open|#PB_Program_Read)
Debug(NotePad)
If NotePad
ProcessID = ProgramID(NotePad)
If ProcessID
InjectLibrary(ProcessID, "dll01.dll")
EndIf
EndIf</pre><b>dll.pb</b><br />
<pre>ProcedureDLL AttachProcess(Instance)
MessageRequester("", "This is the first DLL")
EndProcedure</pre>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-6206656752904220149.post-54092570959320777772010-09-24T16:13:00.014+08:002010-09-28T23:22:19.013+08:00Function Hooking in PureBasic<div style="text-align: justify;">This is one of the topic that most of you will found it interesting to read. This time, I shared one of my latest achievement while using <b>PureBasic</b>. The <b>Function Hooking method</b>. Some of you might also called it as "<b>API Hooking method</b>". It can hook many of simple Windows API procedure for example:<br />
<ul><li><b>Winsock Function.</b><br />
This is the most fun function that people is trying to hook all the time.</li>
<li><b>MessageBoxA</b>.<br />
Perhaps you wanna try the code?</li>
<li>Many more others that have the same function header like the functions above. </li>
</ul>Currently, my method only supports Inline Hooking but who knows I might added some more features soon.<br />
<br />
<a name='more'></a>I though i should share it for future benefit and also for my future reference. Just a simple inline API hooking with the ability to call the old function back. It took me 1 week to fully complete this <img alt=":oops:" src="http://www.purebasic.fr/english/images/smilies/icon_redface.gif" title="Embarassed" /> . So here goes... I re-post this here so that much more people can look into this code and study it, use it or do anything with it (Improving it perhaps?).<br />
<br />
<b>My inspiration : <a class="postlink" href="http://help.madshi.net/ApiHookingMethods.htm">http://help.madshi.net/ApiHookingMethods.htm</a></b><br />
<b><span style="color: maroon;"><br />
Please do not use it for creating malware or anything like it. Use it to help others is fully recommended.</span></b><br />
<br />
Tested with PureBasic 4.50<br />
<br />
The Hook Function : <br />
<pre>Procedure.i InlineHook(LibraryName$, LibraryFunction$, NewFunction.l, OldFunction.l)
DLLHandle.l = LoadLibrary_(LibraryName$)
OldAddr.l = GetProcAddress_(DLLHandle, LibraryFunction$)
NewAddr.l = NewFunction
RetAddr.l = OldAddr + 5
processHandle.l = OpenProcess_(#PROCESS_ALL_ACCESS, #False, GetCurrentProcessId_())
codeAddress.l = VirtualAllocEx_(processHandle, NULL, 9, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
If codeAddress = 0
Debug "Failed to allocate memory address"
ProcedureReturn #False
EndIf
PokeW(codeAddress, PeekW(OldAddr))
PokeB(codeAddress+2, PeekB(OldAddr+2))
PokeW(codeAddress+3, PeekW(OldAddr+3))
PokeB(codeAddress+5, $E9)
PokeI(codeAddress+6, RetAddr - (codeAddress + 10))
VirtualProtect_(OldAddr, $05, #PAGE_EXECUTE_READWRITE, @OldProtection)
PokeB(OldAddr, $E9)
PokeI(OldAddr+1, ((NewAddr - OldAddr) - 5))
PokeL(OldFunction, codeAddress)
CloseHandle_(processHandle)
EndProcedure
Procedure.i InlineUnhook(LibraryName$, LibraryFunction$, NewFunction.l, OldFunction.l)
DLLHandle.l = LoadLibrary_(LibraryName$)
OldAddr.l = GetProcAddress_(DLLHandle, LibraryFunction$)
codeAddress = PeekL(OldFunction)
processHandle.l = OpenProcess_(#PROCESS_ALL_ACCESS, #False, GetCurrentProcessId_())
VirtualProtect_(OldAddr, $05, #PAGE_EXECUTE_READWRITE, @OldProtection)
If codeAddress = 0
Debug "Failed to get that code Address"
ProcedureReturn #False
EndIf
PokeW(OldAddr, PeekW(codeAddress))
PokeB(OldAddr+2, PeekB(codeAddress+2))
PokeW(OldAddr+3, PeekW(codeAddress+3))
FillMemory(codeAddress, 9, 0)
PokeL(OldFunction, NewFunction)
VirtualFreeEx_(processHandle, codeAddress, 0, #MEM_RELEASE)
CloseHandle_(processHandle)
EndProcedure</pre>The working example: <br />
<pre>Prototype.l proMessageBox(hwnd.l, lpText.s, lpTitle.s, Type.i)
Global oldMessageBox.proMessageBox
Procedure.i InlineHook(LibraryName$, LibraryFunction$, NewFunction.l, OldFunction.l)
DLLHandle.l = LoadLibrary_(LibraryName$)
OldAddr.l = GetProcAddress_(DLLHandle, LibraryFunction$)
NewAddr.l = NewFunction
RetAddr.l = OldAddr + 5
processHandle.l = OpenProcess_(#PROCESS_ALL_ACCESS, #False, GetCurrentProcessId_())
codeAddress.l = VirtualAllocEx_(processHandle, NULL, 9, #MEM_COMMIT, #PAGE_EXECUTE_READWRITE)
If codeAddress = 0
Debug "Failed to allocate memory address"
ProcedureReturn #False
EndIf
PokeW(codeAddress, PeekW(OldAddr))
PokeB(codeAddress+2, PeekB(OldAddr+2))
PokeW(codeAddress+3, PeekW(OldAddr+3))
PokeB(codeAddress+5, $E9)
PokeI(codeAddress+6, RetAddr - (codeAddress + 10))
VirtualProtect_(OldAddr, $05, #PAGE_EXECUTE_READWRITE, @OldProtection)
PokeB(OldAddr, $E9)
PokeI(OldAddr+1, ((NewAddr - OldAddr) - 5))
PokeL(OldFunction, codeAddress)
CloseHandle_(processHandle)
EndProcedure
Procedure.i InlineUnhook(LibraryName$, LibraryFunction$, NewFunction.l, OldFunction.l)
DLLHandle.l = LoadLibrary_(LibraryName$)
OldAddr.l = GetProcAddress_(DLLHandle, LibraryFunction$)
codeAddress = PeekL(OldFunction)
processHandle.l = OpenProcess_(#PROCESS_ALL_ACCESS, #False, GetCurrentProcessId_())
VirtualProtect_(OldAddr, $05, #PAGE_EXECUTE_READWRITE, @OldProtection)
If codeAddress = 0
Debug "Failed to get that code Address"
ProcedureReturn #False
EndIf
PokeW(OldAddr, PeekW(codeAddress))
PokeB(OldAddr+2, PeekB(codeAddress+2))
PokeW(OldAddr+3, PeekW(codeAddress+3))
FillMemory(codeAddress, 9, 0)
PokeL(OldFunction, NewFunction)
VirtualFreeEx_(processHandle, codeAddress, 0, #MEM_RELEASE)
CloseHandle_(processHandle)
EndProcedure
Procedure.l hookedMessageBox(hwnd.l, lpText.s, lpTitle.s, Type.i)
ProcedureReturn oldMessageBox(hwnd, "This is inside the hooked function!", lpTitle, Type)
EndProcedure
InlineHook("user32.dll", "MessageBoxA", @hookedMessageBox(), @oldMessageBox)
MessageRequester("Extended Inline API Hooking Example", "Testing this Extended Inline API Hooking system")
InlineUnhook("user32.dll", "MessageBoxA", @hookedMessageBox(), @oldMessageBox)
MessageRequester("Extended Inline API Hooking Example", "It is now unhooked!.")</pre><br />
<b><span style="color: #274e13;">[UPDATE] :</span></b> Added InlineUnhook since I needed it inside my project.<br />
<b><span style="color: #274e13;">[UPDATE] :</span></b> Instead of using Poke 3 Times and Peek 3 Times, I replaced it with CopyMemory()<br />
<br />
I know this isn't fully complete yet.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-12591921567806280642010-09-24T15:48:00.003+08:002010-09-25T17:22:09.325+08:00PureBasic is Really Fun!<div class="separator" style="clear: both; text-align: center;"><a href="http://www.purebasic.com/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://www.purebasic.com/images/box.png" /></a></div><div style="text-align: justify;">I've been using <b>PureBasic</b> lately and I just wanna tell you guys. It is really fun to use <b>PureBasic</b> as your software compiler. The reason behind this is because <b>PureBasic</b> directly convert your codes into ASM language which is making your software portable at any place.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">On top of that, <b>PureBasic</b> supports multpile Operating System. This is really great because I as a programmer doesn't need to study 100% C or C++ to being able to program a software (even though I've already studied them).</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b>PureBasic</b> gives me the opportunity to program in a different and easy way. Just like the first time when I used Microsoft Visual Basic but MUCH MORE BETTER. The only problem I was facing before when I were using Microsoft Visual Basic is the portability. In this case, <b>PureBasic</b> win because with <b>PureBasic</b>, I don't need any Dynamic Link Library to run my finished software.</div><div style="text-align: justify;"><br />
</div><a name='more'></a><div style="text-align: justify;">Sadly, Many people prefer to use Microsoft Visual Basic rather then using <b>PureBasic</b> because Microsoft Visual Basic gives much more fun built-in widgets that you can use but <b>PureBasic</b> is only giving the basic widgets such as Button, Image and etc. It is much more sad because to build your own widget in Microsoft Visual Basic is much more easier than in <b>PureBasic</b>.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;">But, Just to let you all know. <b>PureBasic</b> is much more better than the current Microsoft Visual Basic.NET. YEAH remember "DOTNET". But first, before you can use it, You need to buy it though. But for me, buying it is really worth my money.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b>I'm not trying to advertise PureBasic</b> or anything because they don't give me a penny for this post. But because I love them so much. If they somehow read this post, I hope it will give them much more boost to develop the software faster than it currently be.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-81702724941680925432010-09-19T21:19:00.002+08:002010-09-19T21:32:09.279+08:00Recil Project PageMany people out there maybe have been saying that I am dead. I am no longer exists. But here I am, still creating a new software which I called it Recil.<br />
<br />
I've opened up the Recil Project page for all people from RageZone to see. Feel free to surf and see Recil's todo list which will be updated near the future. Also, please leave a comment about this project. <a href="http://pyrostrex.blogspot.com/p/recil.html">Click here to see the project page</a> or you can just use the link at the top. Thank you.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-14961087842264958142010-09-19T12:47:00.011+08:002010-10-06T21:20:09.873+08:00My own Way of Successfully Installing NodeJS in VPS<div style="text-align: justify;">Today, I'm gonna show you all how I successfully installed NodeJS in a VPS I bought. <b>Please leave a comment in the comment section below if you have any questions.</b> I hoped that this post will help people who's gonna try NodeJS and can't find a way the exact way on installing it.<br />
<a name='more'></a><br />
<b>1st,</b><br />
<br />
I went to my vePortal Panel and reloaded my Operating System to <b>Ubuntu 10.04 x86</b> or <b>x86_64</b>. Then I waited until the VPS is running again.<br />
<br />
<b>2nd,</b><br />
<br />
Since, I am using windows, I downloaded <b>Putty SSH Client</b> and use it to gain access to my VPS.<br />
<br />
<b>3rd,</b><br />
<br />
I go to this link <a href="http://www.howtonode.org/how-to-install-nodejs">http://www.howtonode.org/how-to-install-nodejs</a> to easily install the NodeJS into my VPS using root account.<br />
<br />
My alternative if anyone asking:<br />
<pre>cd ~
wget http://nodejs.org/dist/node-v0.2.2.tar.gz
tar xvfz node-v0.2.2.tar.gz
cd node-v0.2.2
./configure
make
make install</pre><br />
<b>4th,</b><br />
<br />
I created a new user using this linux command.<br />
<br />
<pre>useradd -d /usr/pyrostrex pyrostrex
passwd pyrostrex</pre><br />
<b>5th,</b><br />
<br />
I make the home directory for the new username and change the owner using this linux command.<br />
<br />
<pre>mkdir /usr/pyrostrex
chown -R pyrostrex /usr/pyrostrex</pre><br />
<b>6th,</b><br />
<br />
I downloaded vsftpd using this linux command.<br />
<br />
<pre>apt-get install vsftpd</pre><br />
<b>7th,</b><br />
<br />
I then change the config file of vsftpd "/etc/vsftpd.conf". I set "write_enable" to true by removing the "#" at the start of the line.<br />
<br />
To open config file:<br />
<pre>nano /etc/vsftpd.conf</pre><br />
<b>8th, </b><br />
<br />
I then restart the service of vsftpd.<br />
<br />
<pre>service vsftpd restart</pre><br />
<b>9th,</b><br />
<br />
Again, since I am using windows, I used <b>FileZilla</b> as my ftp client and connect to my VPS using my newly created username with the password I have set before.<br />
<br />
<b>10th,</b><br />
<br />
I uploaded all things I wanna try with NodeJS using FileZilla, cd to the folder using SSH and start it with,<br />
<br />
<pre>node test.js</pre></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-68108913781698009982010-09-19T11:22:00.009+08:002010-10-08T14:32:35.689+08:00Easy File Reading, Writing and Appending In NodeJS<div align="justify">
Recently, i was having trouble in <b>reading</b>, <b>writing</b> and <b>appending</b> file in NodeJS. I am just a beginner in NodeJS so i go wandering around in google searching for help. In the end, I ended up reading the NodeJS documentation and here goes.</div>
<br />
<h1 align="justify">
File Reading</h1>
<div align="justify">
Firstly, what you need to do is create a new file called <b>"file.js"</b> anywhere you want which in my case is <b>"/home/pyrostrex/file.js"</b></div>
<br />
<div align="justify">
Secondly, you need to create a dummy file and name it <b>"test.txt"</b> in the same folder where your <b>"file.js"</b> is. Just add in any content would be good for this tutorial.</div>
<br />
<div align="justify">
After that, you must require the filesystem.</div>
<br />
<div align="justify">
<pre>var fs = require("fs");</pre>
<br /></div>
<div align="justify">
Then, add in inside these lines of code below.</div>
<br />
<div align="justify">
</div>
<div align="justify">
<pre>fs.readFile("test.txt', function(err, data){
console.log(data);
});</pre>
<br /></div>
<div align="justify">
That's it! Now you're done. Just run <b>node file.js</b> inside your terminal and you will see the result!<br />
<a name='more'></a></div>
<br />
<h1 align="justify">
File Writing (Overwrite)</h1>
<div align="justify">
Now that you know how to read file in NodeJS. Let's move on shall we?</div>
<br />
<div align="justify">
For this writing process, it will overwrite the file. Just like file reading, you must first include the filesystem into our NodeJS code.</div>
<br />
<div align="justify">
<pre>var fs = require("fs");</pre>
<br /></div>
<div align="justify">
Then, instead of using fs.readFile, you have to use fs.writeFile.</div>
<br />
<div align="justify">
</div>
<div align="justify">
<pre>fs.writeFile("test.txt', "This is a hello inside a file!", function(err){
if (err) console.log(err);
});</pre>
<br /></div>
<div align="justify">
Basically, what the above code do is write the entire buffer one time into the file "test.txt"</div>
<br />
<div align="justify">
So that's it for file writing! Easy huh!</div>
<br />
<h1 align="justify">
File Writing (Append)</h1>
<div align="justify">
You have already know how to read and write file. But you must be wondering, how can i append to a file?</div>
<br />
<div align="justify">
This is still easy but require more lines than before. So here goes.</div>
<br />
<div align="justify">
</div>
<div align="justify">
<pre>fs.open("test.txt", 'a', 0666, function(err, fd){
});</pre>
<br /></div>
<div align="justify">
What the code above do is open a file called "test.txt" with an 'a' attribute which is the append attribute with the mode '0666'. If you see above, the fd refers to the file handle that we currently opened.</div>
<br />
<div align="justify">
Inside the { ... } tag, you have to put this code.</div>
<br />
<div align="justify">
</div>
<div align="justify">
<pre>fs.write(fd, "I'm an appended Hello World!\n", null, undefined, function (err, written) {
console.log('bytes written: ' + written);
});</pre>
<br /></div>
<div align="justify">
There are five arguments here and all the information about what each do is listed below</div>
<div align="justify">
</div>
<div align="justify">
<ul bullet-2"="">
<li>1st Argument is the file handler that was parsed before.<br />
</li>
<li> 2nd Argument is the data we wanna append inside the file which in my case "I'm an appended Hello World!" and a newline. </li>
<li>3rd Argument is the position of cursor. In my case i used null because i want it to be in the default position which is at the end of the file.<br />
</li>
<li> 4th Argument is the encoding. It supports 2 type 'utf8' and 'binary'. But for the sake of this example, I am using the default value which is "undefined". Some people said that i cannot use null but I don't know this because i never tried it before. </li>
<li>5th Argument is the callback. What you wanna do after the file has been append. The 1st argument of the callback is the error argument which will have its value when any error occurred in the process. The 2nd argument is how much data has been written inside. ex. 5 bytes, 10 bytes depending on the length of your data buffer.<br />
</li>
</ul>
</div>
<div align="justify">
So, that's it folks! I hope you found my tutorial today easy to use and easy to understand. Sorry for typos and bad grammar.</div>
<div align="justify">
</div>Unknownnoreply@blogger.com3tag:blogger.com,1999:blog-6206656752904220149.post-28873815173559416602010-09-19T10:23:00.001+08:002010-09-19T12:07:11.371+08:00Reopen of PyroStrex in BlogspotI don't know why but I've decided that i will be no longer maintaining pyrostrex.info as my project page but instead, I will use pyrostrex.blogspot.com as my project website. Maybe because I saw a great potential in using blogspot.com. So, from now on, this will be my new project page.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-48679848788203152042010-04-12T23:19:00.004+08:002010-09-19T10:45:52.212+08:00My Website!This blog has been closed and moved to <a href="http://pyrostrex.info/">http://pyrostrex.info </a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-79722214822613387122009-12-09T16:49:00.015+08:002010-09-19T21:08:50.202+08:00Hooking Winsock Function Using IAT Hooking Technique<div style="text-align: justify;">Hmm, since me myself were searching for how to do this for 4 years. I think i should also share what i found with everyone else. Here it is "hooking winsock function without the need of microsoft detours, boxedapp or easyhook".</div><a name='more'></a><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b>For anyone who loved Microsoft Detours and just wanna get rid of it's detoured.dll, you can try this link :</b> (Thanks g3nuin3)</div><div style="text-align: justify;"><a href="http://forum.gamedeception.net/showpost.php?p=109027&postcount=4">http://forum.gamedeception.net/showpost.php?p=109027&postcount=4</a></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><h1>Why do i need it ?</h1></div><div style="text-align: justify;">People will start to ask, why do i need this? well basically this is only for programmer who was researching for same thing as me. This is also for a programmer that want to improve their knowledge.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><h1>How to use it ?</h1></div><div style="text-align: justify;">Include the hook.h and hook.cpp into your project and start using the function. Download the full source code to see how the code works.<br />
<br />
<h1>Select the one you want to download :</h1></div><div style="text-align: justify;"></div><div style="text-align: justify;"><b><span style="color: #274e13;">Full source code (Recomended) :</span></b><span style="color: #274e13;"></span></div><div style="text-align: justify;"><b>Revision</b> : 001</div><div style="text-align: justify;"><b>Archive Filename :</b> WinsockHook.zip</div><div style="text-align: justify;"><b>Archive Size : </b>12.5kb</div><div style="text-align: justify;"><b>Note</b> : DLL Injector needed</div><div style="text-align: justify;"><b>Download Link :</b> <a href="http://www.mediafire.com/file/dnnzogyyxyw/WinsockHook.zip">MediaFire</a></div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><b><span style="color: #274e13;">hook.h and hook.cpp only :</span></b></div><div style="text-align: justify;"><b>Archive Filename : </b>hook.zip</div><div style="text-align: justify;"><b>Archive Size : </b>2.21kb<b><br />
Download Link : </b><a href="http://mediafirehttp//www.mediafire.com/file/gzxzyzmmomm/hook.zip">MediaFire</a><br />
<br />
<h1>Pros :</h1></div><div style="text-align: justify;">DOESN'T NEED TO INCLUDE ANY ADDITIONAL DLL JUST INCLUDE THE HOOK.H AND HOOK.CPP TO YOUR DLL PROJECT.</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><br />
<h1>Cons :</h1></div><div style="text-align: justify;">Currently only works with 32bit. (I don't have 64bit computer to continue my research)</div><div style="text-align: justify;"><br />
</div><div style="text-align: justify;"><br />
<h1>Notes :</h1></div><ul style="text-align: justify;"><li>I've only tried it with a simple client and server program so far. I'm not really sure if this will work in a big software. But from what i read, MIRC can also be intercepted.<br />
<br />
</li>
<li>hookAPI.h is the original of my hook.h and hook.cpp. I modified the code to make it look more better (as for me it is) and make it nearer to Microsoft Detours style so people who are using Microsoft Detours doesn't need to re-learn much to get this method to work. I make it portable to all people who are using <a href="http://www.codeproject.com/KB/DLL/funapihook.aspx">this CodeProject example</a> and only need some small modification.</li>
</ul><br />
<div style="text-align: justify;"><h1>Story behind the research :</h1></div><div style="text-align: justify;">For the past 4 years, i've been searching for anything that can make me do something like this and after 4 years i found one library that looks really good called Microsoft Detours. I stopped for about 2 month after founding Microsoft Detours since i have a school exam to take care of. After the exam, i continued my research but found out that Microsoft Detours is no<b> </b>longer in version 1.5 instead its already in version 2.1. From this version, i stopped liking it since it forced me to use the detoured.dll, i found a way to get rid of it but i scared that it will be against the Microsoft License. After that, i stumbled upon a new method by using easyhook but it was in C# and it still needed me to include its easyhook.dll. After sometime, i've found an alternative to Microsoft Detours called BoxedApp. Still, i need to buy it just to get the static library. Finally after a long time being searching for the right answer, i know that the only thing i need is IAT Hooking knowledge. But, it did not end here, i tried to search for IAT Hooking in Mr. Google but found too many search result. With these many search result, i clicked all the links one by one and read all of them. Finally after a very long time wasted, i get one link that is good enough to provide what i wanted. THE LINK WILL BE PROVIDED SOON.</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6206656752904220149.post-42722498279835113562009-12-09T01:14:00.018+08:002010-09-19T21:09:02.346+08:00StartLibraryFunction (Calling Injected Library Function With Multiple Parameters Support)<div style="font-family: Arial,Helvetica,sans-serif;"><span style="font-size: small;">Well, this is my first post in this blog so firstly i'm sorry if my english isn't good enough for you all programmer to understand. This time, I'm gonna share with you my code on how to start a library (dll) function after you've injected it to a process.<br />
</span><br />
<a name='more'></a><span style="font-size: small;"><br />
I then research in many places and my choice of search engine is Mr. Google. Suddenly, i ended up finding these two link that was quite good for giving me the things i want :<br />
<br />
<b>Enhanced CreateRemoteThreadEx() :</b><br />
<a href="http://www.rohitab.com/discuss/index.php?showtopic=31453">http://www.rohitab.com/discuss/index.php?showtopic=31453</a><br />
<br />
<b>Calling An Exported Function In An Injected Dll Library :</b><br />
<a href="http://www.digitalise.net/2009/01/02/calling-an-exported-function-in-an-injected-dll-library/">http://www.digitalise.net/2009/01/02/calling-an-exported-function-in-an-injected-dll-library/<br />
<br />
</a>But still, the two links above doesn't really have the thing i want since i wanted a function that can remotely call a dll function that have multiple arguments or as the second link said with some extra words "calling an exported function that have a multiple arguments in an injected dll library".<br />
<br />
The first link is really really really good but after i tried to build the code and run it, an unexpected assembly error come out. I used the binary (.exe) that was included in the archive, the binary run flawlessly but after showing a MessageBox in a notepad or calculator, the notepad or calculator immediately crashed.<br />
<br />
As for the second link, there's no errors found here, it run flawlessly, i give the creator a really good job and thank you for releasing it as a open source. Just one thing, the function called can only support one parameter.<br />
<br />
Since both link doesn't have what i REALLY want, i tried to create my own function and both links being a really good reference for me.<b style="color: red;"><br />
<br />
</b></span><b>Appreciation :</b><span style="font-size: small;"><b style="color: red;"><br />
In this section i would like to say thanks to both poster / creator in the link above for giving me a really good reference to start my project.<br />
<br />
</b><b>Why do i need this ?</b></span><br />
<span style="font-size: small;">Well just imagine if we want to show a MessageBox function that have more than 1 parameter. We can use the CreateRemoteThread function but with it, you can only pass one parameter. With StartLibraryFunction, you can fully customize the MessageBox to show what you want. This could also be useful if we want to create a dll that need a function more than 1 parameter parsing.<br />
<br />
<b>Pros :</b><br />
Function with more than one parameter can be called.<br />
<br />
<b>Cons :</b><br />
x86 Only (Thanks Irwin)<br />
Can only call stdcall type calling convention.<br />
<strike>No Calling Convention Support</strike> (Thanks Irwin)<br />
<br />
This is the list of what i think i should tell you all about what i've done in my project :</span></div><div style="font-family: Arial,Helvetica,sans-serif;"><ul><li>Since i am too lazy to create my own injection class from scratch, i used the injection class from the second link. I did not copy paste the whole code. Even though i am using them, i re-typed the whole class to understand it since from the moment i started this project, i don't even know how to do library injection.<br />
<br />
</li>
<li>The first link is only as a reference and my StartLibraryFunction() function, i did it all by myself from scratch.I never understand any of the first link ASM code format, so i studied ASM language from the beginning and come out with my own ASM format.<br />
<br />
</li>
<li>It took me about 3 days excluding the day i publish this post to finish this project.<br />
<br />
</li>
<li>My function currently only support %d and %s as the format.<br />
<br />
</li>
<li>By understanding the library injection method, i managed to create my own library ejection method. So, the EjectLibrary function is also did by me from scratch.<br />
</li>
</ul>There's no need for me to tell you how to use it since <b>the code is already too self-explanation</b>. Just download the archive, extract and open the main.cpp to see how to use the code. <strike>Calculator must be opened before running the code to prevent from compiler error</strike>.<br />
<br />
<b>To try the code</b>, simply extract the archive, open the release folder and click the StartLibraryFunction.exe.<br />
<b><br />
Here is the link to the file for everyone who want to use/try it:<br />
Revision : </b>002<b><br />
Source Format</b> : Microsoft Visual Studio 2008<br />
<b>Archive Name</b> : StartLibraryFunction-REV002.zip<br />
<b>Archive Size</b> : 16.05kb<br />
<b>Download Link</b> : <a href="http://www.mediafire.com/file/onitehdegzj/StartLibraryFunction-REV002.zip">MediaFire</a><br />
<br />
That's it for now, please report any bugs back to me. Your comments are welcome. Thank you for reading this ugly post. Hope you all enjoy!<br />
<span style="font-size: small;"></span><span style="font-size: small;"> </span></div>Unknownnoreply@blogger.com0