You are on page 1of 8

Some java hints collected

You'll need a background in algorithms. This is a great Coursera course that I'd
strongly recommend if you're serious about it: https://www.coursera.org/special...

It'll be useful to have brushed up on some mathematics, in particular probability,


discrete maths (combinatorics) and linear algebra.

Experience in web dev is handy, but in all honesty can be a bit "shallow" and more a
practice of memorization than developing more general purpose skills. That said,
spending time doing projects in web dev is very valuable, but you'll benefit from
toying with a few different backends and frontends valuable, e.g.

 Backends: Ruby on Rails, Python + Django, Node + Express.


 Frontends: "Vanilla" JS, JQuery, React, Angular (or Vue, or Polymer, or something
else)

You'll benefit from studying Object Oriented Programming. Personally I don't agree
with some aspects of it, but it's important to be comfortable within it. You can likely
find some Coursera course for this.

I'd recommend studying Databases, although you don't need to go too formal on this,
just enough to feel comfortable sketching tables for a database, explaining keys and
foreign keys and some joins.

I'd recommend studying Networking, this book is likely a great practical set of
content: https://hpbn.co/

Lastly, and with lower importance, I'd recommend studying Concurrent Programming
("Parallel Programming"), in particular programming with Semaphores and Message
Passing (as opposed to graphics card programming / CUDA)

Throughout learning the above you should get a chance to play with a few languages,
at least two or three of: Python, C, Java, JavaScript and maybe a couple others. The
ability to write comfortably in at least two of these is essential and is worth bearing in
mind while studying the above.

In terms of books to read, I'd recommend:

 Effective Java
 The Pragmatic Programmer
 Code Complete
 Cracking the Coding Interview (as a general rule I don’t like books with an emphasis
on beating interviews as they lead people to situations they’re not well equipped
for, but it’s a useful piece of content for refreshing yourself before interviews)

Finally, low down on the list but good if you have an interest would be learning
computer security (specifically hash functions, symmetric ciphers, asymmetric ciphers
and RSA, and digital signatures), computer architecture and compilers, but I frankly
wouldn't really worry about those for entry level stuff.
This is a lot of work, probably a year to two of work focusing primarily on this. One
of the big challenges will be setting goals and measuring progress. Courses offered by
Coursera are a useful way to bring some structure to your studies, as are working on
projects with friends in order to provide a forcing function.

Good luck!
I work with a lot of interns who have learned Java in school and are now
applying it for job purposes. My answer is going to assume you're
looking at entry-level positions.

Schools, for the most part, do not teach Java job skills. If you're learning
event driven programming using Swing, for example, expecting to use
that on the job is a pipe dream. Unless you're applying to a job that lists
it specifically, most Java is web or enterprise oriented.

Conceptually, you need to understand the following in Java and know


how to describe and apply it:

 Understanding of all basic Java control structures, able to declare


methods and a working understanding of pass-by-value and pass-
by-reference.
 A understanding of classes vs. interfaces.
 Understand the role of the public/private/protected modifiers.
 Understanding of Strings as immutable objects. How to create
mutable Strings via StringBuilder and other classes.
 Creation of a basic Java POJO/bean (data entity).
 Understand how statics work.
 Know how to declare constants.
 Understand basic class, variable and constant naming conventions.
 Know how to organize code into packages.
 Understand the role and usage of JAR library files and how to
reference them in your application.
 Have a working understanding of the core Java API and where to
find stuff. At a minimum, know the roles and uses of classes in
java.lang, understand and able to use the Java Collections API
correctly (i.e. declare variables of List type, not ArrayList) and
know some of the utility classes in java.util, java.text and
java.math.
 Knowledge and theory of some basic design patterns (Singleton,
Factory, Facade, DAO, MVC).
 Know what the CLASSPATH is!
 Know how the main() method works and how to pass arguments to
basic programs.
If you're looking to get into web or enterprise development, some
exposure and knowledge of the following is helpful:

 Familiarity with SQL databases and programming against them via


JDBC.
 For web, understand how the HTTP protocol works and how basic
web interaction takes place.
 A basic knowledge of HTML. Specifically, basic page structure
and how HTML forms work. Difference between GET and POST.
 Any knowledge of the Servlet/JSP API, how web containers work
and the Servlet lifecycle.
 Any understanding of XML. Web services and WSDL theory is a
