Jump to content
Tuts 4 You
Vetalll

Start learning RE. Where to start ?

Recommended Posts

Vetalll

Helllo everybody. I am new here and I hope will stay here for a long time...

I have experiance in Software development about 10 years. My Primary Language Java (Android), Kotlin, Python and C#.  
I decided to start learning RE.  So I know what is debugging,jave some understanding between de-compiling and disassembling. 

The question is where to start ? I found lot of info in youTube and internet but they are very old for Windows XP or semething like this. 

My Main interest is Reverse some MMO game and write Emulator for it (At least try).  I have experiance working with Lineage (just server side, Not RE).
And here a first question. Where to start learning? Should I do some codding tasks or should i start wotk with game ? I know that Games coud be protected by Themida or VM protect. Is it a problem?

Edited by Vetalll (see edit history)

Share this post


Link to post
NOP

Don't try packed / protected programs or you will be trying to learn 2 things at the same time and you probably wouldn't be able to tell what's packed or unpacked until you have a little experience

Start with Lenas RE Tutorial and also maybe some simple crackmes or simple tutorials with known software versions where you can follow exactly

There is lots of info and tutorials right here in the forums or forums download section :D

Share this post


Link to post
NOP
5 hours ago, Vetalll said:

Is it ok to try some crack me from this forum ?

Yes there are lots here for all levels from beginner to advanced

5 hours ago, Vetalll said:

Are you talking about this Leans tutorials? 

Yes that's it :D

Share this post


Link to post
Vetalll

Hello My friends. I passed successfully 4 Lessons from Lena's tutorials and I faced 1 small and tricky things.

On Lesson 5 Lena have used Hardware breakpoint in system dll  (MFC42.dll) .  instead of usual CPU breakpoint. 

The question: How to determine when to use Hardware breakpoint?  Is it possible to use CPU breakpoint? 

@NOP

Bro, Could you help me?

Share this post


Link to post
Am4t3uR

Hi.

You can use both but here are some infos you should keep on mind: 
Hardware breakpoints are limited to 4, and depends on CPU.  Usually you set  a HWBP to see/check, if a specific address is going to be read/written/accessed or executed.
A software breakpoint is created by the debugger and actually is a special opcode, that overwrites (temporarily) the first byte of the specific instruction -where you set the BP- so the debugger stops there.


That's more or less, in a simple way. I hope that helped :)

Edited by Am4t3uR (see edit history)

Share this post


Link to post
Vetalll
17 hours ago, Am4t3uR said:

Hi.

You can use both but here are some infos you should keep on mind: 
Hardware breakpoints are limited to 4, and depends on CPU.  Usually you set  a HWBP to see/check, if a specific address is going to be read/written/accessed or executed.
A software breakpoint is created by the debugger and actually is a special opcode, that overwrites (temporarily) the first byte of the specific instruction -where you set the BP- so the debugger stops there.


That's more or less, in a simple way. I hope that helped :)

Thanks for short explanation. But anyway I didn't get when to use HW BP.  Nevermind. I hope I will get it later. Will try to find some manual about it.. 

Thanks 1 more time..

Share this post


Link to post
kao

If you are just starting with RE, don't worry about it and stick to software breakpoints. Once you start doing more advanced stuff, you'll know more about the limitations and then it will start to make sense..

As for your question, Lena actually explains the reasons for using hardware breakpoint in that specific case: https://youtu.be/oWh16FVKS5E?list=PLcFUp5WYCxVYeR7AgsmjzGW6PjamaY6JO&t=907  (see lower right box).

 

 

Share this post


Link to post
Vetalll

As I understood. We need to use HW BP in case when we try to do it systems dll( or another systems files).

Am I right ?

Share this post


Link to post
Dark_Bull
1 hour ago, Vetalll said:

As I understood. We need to use HW BP in case when we try to do it systems dll( or another systems files).

Am I right ?

