FREE Licensed Software Everyday!
05-26-2009 3:49 PM
Do you like software? Freeware? Shareware? Opensource? How about Licensed softwares - for FREE?

From the site:

Basically, every day we nominate one software title that will be a Giveaway title of that day. The software will be available for download for 24 hours (or more, if agreed by software publisher) and that software will be absolutely free. That means - not a trial, not a limited version - but a registered and legal version of the software will be free for our visitors*.

The software product will be presented in its full functionality, without any limitations save for those mentioned in Terms and Conditions.

Here's the give away today! Look!

Giveaway of the Day

Oh, by the way, the site is http://www.giveawayoftheday.com/

Enjoy!

by modchip | with no comments
Filed under: ,
PS Batch... Command: It's Like Watching a Movie
01-08-2009 2:35 PM

Do you have a digital camera? Do you need to resize a thousand photos?

Yes, I know, there are free batch resizers available online, and even you guys can code one if you felt like it. So for those who do not know how to make one, or is too lazy to get one, but luckily has a copy of photoshop, here's something for you. There's a command in the File menu that often gets ignored (at least by the people I know) -- it's the batch command. Ignored simply because they think that it's a hassle to set up. It's actually so easy, c'mon!

Before you can use this command, you should have an Action. Actions are like "macros" - you can record anything you do in PS and recreate it with a single click. Pretty neat huh! We'll make a simple batch resizer. Let's start!

  • Open up an image.
  • Open the Actions panel.
  • Click the "New set" icon (Looks like a folder) and name it.
  • Click the "New action" icon (Looks like a folded paper) and name it.
  • Click the "Record" icon (Errr... looks like a record button). LOL.
  • After step 4, you can actually do whatever you like, but for the examples sake, Image > Image Size... let's just try to set it to 640 x 480. Click ok.
  • Press the "Stop" icon in the Actions panel (The square one..)

Now let's use that create action in the Batch command. Here goes.

  • Click File > Automate > Batch...
  • (From hereon, see screenshot below for reference) Choose the set we created.
  • Choose the action we created. (Since isa lang naman yung action sa set natin, it will be the initial pick.)
  • Source - choose what's appropriate. Usually it would be "Folder".
  • (Assuming Folder) Click Choose... button, then point to directory containing pictures/images to be resized.
  • Destination - I usually choose "Folder" here as to preserve the original source. But if you don't need the originals, choose "Save and Close".
  • (Assuming Folder) Click Choose... button, then point to directory where you want the resized images to be dumped to.
  • (Assuming Folder) You can assign the new resized files a new name here. There are a lot of choices in each dropdown box. You can also explicitly type it out. Just remember to at least concat an incrementing value to avoid overwriting stuff.
  • Click OK!

NOTE: You can use Batch... for anything! I only used resizing as an example. If the Actions can record it, you can Batch it.

See, was that too hard? Now you can sit back and watch PS do the work for you. As the title goes, "It's like watching a movie." Hehehe.

by modchip | with no comments
Filed under:
cvega's Kill the Nag: An In-depth Dissection
01-08-2009 1:11 PM

Ok, here we go again! This is my solution for cvega's Kill the Nag challenge. Let's review the conditions.

Method: Patch
Difficulty: Easy
Restriction: Help->About action should remain function, killing the dialog from resource is prohibited.

You can see from the nag-screen from the screenshot, it says that the program expired from trial and it annoy you every 15 seconds by showing you the reminder nag-screen (hint!).

See the attached program, and take your time it's not easy.

We have a couple of things we can use here.

  • Killing the dialog using a resource editor is prohibited. Check!
  • He said dialog, so chances are, the DialogBoxParam will be called somewhere at startup. Check!
  • There is a timer, probably set by a SetTimer. Check!

Let's check out the target in its "untouched" form.