bonus.
 Any understanding of TCP/IP networking (TCP vs UDP, role of
IP, DNS, network addressing).
 Use of any logging framework.
 Know what Apache Commons is!
 Any understanding or exposure to source code control systems and
why they are important.
 Any understanding of software project management and the
software development lifecycle.

Notice I have not listed a single framework! I am always looking for


fundamental knowledge and a foundation to build upon. An entry-level
person is not expected to know too much. The more the better but it must
be a place we can grow you from.

And of that first list, only about 1/4 to 1/2 of it is ever touched upon in a
college or university class. Virtually none of the second list is ever
covered in college or university classes.

Honestly, having a working if imperfect knowledge of stuff on the first


list, able to answer some questions off the top of your head without
needing a book or the Internet as a crutch at every stage and a willingness
to learn is what is needed to get you in the door. Given I am usually
interviewing candidates that are from the same school, I am looking for
things that differentiate them. Self-starters and motivated learners are
often that differentiator.

- Day_2 : Generics and Collections


-Day_3 : Algorithms(Sorting and Searching)

Week 2
-Day_4 : Strings and Regular Expressions
-Day_5 : Basic I/O
-Day_6 : Exceptions, Assertions

Week 3
-Day_7 : Concurrency 1 (Processes & Threads)
-Day_8 : Concurrency 2 (Processes & Threads)
-Day_9 : Networking
There are several resources, problems are level pre-requisite knowledge.

Since you didn't mention what you wanna reverse engineer and since I've no idea of
your profile let me give you an example of reverse engineering which I personally
did.

So back in 2013 I tried to reverse engineer the WhatsApp android application to


understand how it worked, I knew programming in Java but was new to low level
programming (SMALLI / ASSEMBLY).
I used different tools for the process like apktool, dex2jar, JD GUI which is a utility
that displays Java source codes of “.class” files.

Like for android (Which by the way is not possible for latest applications) you could
do reverse engineering for most platforms.

Reverse engineering is not just limited to Software, but hardware as well.

There are various youtube playlist to help you get started in both Hardware and
software reverse engineering. Before that check out the series of
OpenSecurityTraining, they comes under 3 categories and features the following

Beginner:

 Introductory Intel x86: Architecture, Assembly, Applications, & Alliteration


 Introduction to ARM
 The Life of Binaries
 Malware Dynamic Analysis
 Introduction to Trusted Computing

Intermediate:

 Intermediate Intel x86: Architecture, Assembly, Applications, & Alliteration


 Introduction to Software Exploits
 Exploits 2: Exploitation in the Windows Environment

Advanced:

 Rootkits: What they are, and how to find them


 Introduction to Reverse Engineering Software
 Reverse Engineering Malware
 Advanced x86: Virtualisation with Intel VT-x

1. Read this ebook:

https://vxheaven.org/lib/pdf/Ide...

Reverse Engineering: The Viral Approach

2. Play with IDA Pro, or objdump to disassemble the binary.

3. Play with QEMU emulator, and setup an virtual environment for yourself to step
through the program or just run the program. Or VMWare, or VirtualBox. The key to
RE is that anything unknown should be treated as malicious. And if the binary want
to connect back to some server, perhaps you should intercept the traffic to capture
the content, or emulate the server if possible.

4. Debugger: breakpoint by address, data - these are among the most important
knowledge to master when reversing.

5. Master commercial debugger like Immunity Debugger (lots of features which


facilitate RE):

Immunity Debugger

6. Generally, you cannot RE everything, but just identify a target for yourself, eg,
finding the key in memory, go straight into the target.

Sep2016 Update:

learn gdb 7.0: Reversible debugging: GDB and Reverse Debugging

How does reverse debugging work?

Talk and learn from other reverser: Welcome to the longest running and most
complete Crackmes web page on the internet.

Activity Stream - RCE Messageboard's Regroupment


Welcome to VX Heaven! (this site have lots of anti-RE stuff)

In the past is Wotsit: where you can find out all the internal details of different files
like pdf, ppt, xls etc. Now it has died: Where to find information about a file format?

Check out all the unanswered RE questions: Highly Voted Unanswered Questions

All the RE related stuff at reddit website: Reverse Engineering •


/r/ReverseEngineering

And googling for the Books:

http://www.foo.be/cours/dess-201...

http://www.radintech.com/attachm...

You might also like