Да Господи, пока ты не начнешь практиковаться, ты не поймешь в чем различие хардеврных и софтверных бряков. Аппаратные хороши тем, что их можно ставить в ОКНЕ ДАМПА на запись/чтение/выполнение. Сейчас объясню...

Запись - это когда ты ставишь бряк на запись, например, на адрес 0x0000000000CCB000, то отладчик остановится на том месте + 1 инструкция, где произошла ЗАПИСЬ БАЙТА(в данном случае) на этот адрес

Spoiler

write.jpg.ef7f40a78e625e30c4f7eeb5a95787ee.jpg

Чтение - это когда какая-то asm-иснтрукция пытается ЧИТАТЬ ЗНАЧЕНИЕ ПО АДРЕСУ, например, при сравнении (cmp byte[0x0000000000CCB000], 1)

Видишь, что если ты поставишь бряк аппаратный на чтение на адрес 0x0000000000CCB000, и у тебя выполнится инструкция эта, то отладчик остановится на след. инструкции, и ты будешь находится в том месте, где это сравнение произошло.

Выполнение - это можно сказать, обычный программный брякпоинт, но фишка в том, что некоторые протекторы проверяют только программные брейкпоинты, а аппаратные не видят, поэтому можно ими ставить точки останова. Т.е. аналог программным, но чуть круче, единственное - их можно ставить только 4 штуки)) Также их можно отследить по специальным служебным регистрами процессора(т.к. они процессорные). Снизу на картинке можно увидеть, в какие регистры они записываются(адреса остановки аппаратных точек, куда ты их поставил)

Spoiler

1211226007_2DR.png.2f23b845cb91972f1d5747fe4760226b.png

Также можно еще ставить аппаратные на память.

Spoiler

menubreakpoints.png.ba3c475652e63c0bb41309f609a2a72e.png

Но с этим тебе придется разобраться самому. Все есть в интернете, нужно уметь искать. Удачи!

 

Edited by Dark_Bull
fixed (see edit history)

Share this post


Link to post
Vetalll
On 1/31/2020 at 9:59 PM, Dark_Bull said:

Да Господи, пока ты не начнешь практиковаться, ты не поймешь в чем различие хардеврных и софтверных бряков. Аппаратные хороши тем, что их можно ставить в ОКНЕ ДАМПА на запись/чтение/выполнение. Сейчас объясню...

Запись - это когда ты ставишь бряк на запись, например, на адрес 0x0000000000CCB000, то отладчик остановится на том месте + 1 инструкция, где произошла ЗАПИСЬ БАЙТА(в данном случае) на этот адрес

  Hide contents

write.jpg.ef7f40a78e625e30c4f7eeb5a95787ee.jpg

Чтение - это когда какая-то asm-иснтрукция пытается ЧИТАТЬ ЗНАЧЕНИЕ ПО АДРЕСУ, например, при сравнении (cmp byte[0x0000000000CCB000], 1)

Видишь, что если ты поставишь бряк аппаратный на чтение на адрес 0x0000000000CCB000, и у тебя выполнится инструкция эта, то отладчик остановится на след. инструкции, и ты будешь находится в том месте, где это сравнение произошло.

Выполнение - это можно сказать, обычный программный брякпоинт, но фишка в том, что некоторые протекторы проверяют только программные брейкпоинты, а аппаратные не видят, поэтому можно ими ставить точки останова. Т.е. аналог программным, но чуть круче, единственное - их можно ставить только 4 штуки)) Также их можно отследить по специальным служебным регистрами процессора(т.к. они процессорные). Снизу на картинке можно увидеть, в какие регистры они записываются(адреса остановки аппаратных точек, куда ты их поставил)

  Hide contents

1211226007_2DR.png.2f23b845cb91972f1d5747fe4760226b.png

Также можно еще ставить аппаратные на память.

  Hide contents

menubreakpoints.png.ba3c475652e63c0bb41309f609a2a72e.png

Но с этим тебе придется разобраться самому. Все есть в интернете, нужно уметь искать. Удачи!

 

Спасибо за объяснение. 

Я в процессе изучения.  У меня получится 

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...