The organisation OpenSecurityTraining offers free training materials under creative commons type licenses. Many of the training's are videos, while others are slide decks and related class materials (scripts, malware samples and so on). The course-ware comes under 3 categories and features the following items (Which I have edited to include the RE related ...
Here are my favorite. I started with Lena's tutorials, they are really awesome.
tuts4you - an endless amount of tutorials. I can highly recommend Lena's reversing for newbies
binary-auditing - Free IDA Pro Binary Auditing Training Material for University Lectures
XOR encryption with a short pad (i.e., shorter than the plaintext) is basically the Vigenère cipher. So standard techniques to break Vigenère should break xor encryption.
The basic idea is that if the encryption key is d symbols long, every d-th symbol is encrypted with the same pad. Thus, take every d-th ciphertext symbol and treat it like simple ...
I'd say it's a very useful tool to have in the arsenal, but your use of it will depend upon your ultimate goals. Personally, I use it a fair bit on binary application assessments, but that's not the case for everyone. As I said, it largely depends on what you want to be doing.
At the end of the day, you will see cryptography being used in applications if ...
In case of multibyte XOR frequency analysis is the way to go.
As is commonly known, most frequent character in regular English text is E (etaoinshrdlu being the top 12) but in some cases space (0x20 in ascii) can be more frequent, especially in shorter messages.
For executable code on the other hand, tho I can't find a reference, most frequent characters ...
Maybe check out this IDA plugin.
After you locate the crypto functions, doing a cross-reference in IDA should allow you to see where the functions are called and likely the key is nearby. If you can set a break-point on those functions and see what is being passed in for the key, this, of course, would be the easiest way.
There are three main contributions of the research
A proposed indistinguishability obfuscation for NC1 circuits where the security is based on the so called Multilinear Jigsaw Puzzles (a simplified variant of multilinear maps).
Pair the contribution in 1 with Fully Homomorphic Encryption and you get indistinguishability obfuscation for all circuits.
For a bit more advanced way of automatic crypto identification see Felix Gröbert's work on
Automatic Identification of Cryptographic Primitives in Software . He uses a pintool to dynamically instrument the code which can allow to even recover keys. The code is also available. The repository contains other tools used in comparison , such as PeID and OllyDBG ...
I typed out this answer and then realized that you wanted free (as in beer) materials. Minus 100 points for me. This answer assumes that you want to learn how to reverse engineer in a software environment.
Under this assumption, and assuming you have a base understanding of a programming or scripting language, such as C/C++ or Python respectively, there ...
It is more and more important for practical reverse-engineering. It is now present in malware, the example of Stuxnet, Flame and others are quite typical of the usage of cryptography in such context. And, it is also present in most protection schemes because a lot of techniques use cryptography to protect the code and data. Just consider software such as ...
The classes by Dan Guido at http://pentest.cryptocity.net/ are pretty good too. I used them as a reference when I first started getting into RE. They cover a large subject area in addition to RE and are well taught.
Just to add to the list. SANS posted a blog about a week ago on different tools for XOR encryption. The list is very good and it provides several tools, all which are good in my opinion.
Here is the link : SANS Blog on XOR tools
I have not used it but there is an open source tool called Aligot that may help when the encryption algorithms have been obfuscated. According to its authors, Aligot can idenfity TEA, MD5, RC4 and AES.
Aligot does have an important disclaimer:
Aligot was build as a proof-of-concept to illustrate the principles
described in the associated paper. In ...
This is quite likely either a botched RIPEMD128 or something very similar, as otus also commented.
You wanted to know how to approach such a task so I'll explain what I did.
Typically, when trying to identify crypto-related code you rely on spotting constants. In this case, the constants seem to be obfuscated on purpose, so you need to play around with the ...
A nice combination of findcrypt2 by HexRays and the work done by Felix Gröbert is IDAScope. It's very useful for searching for and identifying encryption algorithms. For more information on IDAScope's Crypto Identification I'd recommend the following link.
Like others I would recommend trying to get the assembly code that computes the checksum. If you obtain that the rest is easy.
However sometimes that can be very hard to obtain, so here are some tips on reverse-engineering checksums without any code.
Remember that a checksum algorithm is a design choice made by engineers, so think about the constraints and ...
You can always feed the original binary to IDA and use the plugin Findcrypt2 to identify the algorithms used. Other than this the Kanal plugin for PeiD can also detect cryptography used.
Another tool for the same task is Hash & Crypto Detector
The best way to locate AES in a binary blob would be to locate first the AES S-box. It is specifically designed for AES and recommended by the NIST, so a standard AES must include it. Moreover, they are quite unique and easily found through a simple pattern recognition. Here is the value of such S-box:
unsigned char s =
0x63, 0x7C, 0x77, 0x7B, ...
Here are some thoughts on the fundamental problem and a possible solution; even if the full system goes way beyond your dev budget, some key ideas might still be useful for fashioning your own solution.
Crypto is of little use if you don't have the leverage that makes the crypto algorithm itself the weakest link in the system, just like a ten-inch steel ...
This is quite hard question to answer due to variables within reverse engineering.
I would recommend you start off with:
Get some coins or whatever is saved then save the game.
Restart the game and get more coins and save the game.
Replace the new save with your old file.
Does it load? See Answer 1. Otherwise, Answer 2.
Your modified ...
Fully homomorphic encryption is not as good as it might seem for obfuscating code. While it is true that you could compute on an encrypted Turing machine, the benefits to obfuscating a closed system are not that great, simply for the reason that any input or output to the system must be encrypted or decrypted. Thus any reverse engineering of the program ...
Good news, You're lucky!
What you're facing in front of you is a stream cipher. Why is that good? because the way stream ciphers are built makes them extremely easy to reverse - the decryption and encryption functions of stream ciphers are actually the same function.
A stream cipher is a symmetric key cipher where plaintext digits are combined with a ...
Well, the equation is pretty simple, you say that the hashing is done through the following formula:
v5 = serial + serial - serial - serial;
LOBYTE(v5) = serial;
v8 = serial + v5 - serial;
if ( v8 != serial )
We can use an SMT-solver, such as Z3 to find out a possible key for these equations:
I was about to say "this sounds a lot like something that the INSIGHT team wants to hire an intern to investigate this summer" but then I looked at your username and location :)
I think this question is very difficult to answer unambiguously because you are seeking a mechanism to efficiently slow down manual analysis. I'll put what I think is an answer ...
An RSA public key consists of two things: the modulus m (a product of two large primes p and q) and the public exponent e (a small and often fixed number, commonly 3 or 65537).
An RSA private key consists of the same modulus m as in the public key and the private exponent d, a number chosen such that xed ≡ x (mod m). Typically, d will be about the ...
It's base64. One entry per line. Entries look like they're padded to 0x10. So after base64 decoding the data is probably encrypted by a block cipher with 128-bit block size. Maybe AES. At this stage you probably need to analyze the executable in order to get the plaintext back.