Very simple. We can do 2 approaches here. 1, destroy the dialog by skipping any DialogParam calls; 2, Destroy the timer (I mean, don't let it start).

APPROACH 1: Skip the DialogBoxParam call.

I'm assuming you already have OllyDbg. If you don't, please fetch it @ http://www.ollydbg.de, it's free.

Fire up Olly, load our target (manage.exe). let's search for a Dialog call. Look just a few lines after the line in which we landed, do you see the call. It might or might not be the call we want, but since we're already there, let's try it out.

There's a conditional instruction before the call, I don't know what it is (possibly the countdown? A little help here chris), so let's try our luck here. What we can do is instead of a conditional jump, will change it to a forced jump (JMP) to the RET instruction - fully avoiding the DialogBoxParam call. So, highlight the JNZ short line, then press the SpaceBar. Change it as I've changed it in the screenshot. What it does is what I just explained. LOL.

Run the program in the debugger. Did it work?!? It did for me! Solved!

But remember, any changes that you made are temporary. If you want it permanently changed, you must - right click on the CPU window, highlight "Copy to executable" then click "All modifications".

Then click "Copy all"...

A new window will pop, right click on it, click "Save file". Choose a new filename and your changes are permanent now.

Congratulations, you've just solved cvega's challenge!

APPROACH 2: Prevent the timer from starting.

Almost the same as approach 1, but this time, we will skip a call to the SetTimer. All you have to do is to find that call, a few page downs from the start of the code will lead you there, then just change the 1st push to a jmp to the line after the SetTimer call. I guess I don't have to fully illustrate each step here since as I've said, it is very similar to the first approach. So maybe I'll just drop a few screenies.


So there you have it, 2 approches for one problem. By the way, here's my fixed manage.exe. I know there are other ways to solve this, but you have to find those yourself! Until the next challenge! Bye!

cvega's Save The Devil: A Walkthrough
01-08-2009 11:22 AM

Since the "Save the Devil" challenge from cvega seems inactive for sometime now, I decided to write my complete solution for it, in case anyone is wondering how I got the correct numbers, and eventually "saved" the devil. So here goes.

There are a couple of things that you need in order to follow me with this guide. You need OllyDbg (A free debugger @ http://www.ollydbg.de/) and a Hex2Char Converter (any would do, to make things easy).

Done getting the tools?

First thing to do is to get to know the target , which is devil.exe . Run it, and observe it. Let's see, there's a timer... there's a textbox... there's a button... So I'm guessing that we must type something on the textbox (duh!?!). Ok, let's try something before the time runs out, then press go. Hmmm.... nothing happens. let's see what happens if the timer reaches 0 - "The Devil is DEAD!!!" (Take note of this message) - that's not what we want.

Let's check cvega 's solution conditions again.

To save the devil, you need to enter the code to unlock the devil's lifestream before you run out of time!

Hint: The code is 8 digit long composed of all numbers!

Cool! There's a hint! This hint is actually the easy way out for this challenge. If he had not mentioned that, it will be alot harder for us to solve this. Ok, back to the challenge, he said 8 digits -- so there's probably a counter set for that, usually stored in the appropriately named "Counter Register", ECX. Let's take note of that.

Here's where the real fun starts. Fire up OllyDbg, and open our target, "devil.exe". Whoa! What's all these. Behold, the disassembled code of devil.exe. Eeekkk! Anyways, remember the message that was displayed when the devil died, let's use that as a starting point. Right click on an empty space in the CPU panel, then click "Search for" then click "All referenced text strings". A new window will appear. Let's look if the message is here.

Oh goodie, there's 2, but the actual one is the one with the three "!", double click that and let's see where it takes us.

Ok, so far so good, there's the message when we fail to save the devil, and above it is the message when we actually saved the devil. So this means that the calculation for the correct number is somewhere above this code. Let's scroll up a little to find out.

Yahoo! Did you spot it? Did you remember cvega 's hints? 8 digits? There we have it!

Let's set a breakpoint to get a better view of what's going on. Hit F2 on the line with the code MOV ECX, 8. The address will have a red marker which means a breakpoint is set. Once done, run the program. (If you receive an error about something unreadable yada yda, just close the program and run again. It will fix itself after a few tries.) Enter any number on the textbox, then click go. You should break. Let's step over the code using the F8 button.

Let's study the code.

01 004012BD MOV ECX,8 ; This is the counter
02 004012C2 JMP SHORT devil.004012DA ; Jump to line 16
03 004012C4 LODS BYTE PTR DS:[ESI] ; Get a character of your input
04 004012C5 PUSH EAX ; Stored character pushed to stack
05 004012C6 MOV EAX,EDX ; Copy something to EAX, stored digit is overwritten
06 004012C8 POP EAX ; Restore top value of stack, stored digit back to EAX
07 004012C9 ADD AL,18 ; Add 18 to stored digit
08 004012CB SUB AL,0C ; Subtract 0C to stored digit
09 004012CD ADD AL,18 ; Add 18 again...
10 004012CF SUB AL,24 ; Subtract 24, duh, it's back to its original value
11 004012D1 XOR AL,4E ; THIS IS THE ONLY IMPORTANT BIT...
12 004012D3 MOV EDX,EAX ; Sigh... Looking at the algo, I think it's quite useless,
13 004012D5 SUB EDX,0E ; except for line 11, so let's carry on to the comparison
14 004012D8 STOS BYTE PTR ES:[EDI] ; section... which is Line 18.
15 004012D9 DEC ECX ; ECX -= 1
16 004012DA CMP ECX,0 ; Is the counter equal to 0?
17 004012DD JA SHORT devil.004012C4 ; If counter is > 0, got to line 3

Almost everything is junk. But line 11 does something, so let's take note of that. let's look further down to the conditional part of the code;

18 004012DF LEA EAX,DWORD PTR DS:[404175] ; Copy something to EAX as pointed by address 404175 then
19 004012E5 MOV EDX,DWORD PTR DS:[EAX] ; Copy 7A7E7F7F from EAX to EDX, whatever that is...
20 004012E7 MOV ECX,DWORD PTR DS:[EAX+4] ; Copy 76787677 to ECX...
21 004012EA LEA EAX,DWORD PTR DS:[40407D] ; Copy our string as pointed by 40407D
22 004012F0 SUB EDX,DWORD PTR DS:[EAX] ; EDX = 7A7E7F7F - our last 4 digits
23 004012F2 SUB ECX,DWORD PTR DS:[EAX+4] ; ECX = 76787677 - our 1st 4 digits
24 004012F5 ADD EDX,ECX ; Add EDX and ECX result in EDX
25 004012F7 OR EDX,EDX ; Check if EDX is equal to 0
26 004012F9 JNZ SHORT devil.0040136E ; If not zero, our number is WRONG!
; EDX will only be 0 if 7A7E7F7F 76787677 (with extra Xor'ing))
; matches our number.... hence...

So this is what's happening. Each character of the number we input is XORed with 4E, and then subtracted with the correct one. So naturally, if ours matches the one cvega coded, the result must always be zero! And since the correct one is hardcoded, we can easily extract it. The answer is right below our noses all the time! It is;

18 004012DF LEA EAX,DWORD PTR DS:[404175] ; Copy something to EAX as pointed by address 404175 then
19 004012E5 MOV EDX,DWORD PTR DS:[EAX] ; Copy 7A7E7F7F from EAX to EDX, whatever that is...




20 004012E7 MOV ECX,DWORD PTR DS:[EAX+4] ; Copy 76787677 to ECX...




See? Since it's hex, it will be in reverse. The correct (raw) string is 777678767F7F7E7A. Take out your converters and let's convert away, character by character.

Hmmmmm.. this is weird, 77 is w, 76 is v... The correct answer are digits, but were getting alpha characters... So why's that? Check line 11 of the code. Each character must be XORed by 4E! Let's try that.

77 XOR 4E = 39h
76 XOR 4E = 38h
78 XOR 4E = 36h
76 XOR 4E = 38h
7F XOR 4E = 31h
7F XOR 4E = 31h
7E XOR 4E = 30h
7A XOR 4E = 34h

Then let's convert each to a char;

39h = 9
38h = 8
36h = 6
38h = 8
31h = 1
31h = 1
30h = 0
34h = 4

Ok, we got - 98681104; It's all digits, it has 8 characters. Do you think we got it? Only one way to find out...

We did it!!! We save cvega 's devil!!! I hope you learned a lot! Until next time! Bye!

Optional: You can also try to stop the timer for additional challenge if you like. :D

PS: Keith, puwede ba ito? Hehehehe. :D

DP.Challenge #2
10-26-2008 4:46 PM

Thanks to everyone who tried/solved my DP.Challenge #1. Your solutions were so inspiring that I decided to create another one.

Level (0-5): 1

Restrictions: None

Target: Attached

Scenario: Remember our programmer from our previous challenge? Well, he was secretly hired by the IT Head of DMMA IT Department to write a program that would shutdown terminals remotely (with a click of a button), since as we already know, most of DMMA's employees and head are... well, lazy.

So what happened is that the time that the programmer left the company, the IT department Shutdown Utility was also in its beta stage. Yes, it works, but not as expected to - there was also a bug. A bug much bigger than the DMMA Accounting Software.

Following the decision of the accounting department, the IT department also ran ads to find someone to repair the buggy software.

Fortunately, you are reading the ad right now. You know you can do it and you know that nobody else can. So... will you take it?

Goal: Find the bug(s) and fix it. There are no restrictions. Anything goes. Good luck and enjoy.

START: HINT! HINT! HINT! SPOILER ALERT!



1. The "bugs" call one function -- Pay attention to the parameters sent -- the solution is not there, but knowing this will help you.

2. There are only 3 things that you need to change in order to complete this challenge as I intended you to. But I've as said, there are more than one way to solve a problem.

3. Adding a breakpoint will help you a lot.

END: HINT! HINT! HINT! SPOILER ALERT!

DP.Challenge #1
10-22-2008 3:51 PM

Welcome! I had nothing to do, so I decided to put up a very newbie challenge. Please read specifications.

Level (0-5): 0-Newbies
Restrictions: None
Files: It is attached.

Scenario: DMMA Corporation, a company whose accounting personnel cannot add numbers, hired a programmer do code a software specifically to add integers. After a few days, the programmer has partially finished the software and submitted the executable for beta testing. At that time, the company is in the brink of bankruptcy. This event prevented the company to compensate the programmer for the work he has done.

Of course, the programmer got furious when he learned about this. So what he did was he permanently deleted all his source files, making sure that it cannot be recovered in any way. Then he simply left the company.

The company, after learning about the disappearance of the programmer had no chance of getting another programmer (of the same caliber) to do the job, start from scratch again (since the sources were all deleted beyond recovery). All they had was the unfinished build that was submitted to the beta testing department, which after a few sessions -- they found a huge bug.

So they though, why not make use of the existing build? So they spread the word, looking for someone who could do just that.

And you. Yes you. You heard the news. It's your decision to grab the opportuniy or not. Are you gonna take it?

Goal: Find out what the bug is, then repair it without the original source code by any means necessary. Once done, write a simple tutorial or article how you did it, then post in your devpinoy blog or devpinoy forum. Write a comment saying that you have solved it and link to your article. Good luck!

Please note that successfully solving this problem will not get you any prize, not that I don't want to, I just can't, BUT what you get is knowledge. Sabi nga ni ka-Ernie, "kung walang knowledge, (all together now) walang power". This is just for fun, so... have fun!

Holy Mother of... It's Finally Here!
10-22-2008 2:56 PM
Download patch!

Fans of Mother series, it's time to celebrate! The fan translation patch for Mother 3 is done, you you can download the patch at http://mother3.fobby.net/.

For those who don't know, Mother 3 is the 3rd part (obviously) of the Mother/EarthBound series released for the Nintendo Gameboy Advance which sadly did not make it out of Japan. It could have been called EarthBound 2 if it did. It is a traditional RPG in a modern suburb setting, which has taken it away from the usual fantasy theme and its battle system is somewhat similar to Dragon Warrior.

It's very simple to apply the patch.

  • Download the patch.
  • Unzip the package.
  • Run the file that is native to your OS.
  • Browse for your dump.
  • Done.

Thanks to everyone who were involved in the translation!

Enjoy playing!

by modchip | with no comments
Mega toolbar my...
03-10-2008 3:16 PM

Have you ever wanted to download something, but you just found out that the file was hosted in MegaUpload (One example is from http://gewdlooks.multiply.com -- shameless plug) and sadly you're greeted with the no available slots message.

Fear not, let's fix this.

You have 2 choices -- (a) install the Megaupload toolbar, (b) install a firefox add-on. I'd rather do option (b), hehehehe.

If you decided to do option (b), then just follow the procedure below. This is really really simple. All you have to do is;

1. Fetch a copy of the latest build of Mozilla Firefox.
2. Fetch and install the MegaUpload SX 3.2-fx.xpi add-on.
3. Restart Firefox.
4. Tools > Megaupload 3 > Enabled.
5. Test it. Try to get a megaupload link from Chris' site (http://gewdlooks.multiply.com -- another shameless plug).
6. Cross your fingers.

Great it worked! Heh!?! But my internet connection is unstable... my download never finishes. Could I use a download manager? Well, that's another story. ;)

by modchip | 2 comment(s)
Filed under:
Retro: 2004MBit Competition
03-05-2008 2:42 PM

It was only today that I discovered that once in 2004, there was a game creation competition for the GBA platform.

 

Now there is a downloadable version that we can all enjoy! Stick out tongue 

Get the downloadable version!

 

Yahoo! Messenger Beta 9
11-08-2007 4:11 PM

 Have you guys tried the new beta of the famous instant messenger?

 Just installed it and I was blown away with the new look! Take a peek:

Nice!

The one above has my favorite skin so far, you have 7 default skins available. Aside from that, there are more emoticons to choose from, which I heard were based from the winners in the previous emoticon contest (But I will have to confirm this).

There are also these new technical features like the media player, which can view Yahoo! video and YouTube video directly on the message window. I could not try it out because all my contacts still use the old YM. This will only work between YM 9 Beta to YM 9 Beta chat.

Since it's beta, there are sure to be bugs/annoyances,  I found 3 (Ohhhh, I love beta testing):

  • Whenever the client is minimized to the tray, then the ads change,  I get out of focus with other applications.
  • When you click a contact, a box pops up immediately, which is a little annoying/distracting.
  • Added on 11.07.2007: When you change skins, the contact search bar re-appears when in the first place you have hidden it. And if you check the settings, it is actually set to hide, but its not.
  • Added on 11.08.2007: When you're chatting with someone, then he/she logouts, there are no visual signs that he/she did (Unlike the old one, you'll see <nick has logged out>), I don't know if this was intended or they just simply forgot. UPDATE 11.21.2007: Weird, in other PCs I've tested it on, this does not occur, on my office PC and others it does? All OSs are XP...

That's all I've found so far.

If you also wanna try it out, fetch the downloader from this address - http://beta.messenger.yahoo.com/ - :D

See ya! 

by modchip | 9 comment(s)
Filed under: ,
Zipping Files Individually -- Pain in the ***!
11-08-2007 11:10 AM

Picture this, you have 9,999 .doc files. You decide to zip/rar it to save space. But you thought, "I want them individually archived so that I wouldn't have to open a huge zip/rar file just to find a file." But doing that could each up your time, doesn't it? Want a solution, read on!

You might not be aware of it, but one of the most famous archiving utility (WinRAR) already has this feature. You can fetcha demo at their site - http://www.rarlab.com - :D

So here's how you do it.

  1. Compile all the files that you want to compress individually into a single directory.
  2. Select/highlight all the files.
  3. Right-click, click Add to archive... (you should enable context menu for WinRAR)
  4. Choose between RAR or ZIP (I prefer RAR, better compression level in most instances)
  5. Choose a compression level. (I usually go for the slowest/best)
  6. Go to the"Files" tab.
  7. Look at the "Archive" group, check the "Put each file to separate archive" checkbox. (Check my screenshot below if you can't find it)
  8. Click Ok.
  9. Watch and see the magic happen.
There it is!

Hope this tip helps! Until next time!
by modchip | 2 comment(s)
Filed under:
Dark_AleX Strikes Back!
10-09-2007 12:36 PM
We thought DAX was retired. We thought M33 was the new king. We thought 3.71 was the last M33/DAX release. But look what we have here, DAX/M33 is back, and he's got 3.71m33-2! The first version actually had bugs, and is now fixed in this release. Hooray!!! Many thanks for this release. Please come back again... soon. :P
M33 Going Bye Bye!
10-03-2007 2:01 PM

Regarding lamia's blog entry Dark_AleX Going Bye Bye... hey, I think we've been had. Remember when Dark_AleX said "goodbye" -- another team called M33 emerged from the scene right? Now, rumors in circulation says that M33 is actually Dark_AleX! Could this be true? Supposing the rumor was true, why did he change his alias? Nonetheless, M33 or Dark_AleX, it doesn't really matter that much, anyways they've "both" have had fine releases. :D

Anyways, aside from this news, another rumor said that after the release of the new custom firmware (3.71), M33 (DAX) will now leave the scene for real. Awww...

Could this mean the end for us? I hope not.

Round 'n Round We Go!
08-13-2007 11:40 AM

After a year I posted my rounding question in the forums, I finally got it working. Here's the original post I made; http://devpinoy.org/forums/t/915.aspx.

Just this morning, I had nothing to do, so I excavated some of my unsolved sources from my archive. Then I remembered this problem about rounding stuff in assembly. I thought, maybe it's time to solve this, so I did.

The original problem I had was I did not know how to round to a specified number of digits. For example, I have the value 3.1456825863, which I wanted to round to 3 decimal places like this 3.146. For my original code, it always outputs 3. Then it hit me! I already had this problem in flash before, the function Math.round does the same thing, but I already solved it there. So again, excavated the FLA project... and the rest was rounding history. So here's the code using the FPU.

01     .586
02
03     ...
04
05     .data
06     buffer   db    1024 dup(0)
07     fbuffer  dq    0
08     pi        dq    3.14
09     rdigit    dq   10000.0
10
11     ...
12
13     .code
14
15     ...
16
17     invoke GetDlgItemText, hWin, IDC_EDIT_INPUT, addr buffer, SIZEOF buffer
18     invoke StrToFloat, addr buffer, addr fbuffer   
19            fld         fbuffer
20            fmul      pi
21            fmul      rdigit
22            frndint   
23            fdiv        rdigit
24            fstp       fbuffer
25     invoke FloatToStr2, fbuffer, addr buffer
26     invoke SetDlgItemText, hWin, IDC_EDIT_OUTPUT, addr buffer
27
28     ...
29
30     end start

The most important parts for this are lines 09, 21, 22, and 23. Line 09 (rdigit) is the one responsible for controlling the number of significant digits to be displayed, depending on the number of zeroes in it. Example, the input is 3.1456825863 and rdigit is 100.0, the output will be 3.15, since there are 2 zeroes in 100 (My code above will output 3.1457). Lines 21 to 23 simply means that Math.round(ST(0)*rdigit)/rdigit), which is responsible for doing the trick.

So there it is, I hope this helps anyone who will encounter this problem. Please feel free to comment if there are errors in this. I tested it with my scenarios and it worked like a charm, but who knows...

Yes Creds goes out to cvega for the help I got with this piece. Thanks!

Spam Scam #2: Different Subject, Different Content
08-08-2007 2:30 PM

Another one of those. It's really fun analyzing these spams, so let's rave.

First of all, check out the subject, alright! Rod Stewart marries a model? Very catchy, who's the model?

But wait, what's that, it's addressed to a certain Zhirnov Stansislay. The surname is really cool, Is-tan-is-lay, hehehe. So it's not for me eh... but the address is my address? Oh well.

Then let's open up the mail (But I suggest that you don't for safety measures, I'm just doing this for fun). What the... :-o

Just having fun here! ;)

Original Message:

Subject: Reports: Rod Stewart marries model
From: Sales <sales@turningpointprop.com>
To: Zhirnov Stansislay <modchip@xxxxxxx>

Everyone need it Original.

Genuine Viagra and Cialis directly from Phitzer

Here: http://www.turningpointprop.com/
Prices are VAT/TAX removed 

 

by modchip | with no comments
Filed under:
More Posts Next page »