00:03
>> Welcome to Cybrary. My name is Sean Pierce.
00:03
I'm a subject matter expert
00:03
for introduction to malware analysis.
00:03
Today we are going to be covering
00:03
more stack analysis, particularly Part 6,
00:03
where we're going to enumerate the capabilities of
00:03
the illusion bot that we were looking
00:03
at the last few videos.
00:03
When we were doing this capability enumeration earlier,
00:03
only the dynamic analysis and saying, okay,
00:03
well we see it's modifying
00:03
the registry and opening up the firewall rules,
00:03
we know it has that capability.
00:03
We know it's going to the IRC.
00:03
We know it can take commands from there.
00:03
We opened up the illusion Bot Builder.
00:03
We saw some other capabilities there.
00:03
But none of that actually means what it says it means.
00:03
I might sound a little silly,
00:03
but I've dealt with plenty of malware,
00:03
plenty of builders and controllers where there's
00:03
unimplemented functionality either in
00:03
the sample or in the builder or the controller,
00:03
where it may say it can communicate over HTTP or it may
00:03
say it can funnel traffic over DNS,
00:03
but it can't actually.
00:03
Maybe the malware author forgot to load
00:03
it in or he wanted to
00:03
say it had that capability but it actually didn't,
00:03
so he can sell it at a higher price.
00:03
Whatever the deal is, you really can't trust what
00:03
an interface says or
00:03
what it might even look like it's doing.
00:03
I've seen samples out there
00:03
that'll try to communicate over
00:03
HTTP or some other method and
00:03
the controller can't actually understand it.
00:03
It looks like it could do it,
00:03
but you can't take the word for it
00:03
or you can't count on that actually being there.
00:03
As malware analysts, we think, well,
00:03
we're not often going to get to the controller.
00:03
We're not often going to get the source code
00:03
so that's a moot point.
00:03
It's not because we do have the sample.
00:03
Earlier we were looking at
00:03
what functions it was calling
00:03
to guess at the functionality.
00:03
But we can actually dig down into the code and
00:03
see what the malware author has actually put in there.
00:03
We can say, okay, definitely for sure,
00:03
it makes a POST request,
00:03
anything with the response it gets back.
00:03
It just immediately moves on.
00:03
actually receive information from a GET request.
00:03
We can say that for sure.
00:03
Having said that, it
00:03
can be a little tricky sometimes especially
00:03
with the sophisticated actor
00:03
because assembly can be very tricky.
00:03
It can be hard to read and with a lot
00:03
of junk code in there because some malware authors will
00:03
fill their malware with
00:03
useless assembly that won't do
00:03
anything and it gets a little confusing to look at.
00:03
They can hide some clever instructions
00:03
strung together that
00:03
will dynamically call something that doesn't
00:03
look like code and do something you may not expect.
00:03
For instance, there was a piece of
00:03
malware that would download
00:03
a web page do a standard
00:03
HTTP GET request and it would
00:03
look for certain strings on
00:03
the web page and go on its business.
00:03
But a lot of malware analysts miss the fact
00:03
that it would go and find
00:03
an image later on that web page,
00:03
I think in the temporary Internet files and then it
00:03
would decrypt a hidden configuration inside an image.
00:03
They were using a form of stenography,
00:03
which means that they hide an image or that they hide
00:03
information as opposed to cryptography,
00:03
which just scrambles the information.
00:03
Inside this configuration, inside this image,
00:03
there was more information
00:03
that a lot of analysts were missing.
00:03
It can be tricky unless you have
00:03
a whole and complete understanding of the code,
00:03
which you really can't all the time.
00:03
There's even more functionality that may be
00:03
hidden in say a downloadable component.
00:03
We will look at this malware and we will find
00:03
that there is a download and execute command.
00:03
superior or if your superior comes to you and says,
00:03
"Hey, I know you analyzed this piece of malware.
00:03
Can it do something like wipe the master boot record?"
00:03
Having analyzed it, you can say no,
00:03
it doesn't have that capability,
00:03
and then turn around and
00:03
a few days later your boss comes back and says, "Hey,
00:03
that malware infected one of
00:03
our machines and the master boot record got wiped."
00:03
WTF. Well, in this executable,
00:03
in this piece of malware
00:03
like most other pieces of malware,
00:03
there's the ability to
00:03
>> download and execute other files.
00:03
>> While you can't say it doesn't
00:03
have that capability someone else
00:03
can easily add more capability
00:03
by downloading more malware.
00:03
Even if it's not, just download and execute the swiper,
00:03
which you can easily download
00:03
from all over the Internet,
00:03
several newer malware families
00:03
out there that are more sophisticated.
00:03
They're really malware platforms.
00:03
I've even done proof-of-concept stuff where basically,
00:03
it's just a platform
00:03
for going to a command and control server and
00:03
downloading an encrypted module
00:03
which has a persistence mechanism
00:03
or downloads another module after that,
00:03
and control server functionality mechanism
00:03
or downloads another
00:03
>> component and that's an FTP server.
00:03
>> If a malware analyst were to
00:03
ever find my executable on disk,
00:03
they would just find this platform.
00:03
They would just find only a small amount of code which
00:03
would just go out to
00:03
an IP address and download
00:03
>> some things and decrypt them.
00:03
>> They would need my command and control server to
00:03
be up in order to get those components.
00:03
With luck, a lot of this malware tends to be more
00:03
targeted and the command and control servers
00:03
are quickly taken down.
00:03
The malware author thinks
00:03
that their operation was burned.
00:03
This is not uncommon,
00:03
especially with malware that has
00:03
been infecting a particular company.
00:03
If a malware author wants to
00:03
just do POS infections where point-of-sale
00:03
systems are only going to be within
00:03
a certain IP address range and he
00:03
restricts downloads of his malware
00:03
or component tree to that.
00:03
Then as soon as he sees another IP address,
00:03
try to get those components, he thinks,
00:03
well, they've put in my malware in a sandbox.
00:03
I'm bringing down the whole operation
00:03
and moving to another command
00:03
and control server and etc, etc.
00:03
That actually does happen.
00:03
If you ever do any botnet tracking,
00:03
where you get a piece of
00:03
spam and you say I wonder what this is.
00:03
You popped into a malware analysis machine.
00:03
You'll notice that the command and
00:03
control server is already
00:03
dead especially if you get
00:03
the piece of spam a few days
00:03
late or even a few hours late
00:03
sometimes because the malware authors
00:03
their command and control infrastructure.
00:03
We can use both static and
00:03
>> dynamic analysis to enumerate
00:03
>> capabilities but you really shouldn't
00:03
say this malware only has these capabilities.
00:03
If you do, you should say,
00:03
hey, it can download and execute things.
00:03
It's a common function
00:03
and a high sophistication actor could be using
00:03
this lower sophistication tool as initial beachhead
00:03
to then download and execute
00:03
something else that's much more dangerous.
00:03
It's much more capable.
00:03
Determining intent is important and
00:03
people behind this but
00:03
when you're doing your malware analysis,
00:03
it's easy to say, look,
00:03
this code definitely won't
00:03
do this or it definitely does do this.
00:03
Having said that, let's jump right in to where we
00:03
last were which was,
00:03
we were decrypting the strings.
00:03
I'm going to pause this VM
00:03
right when it was decrypting the machine.
00:03
I'm going to put it away and
00:03
>> jump back to my either here.
00:03
>> As I said in my previous slide, document everything.
00:03
If I was being a good reverse engineer
00:03
and I had all day to work on this
00:03
and I wasn't just making a video,
00:03
I would say this would be my next step is to
00:03
go through these and label
00:03
them and properly document them.
00:03
One method to determine
00:03
capabilities of a piece of malware is to follow
00:03
each of these functions and see where they're
00:03
called and classify all of the function calls.
00:03
You could burn through each of
00:03
these subroutine calls and you can say this is this,
00:03
this is this, this is maybe this,
00:03
I'll come back to this if I have time, etc, etc.
00:03
But a better way to determine
00:03
capability is by going to
00:03
where the command processing happens,
00:03
where the configuration processing happens.
00:03
The malware author wants to control
00:03
a machine with this piece of malware or steal
00:03
data or whatever his goal is that you usually
00:03
will be able to determine after analyzing the malware.
00:03
He or she will want to
00:03
just be able to command this bot usually.
00:03
I'm going to go over here to Open
00:03
Subviews and then Strings
00:03
>> and I'm going to look for help.
00:03
>> I figure that this malware author has built-in
00:03
they will be controlling it from the IRC,
00:03
so they can just give it some commands
00:03
and that hasn't turned up anything.
00:03
I'm just going to look for,
00:03
expand this, go back Open the Subview to Strings.
00:03
>> I'm going to go through. I'm going to say,
00:03
they don't have a help menu or maybe it's encrypted or
00:03
whatever but I do know that it has some capabilities.
00:03
It can open something called a DCC shell.
00:03
It can download and execute something.
00:03
That's probably a command that
00:03
a malware author would want to remotely execute.
00:03
I'm going to double-click and jump
00:03
to where the string is.
00:03
I can see that it is referenced.
00:03
By pressing X, I can see that the string is
00:03
referenced at this location and only this location.
00:03
It looks like in this subroutine in this function,
00:03
there's the option to download and execute something.
00:03
Looks like KB is showing you
00:03
fast it's downloading and executing something.
00:03
We could dig into that and see exactly what's going on.
00:03
>> download and execute subroutine.
00:03
>> Say display. Download and execute is fine.
00:03
I know this has to be called from somewhere because
00:03
this probably isn't the command processing subroutine
00:03
or the configuration process subroutine.
00:03
I'm going to say, it's probably called from
00:03
that or something it's calling
00:03
it that will call this eventually.
00:03
I'm going to climb on up this ladder and say,
00:03
this is calling a few things.
00:03
It's another function I haven't resolved yet,
00:03
but I could in fact,
00:03
looks like it's called a lot.
00:03
I'm just going to go ahead and help myself and say,
00:03
press "X" and say, want
00:03
to just go ahead and figure this out.
00:03
Was moved into by EAX.
00:03
EAX was last modified by GetProcAddress,
00:03
which was the perimeter
00:03
to get this GetProcAddress was wsprintf.
00:03
Going back to that logic.
00:03
Wsprintf is pushed onto
00:03
the stack where GetProcAddress was
00:03
called and modified EAX.
00:03
This is wsprintf. Jumping back.
00:03
We don't know, this is a good way to document.
00:03
Download and execute print.
00:03
You see where this is called from and Bingo.
00:03
Over in the lower left-hand side,
00:03
we can see that there's a lot of code here.
00:03
We can hit our Control key
00:03
and scroll wheel and we can zoom out.
00:03
We can get a much larger
00:03
>> picture of what's going on here.
00:03
>> We can see that there's a lot of stuff going on here.
00:03
We can Zoom in and see
00:03
a lot of error messages about socks,
00:03
proxies, FTP, all this other stuff.
00:03
That's cool. That's useful.
00:03
If we wanted to see usage HTTP flood,
00:03
we can just click where this code came from,
00:03
where this control flow came from.
00:03
We can just double-click the arrow.
00:03
It'll jump straight to where that line was leading,
00:03
that jump was coming from.
00:03
But I'm interested in
00:03
the capabilities of this malware, if you'll remember.
00:03
I want to quickly to be able to say, it can do this.
00:03
I want to look at the commands
00:03
that a malware author could give
00:03
it or the botnet herder or the controller.
00:03
I take this broad view,
00:03
I can see that there's an interesting set of
00:03
instruction or an interesting
00:03
control flow happening here.
00:03
Where if it's not one thing,
00:03
then it'll do another little thing.
00:03
All these jumps, will
00:03
jump off into their own respective columns.
00:03
I'm willing to bet that
00:03
each one of these little boxes is simply just testing it.
00:03
You can see here by hovering over it.
00:03
Each of these little columns is testing to see if
00:03
a certain string is in a certain memory location.
00:03
Probably it gets in a string from the IRC program.
00:03
This is probably wild true or
00:03
wild not kill yourself command loop is going on.
00:03
It is constantly checking to see
00:03
which command it received on the command line.
00:03
I can quickly zoom in and see if that's the case.
00:03
We can say, beep it's like,
00:03
that might sound like a command.
00:03
Jump over here and say FTP stop.
00:03
That does sound like a command.
00:03
Jump over here, FTD sounds like a command.
00:03
Stop all, that definitely sounds like
00:03
a command and do another jumps, socks 5 stopped.
00:03
This seems like this command tree.
00:03
If I were a betting man I would say,
00:03
this is probably a switch statement.
00:03
But then again, I usually
00:03
catches switch statements pretty easily.
00:03
Maybe it's just if else,
00:03
situation. It doesn't really matter.
00:03
We have a list of functions here.
00:03
If I were documenting everything,
00:03
I would keep a notepad open.
00:03
I'm following these functions down to the end.
00:03
I can hit "Escape" and jump back to where I was.
00:03
I can see here web admin,
00:03
just above it is IRC admin and just above that
00:03
That seems to be all
00:03
for the commands, at least right here.
00:03
notepad and I just start copy and pasting.
00:03
Another thing I would do, I would see where
00:03
the string is kept and see
00:03
if all the other commands
00:03
strings were there so it means we just copy paste.
00:03
It looks like a lot of them were there,
00:03
but I can't guarantee you that they're going to be
00:03
in the proper order. See that?
00:03
>> IGMP exploit. That sounds interesting.
00:03
Config, that sounds interesting in case
00:03
we got onto the IRC channel where this bot is hiding.
00:03
Maybe we can reconfigure the bots.
00:03
I think technically that would be illegal
00:03
because you are still running
00:03
instructions on a machine which you have
00:03
not been authorized to run instructions on.
00:03
But some security researchers do it anyway.
00:03
Some people like from
00:03
Microsoft go and when they take down a botnet,
00:03
they will get law enforcement
00:03
on their side and walk into a data center and say,
00:03
"Hey, this is used for criminal use.
00:03
We are going to help shut it down."
00:03
But I'm not one of those people.
00:03
Even if you have good intentions,
00:03
I would not suggest going onto
00:03
a IRC channel bot and trying to take down the botnet.
00:03
Even if you have the best intentions in mind
00:03
and you're seeing bad stuff
00:03
happen all the time with his botnet,
00:03
there could be security researchers or
00:03
law enforcement also doing what you're doing.
00:03
But they're listening on the channel to see if they
00:03
can get to the author or
00:03
the botnet herder or whatever
00:03
else because they will do that as well.
00:03
I can do this for a while.
00:03
It looks like this bot supports a lot of commands.
00:03
After I'm done with this,
00:03
I could tell someone or do it
00:03
myself for verification purposes.
00:03
I could tell someone to run
00:03
>> these commands and make sure
00:03
>> they actually do what you would think they do this.
00:03
Ftpd command might start an FTP server,
00:03
but it might only do it on Linux.
00:03
D is usually daemon or daemon.
00:03
Maybe it runs better on Linux.
00:03
You might think, "Well,
00:03
it's a PE file an EXE file.
00:03
What makes you think you would run
00:03
an FTP server on Linux?"
00:03
with a source code, you can recompile
00:03
a piece of malware like in the other program.
00:03
that you can just easily recompile for Linux
00:03
and that functionality doesn't exist on Windows because
00:03
the command-line equivalent to start an FTP server,
00:03
which may not exist on newer version of Windows.
00:03
Like I said, we can do this for a while
00:03
and it would be a much better indicator
00:03
of capabilities than just
00:03
looking at the functions and guessing.
00:03
could pass these things over to someone and say,
00:03
"Hey, while I'm doing this,
00:03
make a fake IRC channel, connect to it,
00:03
and just start running
00:03
these commands and see what happens."
00:03
is pretty common malware functionality.
00:03
I might dig into it a little
00:03
bit like this inversion function.
00:03
this function gets called immediately after it.
00:03
What happens there? Is there anything important?
00:03
Does it just set some flags?
00:03
Does it check to see if there's some information?
00:03
Does it just return the version?
00:03
What happens on it's
00:03
not zero loop if it doesn't take that condition?
00:03
It looks like it just prints something.
00:03
It's like this condition
00:03
probably will print the version
00:03
>> number out to the screen.
00:03
>> If it takes this path, it tries to see if this
00:03
variable which I'm going to just name right
00:03
here as input command.
00:03
Say nick, I'll filter out
00:03
the quotes later, reconnect. That's interesting.
00:03
Shut down. That's interesting.
00:03
I can see it has nowhere to go.
00:03
I'll just name this with the N key,
00:03
Whether that shuts down the bot or if it shuts down
00:03
the computer, I don't know.
00:03
Icmpfloodstop, Icmpflood.
00:03
I'm going to stop for
00:03
now and we can see where we are on this graph.
00:03
We can see that we're probably right about there or
00:03
probably right about here.
00:03
I'm going to say 10, 15
00:03
other commands that we could enumerate.
00:03
We've got quite a ways to go.
00:03
The important part is that we can do it.
00:03
Furthermore, we can verify
00:03
that the code actually exist to implement
00:03
that functionality or the implemented code
00:03
is there to fulfill that capability.
00:03
If you're looking at this, if you're
00:03
reading this all day,
00:03
it's a very detailed view and it's
00:03
easy to get lost and forget things.
00:03
IDA provides a pretty cool tool.
00:03
Let's take this column for instance.
00:03
Test the input command against the string
00:03
kill and it'll call this function,
00:03
which looks very simple.
00:03
We can dive into it for just a second.
00:03
It seems to test something,
00:03
two arguments that are passed into it which
00:03
It's probably testing for validity.
00:03
It's probably testing to
00:03
make sure they're not just empty strings.
00:03
If we do x, it seems like it's
00:03
called all over the place.
00:03
It's probably important that we get
00:03
this analysis out of the way.
00:03
It takes in two strings which were EAX,
00:03
the input command, and a kill.
00:03
I'm going to call this string compare.
00:03
It does a pop do you see that?
00:03
If we look at string compare, if we google that,
00:03
I'm willing to bet if we return zero,
00:03
it's the same string.
00:03
the equivalent characters until the first null byte.
00:03
I just happen to know that's
00:03
>> true because I've done this
00:03
>> before and the output is put into EAX.
00:03
Test instruction, test to see if EAX is
00:03
zero by saying EAX pop.
00:03
It jumps if it's not zero.
00:03
It continues on it's path of checking against
00:03
other commands if it is not zero.
00:03
If it is zero, it is that command,
00:03
so this logic makes a bit more sense here.
00:03
The functionality that I was telling you
00:03
that IDA does that's really cool is,
00:03
we know that this code eventually will
00:03
have a process killing
00:03
functionality built into it.
00:03
We can see here that I'm able
00:03
to kill the process with the process ID.
00:03
Process has been killed.
00:03
We can see that there's a positive and a negative to
00:03
this outcome so we know
00:03
>> what this code does. Fairly sure.
00:03
>> Something cool that we can do to get out of
00:03
the way while we're still reversing these other things,
00:03
is we hold down control and we
00:03
can select these boxes here.
00:03
We can right-click and say group nodes.
00:03
We can label it for kill process.
00:03
All these are code blocks.
00:03
Let's include this here.
00:03
Same name, kill process.
00:03
That looks pretty clean.
00:03
We can continue the same effort here.
00:03
We can look at this command above it, kill all.
00:03
We can keep going down that path.
00:03
>> Obviously, we're not catching
00:03
all the related blocks because
00:03
>> if you'll look down here,
00:03
>> there's some error conditions like,
00:03
"Oh, you didn't pass in the parameter."
00:03
This is the usage for that thing and "Oh,
00:03
unable to do it, " or "Oh, it worked."
00:03
We could group these in as well.
00:03
We can continue on this path until we
00:03
have all of these trees,
00:03
these command functionality columns, accounted for.
00:03
If we find something that's out of the
00:03
ordinary or something that doesn't make a lot of sense,
00:03
we can investigate that further.
00:03
But we can effectively group things and we don't have
00:03
such a detailed view
00:03
of what every little instruction is doing.
00:03
That's really the rabbit hole that you'll get into
00:03
when you're doing reverse engineering,
00:03
since you have such a detailed view and you can say,
00:03
"Oh, yeah, I can jump into this function.
00:03
I can completely figure
00:03
out what it's supposed to be doing and it's
00:03
really important because it's called
00:03
by all these other things.
00:03
Oh look, I can go and resolve it
00:03
again and see exactly what's going on."
00:03
It's great, but for now, determining capability.
00:03
Capability will lead to risk to your organization,
00:03
it will lead to impact,
00:03
and maybe if you're good,
00:03
it'll lead to attribution to intent,
00:03
and it will lead to you being
00:03
>> very valuable to your team.
00:03
>> Because if you have an incident,
00:03
unless your IR guy is really clever,
00:03
the malware guy is the person
00:03
that really understands what's
00:03
going on behind the scenes.
00:03
There is a trend that a lot of
00:03
bad guys are trying to avoid malware because of this.
00:03
They try to do what's called living
00:03
off the land and only doing
00:03
things that don't leave any forensic evidence,
00:03
like they drop a piece of malware
00:03
that just launches a reverse command shell.
00:03
Then they can execute
00:03
>> commands without anyone seen that.
00:03
>> But, most hackers still use
00:03
malwares and all of the
00:03
>> breaches 97 percent of the time.
00:03
>> I believe the rise in breach report
00:03
said malware was present.
00:03
Malware analysts definitely have
00:03
a job and they are definitely needed.
00:03
We went over finding
00:03
the command processing subroutines and/or
00:03
the configuration processing subroutines
00:03
because that's where you're going to find
00:03
a lot of how you can enumerate
00:03
a lot of the capabilities of a piece of malware.
00:03
While reversing, I would
00:03
>> suggest documenting everything.
00:03
>> Use good variable names,
00:03
just like as if you're writing software.
00:03
Because you're taking it apart, you're discovering it.
00:03
To fully enumerate capabilities,
00:03
I would say test the software afterwards.
00:03
As I mentioned, there are plenty
00:03
of times where malware has
00:03
had bugs or compatibility issues,
00:03
do not implement the functionality as they say they do.
00:03
Keep in mind, when you're enumerating functionality,
00:03
malware can extend its own
00:03
>> functionality by downloading,
00:03
>> executing new code,
00:03
or having some hidden feature in it that you might miss.
00:03
All those function call
00:03
all hundreds or thousands of function calls.
00:03
There could be just some instructions in there that
00:03
jump into what appears to be
00:03
data but is actually shellcode.
00:03
Even strings. Strings can be shellcode,
00:03
they can be executable x86 machine code.
00:03
I know a guy who published a black hat paper
00:03
over generating his program would write
00:03
English language shellcode so
00:03
>> that string that look like
00:03
>> a normal English string could
00:03
be executable x86 shellcode.
00:03
While you can enumerate
00:03
functionality in malware a lot of times,
00:03
keep in mind, that it can extend
00:03
its functionality and it's not a for sure thing.
00:03
Keep in mind, there's no undo in IDA.
00:03
You might be flabbergasted by that.
00:03
But seriously, if I were
00:03
to tell IDA to analyze something as data and step code,
00:03
it would break a lot of things.
00:03
In the newer versions of IDA,
00:03
you can do a snapshot of your current IDA database.
00:03
That might save you from something catastrophic,
00:03
but you might have to redo a lot of analysis.
00:03
I have messed up. My house is pretty good sometimes.
00:03
I just had to start over
00:03
because it would have been too much of a pain
00:03
to try to fix the damage I had done.
00:03
As a recap in general,
00:03
static reverse engineering, I showed this before,
00:03
but I highly suggest the IDA Pro book,
00:03
that's the unofficial version because
00:03
the developers of IDA they're
00:03
good and brilliant and they'll
00:03
respond to email very quickly.
00:03
Because they're the only,
00:03
IDA that's all they do.
00:03
If you email, they email right back,
00:03
and they're really nice and good.
00:03
They never wrote a book about how to use it.
00:03
Someone did and it's actually
00:03
>> a really good introduction
00:03
>> to not just IDA but reverse engineering in general.
00:03
Because IDA is an extremely powerful tool
00:03
and we've barely scratched the surface
00:03
of what it's capable of.
00:03
If you get the, I will want to say
00:03
>> professional version,
00:03
>> but it's actually the paid-for version
00:03
because IDA Pro is this free by default,
00:03
you can't save your analysis unless you use
00:03
an older version IDA 5 point something,
00:03
you can actually save your analysis, your IDB file.
00:03
In the newer version, you cannot
00:03
save your analysis unless you pay for it.
00:03
That's like $6,700 or something.
00:03
Do not try to crack it or torrent it.
00:03
a blacklist and they will never
00:03
>> sell your software again.
00:03
>> Or I think when you work for IDA,
00:03
I don't remember the rules on that,
00:03
but it's a big no. Don't do that.
00:03
or download, or use cracked copies.
00:03
Because the IDB files are
00:03
actually signed/encrypted, I think.
00:03
If you get a version,
00:03
a cracked version of IDA,
00:03
and you save your analysis,
00:03
your disassembly of a file,
00:03
no one else with IDA can even open that.
00:03
Because that cracked version will be
00:03
blacklisted and no other version of IDA can open it.
00:03
There are ways around it, but I wouldn't suggest it.
00:03
Another really good book for
00:03
reverse engineering is Reversing
00:03
Secrets of Reverse Engineering,
00:03
is a bit old, but it's really good. I like it a lot.
00:03
There's plenty of tutorials online out
00:03
there for reverse engineering,
00:03
a lot of tutorials and
00:03
little things are mainly built around the crack means,
00:03
which are little programs written
00:03
by reverse engineer enthusiasts to stump each other.
00:03
Those are pretty good and I also would suggest
00:03
going to past CTF websites,
00:03
Capture the Flag websites,
00:03
usually they're hacker competitions, jeopardy style,
00:03
where they choose a category and
00:03
a level and they go and try to solve the problem.
00:03
There's usually reverse
00:03
>> engineering challenges in there.
00:03
>> Where you're trying to
00:03
get a program to do something or find a vulnerability,
00:03
your decrypted string,
00:03
or whatever the case is.
00:03
Those can be excellent learning experiences.
00:03
Corkami, this website
00:03
is fantastic for explaining PE headers.
00:03
It really takes it apart and goes through the binary.
00:03
If you really want to understand
00:03
how the code is organized,
00:03
when you're looking at it, I
00:03
would definitely suggest that.
00:03
But honestly, it's not very
00:03
necessary until you get
00:03
into some of the more tricky stuff.
00:03
I would also suggest
00:03
opensecuritytraining.info from my miter.
00:03
They have an intro to x86.
00:03
other architectures like ARM and x64,
00:03
which if you get the paid-for version of IDA,
00:03
will actually not just do x86
00:03
but they'll do tons of architectures.
00:03
The most popular one being x64 and ARM,
00:03
because a lot of reverse engineers don't just
00:03
reverse engineer Windows executables.
00:03
Reverse engineer firmware from routers, from toys,
00:03
from cell phones, switches,
00:03
lots of computers that
00:03
most people don't think of as computers.
00:03
Also just say, it's good to read
00:03
the Wikipedia entries for
00:03
the x86 assembly language and
00:03
the x86 calling conventions.
00:03
They're very approachable,
00:03
they're very easy to read,
00:03
and have lots of examples.
00:03
If you really want to get into
00:03
>> writing assembly language,
00:03
>> I would suggest the Art of Assembly Language.
00:03
Other than that, that's
00:03
plenty of information for you to get started.
00:03
Hope you watch the next video.
00:03
Again, my name is Sean, and I'll catch you later.