Study/Reversing

๋ฆฌ๋ฒ„์‹ฑ ๊ธฐ์ดˆ / Hello World! ๋ฆฌ๋ฒ„์‹ฑ / ๋ฌธ์ž์—ด ํŒจ์น˜

mnzy๐ŸŒฑ 2022. 9. 12. 05:44

0. ๋ฆฌ๋ฒ„์‹ฑ์ด๋ž€? 

- ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง: ์—ญ๊ณตํ•™

 

(1) ๋ฆฌ๋ฒ„์Šค ์ฝ”๋“œ ์—”์ง€๋‹ˆ์–ด๋ง

- ์†Œํ”„ํŠธ์›จ์–ด ๋ถ„์•ผ์˜ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง

 

(2) ๋ฆฌ๋ฒ„์‹ฑ ๋ถ„์„ ๋ฐฉ๋ฒ•

  • ์ •์  ๋ถ„์„: ํŒŒ์ผ์˜ ๊ฒ‰๋ชจ์Šต์„ ๊ด€์ฐฐํ•˜์—ฌ ๋ถ„์„
    • ํŒŒ์ผ ์‹คํ–‰์—†์ด, ํŒŒ์ผ์˜ ์ข…๋ฅ˜๋‚˜ ํฌ๊ธฐ, ํ—ค๋” ์ •๋ณด ๋“ฑ์„ ํ†ตํ•ด ๋‚ด์šฉ์„ ํ™•์ธํ•œ๋‹ค
    • ๋””์Šค์–ด์…ˆ๋ธ”๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ์ฝ”๋“œ์™€ ๊ทธ ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ ๋˜ํ•œ ์ •์  ๋ถ„์„์˜ ๋ฒ”์ฃผ์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๋™์  ๋ถ„์„: ํŒŒ์ผ์„ ์ง์ ‘ ์‹คํ–‰์‹œ์ผœ, ๊ทธ ํ–‰์œ„๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋””๋ฒ„๊น…์„ ํ†ตํ•˜์—ฌ ์ฝ”๋“œ ํ๋ฆ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋“ฑ์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋Š” ๋ฐฉ๋ฒ•
    • ํŒŒ์ผ, ๋ ˆ์ง€์Šคํ† ๋ฆฌ, ๋„คํŠธ์›Œํฌ ๋“ฑ์„ ๊ด€์ฐฐํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ํ–‰์œ„๋ฅผ ๋ถ„์„ํ•œ๋‹ค
    • ๋””๋ฒ„๊ฑฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€ ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค

- ํ•„์ž๋Š” ๋จผ์ € ์ •์  ๋ถ„์„์„ ํ†ตํ•ด ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๋ฉด์„œ ์˜ˆ์ธก ํ›„ ๋™์  ๋ถ„์„ ๋ฐฉ๋ฒ•์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ํ•จ

- ๋ฆฌ๋ฒ„์‹ฑ != ๋””๋ฒ„๊น… //๋ฆฌ๋ฒ„์‹ฑ์—๋Š” ๋งŽ์€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค


1. Hello World ํ”„๋กœ๊ทธ๋žจ_ C++

//Visual Studio 2019 ์‚ฌ์šฉ

 

(1) ์‹ค์Šต์„ ์œ„ํ•œ ์˜ต์…˜ ์„ค์ • 

  • ๋ฆด๋ฆฌ์ฆˆ ๋ชจ๋“œ๋กœ ๋ณ€๊ฒฝ (๋””๋ฒ„๊น…์„ ์œ„ํ•ด์„œ)

 

  • ํ”„๋กœ์ ํŠธ > HelloWorld ์†์„ฑ > ๋ง์ปค > ๊ณ ๊ธ‰ > ์ž„์˜ ๊ธฐ์ค€ ์ฃผ์†Œ "์•„๋‹ˆ์š”"๋กœ ๋ณ€๊ฒฝ
    • ์‹œ์ž‘ํ•  ๋•Œ ๋งˆ๋‹ค ์ฃผ์†Œ๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ 

 

 

(2) HelloWorld.cpp 

//codeblocks: ์ฑ…์ด๋ž‘ ๋˜‘๊ฐ™์ด ํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ (L ์—†์• ์•ผ ํ•จ)

#include "windows.h"
#include "tchar.h"

int _tmain(int argc, TCHAR* argv[])
{

    MessageBox(NULL,L"Hello World!", L"www.reversing.com", MB_OK);

    return 0;
}

 

 

(3) ์‹คํ–‰ ํ™”๋ฉด

 

  • ์ง€์ •๋œ ๊ฒฝ๋กœ์— HelloWorld.exe ์ƒ์„ฑํ™•์ธ (๋ฆด๋ฆฌ์ฆˆ ํŒŒ์ผ์•ˆ์— ์žˆ๋Š” exe ํŒŒ์ผ ์‚ฌ์šฉ)

 

  • ์ด์ฒ˜๋Ÿผ C์–ธ์–ด ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๋ฉด, ์‹คํ–‰ํŒŒ์ผ(exe)๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ์ด ๊ณผ์ •์€ ๊ฒฐ๊ตญ ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด C์–ธ์–ด ์†Œ์Šค์ฝ”๋“œ(cpp) ๋ฅผ ๊ธฐ๊ณ„๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ๊ธฐ๊ณ„์–ด(exe)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 
  • ์ด๋Ÿฐ ๊ธฐ๊ณ„์–ด๋Š” ์‚ฌ๋žŒ์ด ๋ณด๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ํŽธํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด์„œ ๋””๋ฒ„๊ฑฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (๊ธฐ๊ณ„์–ด -> ์–ด์…ˆ๋ธ”๋ฆฌ)


2. ๋””๋ฒ„๊น… 

//immunity debugger ์‚ฌ์šฉ

 

 

(1) ๋””๋ฒ„๊ฑฐ ์‹คํ–‰ํ™”๋ฉด 

//๋งŒ์•ฝ ์œ„์™€ ๋‹ค๋ฅธ ์ฐฝ์ด ๋œฌ๋‹ค๋ฉด view > CPU ์„ ํƒ 

  • Code Window: disassembly code ํ‘œ์‹œ
    • ๊ฐ์ข… comment, label์„ ๋ณด์—ฌ์คŒ
    • ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ loop, jump ์œ„์น˜ ๋“ฑ์˜ ์ •๋ณด ํ‘œ์‹œ
  • Register Window: CPU register ๊ฐ’์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉฐ ํŠน์ • register๋“ค์€ ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•จ
  • DUMP Window: ํ”„๋กœ์„ธ์Šค์—์„œ ์›ํ•˜๋Š” memory ์ฃผ์†Œ ์œ„์น˜๋ฅผ Hex์™€ ์•„์Šคํ‚ค/์œ ๋‹ˆ ๊ฐ’์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•จ
  • Stack Window: ESP register๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ํ”„๋กœ์„ธ์Šค stack memory๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์ˆ˜์ •๋„ ๊ฐ€๋Šฅํ•จ 

 

(2) Code Window

 

  • Address(004014C0): ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์˜ ์ฃผ์†Œ 
  • Instruction(83EC 1C): IA32(๋˜๋Š” x86) CPU ๋ช…๋ น์–ด 
  • Disassembled code(SUB ESP 1C): OP code๋ฅผ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•œ ์ฝ”๋“œ //์บก์ณํ™”๋ฉด ์ฐธ๊ณ 
  • comment(*HelloWor.00401590): ๋””๋ฒ„๊ฑฐ์—์„œ ์ถ”๊ฐ€ํ•œ ์ฃผ์„  //option

3. EP (Entry Point)

  • ์œˆ๋„์šฐ ์‹คํ–‰ ํŒŒ์ผ์˜ ์‹œ์ž‘์  (์œ„ ํ™”๋ฉด์—์„œ๋Š” 0040126C)
  • CALL ๋ช…๋ น: ํ˜ธ์ถœ
  • JMP: ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์ด๋™

4. ๋””๋ฒ„๊ฑฐ ์‚ฌ์šฉ๋ฒ• 

  • Run - ๋๊นŒ์ง€ ์‹คํ–‰ : F9 
  • Step Over - ํ•˜๋‚˜์˜ OP code ์‹คํ–‰ (CALL ๋ช…๋ น์„ ๋งŒ๋‚˜๋ฉด, ๋”ฐ๋ผ ๋“ค์–ด๊ฐ€์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ํ•จ์ˆ˜ ์ž์ฒด๋ฅผ ์‹คํ–‰) :  F8
  • Step Into - ํ•˜๋‚˜์˜ OP code ์‹คํ–‰(CALL ๋ช…๋ น์„ ๋งŒ๋‚˜๋ฉด, ๊ทธ ํ•จ์ˆ˜ ์ฝ”๋“œ ๋‚ด๋ถ€๋กœ ๋”ฐ๋ผ ๋“ค์–ด๊ฐ) : F7
  • Execute till Return - ํ•จ์ˆ˜ ์ฝ”๋“œ ๋‚ด์—์„œ RETN ๋ช…๋ น์–ด๊นŒ์ง€ ์‹คํ–‰(ํ•จ์ˆ˜ ํƒˆ์ถœ ๋ชฉ์ ) : Ctrl+F9
  • Restart - ๋‹ค์‹œ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋””๋ฒ„๊น… ์‹œ์ž‘ : Ctrl+F2 

๋””๋ฒ„๊ฑฐ์˜ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ

(1) Go to [Ctrl+G]

- ์›ํ•˜๋Š” ์ฃผ์†Œ๋กœ ์ด๋™ (์ฝ”๋“œ/๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ) 

- ์‹คํ–‰๋˜๋Š” ๊ฒƒ์€ ์•„๋‹˜ 

 

(2) Execute till Cursor(F4)

- cursor ์œ„์น˜๊นŒ์ง€ ์‹คํ–‰(๋””๋ฒ„๊น…ํ•˜๊ณ  ์‹ถ์€ ์ฃผ์†Œ๊นŒ์ง€ ๋ฐ”๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์Œ)

โ€‹

(3) Comment (;)

- ์ฃผ์„(comment) ์ถ”๊ฐ€

โ€‹

(4) User-defined comment

- ๋งˆ์šฐ์Šค ์šฐ์ธก ๋ฉ”๋‰ด Search for User-defined comment

โ€‹

(4) Label(:)

- Label ์ถ”๊ฐ€ (์›ํ•˜๋Š” ์ฃผ์†Œ์— ํŠน์ • ์ด๋ฆ„ ๋ถ™์—ฌ์คŒ)

โ€‹

(5) User-defined label

- ๋งˆ์šฐ์Šค ์šฐ์ธก ๋ฉ”๋‰ด Search for User-defined label

โ€‹

(6) Set/Reset BreakPoint (F2)

- BP ์„ค์ •/ํ•ด์ œ

โ€‹

(7) Run (F9)

- ์‹คํ–‰ (BP๊ฐ€ ๊ฑธ๋ ค์žˆ์œผ๋ฉด ๊ทธ๊ณณ์—์„œ ์‹คํ–‰์ด ์ •์ง€)

โ€‹

(8) Show the current EIP (*)

- ํ˜„์žฌ EIP ์œ„์น˜๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

โ€‹

(9) Show the previous Cursor (-)

- ์ง์ „ ์ปค์„œ ์œ„์น˜๋ฅผ ๋‹ค์‹œ ๋ณด์—ฌ์ค€๋‹ค.

โ€‹

(10) Preview CALL/JMP address (Enter)

- ์ปค์„œ๊ฐ€ CALL/JMP ๋“ฑ์˜ ๋ช…๋ น์–ด์— ์œ„์น˜ํ•ด ์žˆ๋‹ค๋ฉด, ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ๋”ฐ๋ผ๊ฐ€์„œ ๋ณด์—ฌ์คŒ

- ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ์•„๋‹˜. ๊ฐ„๋‹จํžˆ ํ•จ์ˆ˜ ๋‚ด์šฉ์„ ํ™•์ธํ•  ๋•Œ ์œ ์šฉํ•จโ€‹

๋ฒ ์ด์Šค์บ ํ”„

๋””๋ฒ„๊ฑฐ๋ฅผ ์žฌ์‹คํ–‰ํ•˜๋ฉด ์ฒ˜์Œ(EP)๋ถ€ํ„ฐ ์ƒˆ๋กœ ์‹œ์ž‘ํžˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ๋ถˆํŽธํ•˜๋‹ค.

๋”ฐ๋ผ์„œ, ์ž˜ํ•˜๋Š” ๋ฆฌ๋ฒ„์„œ๋“ค์€ ๋””๋ฒ„๊น…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ค‘๊ฐ„์ค‘๊ฐ„ ์ฝ”๋“œ์—์„œ ๋ถ„์„์„ ์›ํ•˜๋Š” ์ค‘์š” ํฌ์ธํŠธ(์ฃผ์†Œ)๋ฅผ ์ง€์ •ํ•ด ๋†“์€ ํ›„ ๊ทธ ํฌ์ธํŠธ๋กœ ๋น ๋ฅด๊ฒŒ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ž˜ ๊ธฐ๋กํ•ด๋‘”๋‹ค. 

โ€‹

๋ฒ ์ด์Šค์บ ํ”„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

 

(1) Goto ๋ช…๋ น

  • ๋ฒ ์ด์Šค ์บ ํ”„ ์ฃผ์†Œ๋ฅผ ์ž˜ ๊ธฐ์–ตํ•ด๋‘์—ˆ๋‹ค๊ฐ€ Go to ๋ช…๋ น์œผ๋กœ ๊ฐ„๋‹ค

(2) BP(Break Point)

  • BP๋ฅผ ์„ค์น˜(F2)ํ•˜๊ณ , ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ //๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋จ

(3) ์ฃผ์„

  •  ; ๋‹จ์ถ•ํ‚ค๋กœ ์ฃผ์„์„ ๋‹ฌ๊ณ , ์ด ์ฃผ์„์„ ์ฐพ์•„๊ฐ„๋‹ค. 

(4) ๋ ˆ์ด๋ธ” 

  •  ์›ํ•˜๋Š” ์ฃผ์†Œ์— ํŠน์ • ์ด๋ฆ„์„ ๋ถ™์—ฌ์ฃผ๋Š” ์•„์ฃผ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด๋‹ค

5. ํ•จ์ˆ˜ ๋”ฐ๋ผ๊ฐ€๊ธฐ

๋ชฉํ‘œ: main()ํ•จ์ˆ˜์—์„œ MessageBox()ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ

 

(1) Restart 

 

(2) F8(step over)์„ ๊ณ„์† ๋ˆŒ๋Ÿฌ๋ณด๋ฉฐ main()์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค. 

 

  • ์ด ๋•Œ, Call HelloWor.wmain์„ ์‹คํ–‰ํ•˜๋ฉด ์‹คํ–‰ ์ฐฝ์ด ๋œจ๋ฏ€๋กœ F7๋กœ step into ํ•˜์—ฌ ํ™•์ธํ•˜๊ธฐ 
    • ์ด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•œ ๋ฌธ์ž์—ด ๋“ฑ์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค (์ฆ‰, main ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ๋“ค์–ด์˜ด)

 

 

 

(3) ํ™•์ธ ๋ˆ„๋ฅด๊ณ  F8 ๋ช‡ ๋ฒˆ ๋ˆ„๋ฅด๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋จ 


5. ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋นจ๋ฆฌ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•

(1) ์ฝ”๋“œ ์‹คํ–‰ ๋ฐฉ๋ฒ•

- ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ์ด ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ์— ๋ช…๋ น์–ด๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์‹คํ–‰ํ•˜๋ฉด์„œ ์›ํ•˜๋Š” ์œ„์น˜๋ฅผ ์ฐพ์•„๊ฐ„๋‹ค. 

- ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ , ๊ธฐ๋Šฅ์ด ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๊ฐ€๋Šฅ

 

(2) ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ ๋ฐฉ๋ฒ•

- ๋งˆ์šฐ์Šค ์šฐ์ธก ๋ฉ”๋‰ด -> Search for -> All referenced text string

 

(3) API ๊ฒ€์ƒ‰- ํ˜ธ์ถœ ์ฝ”๋“œ์— BP

- ์œˆ๋„์šฐ์ฆˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ชจ๋‹ˆํ„ฐ ํ™”๋ฉด์— ๋ญ”๊ฐ€๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๋ฉด Win32 API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OS์—์„œ ํ™”๋ฉด ์ถœ๋ ฅ์„ ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์ด ํ™”๋ฉด์— ๋ญ”๊ฐ€๋ฅผ ์ถœ๋ ฅํ–ˆ๋‹ค๋Š” ์–˜๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€์—์„œ Win32 API๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ์„ ๋ณด๊ณ  ์‚ฌ์šฉ๋˜์—ˆ์„๋งŒํ•œ Win32 API ํ˜ธ์ถœ์„ ์˜ˆ์ƒํ•˜์—ฌ, ๊ทธ ๋ถ€๋ถ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋””๋ฒ„๊น…์€ ๋งค์šฐ ๊ฐ„ํŽธํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. 

 

(4) API๊ฒ€์ƒ‰- API์ฝ”๋“œ์— ์ง์ ‘ BP

- ๋งˆ์šฐ์Šค ์šฐ์ธก ๋ฉ”๋‰ด-> Search for -> Name in all modules

- Ollydbg๊ฐ€ ๋ชจ๋“  ์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ API ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ชฉ๋ก์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. Packer/Protector๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํŒŒ์ผ์„ ์••์ถ•(๋˜๋Š” ๋ณดํ˜ธ)ํ•ด๋ฒ„๋ฆฌ๋ฉด, ํŒŒ์ผ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด OllyDbg์—์„œ API ํ˜ธ์ถœ ๋ชฉ๋ก์ด ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. 

- ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š”, ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(DLL ์ฝ”๋“œ)์— ์ง์ ‘ BP๋ฅผ ๊ฑธ์–ด๋ด์•ผ ํ•œ๋‹ค. API๋ผ๋Š” ๊ฒƒ์€ OS์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜์ด๊ณ , ์‹ค์ œ๋กœ API๋Š” <C:\Windows\system32> ํด๋”์— *.dll ํŒŒ์ผ ๋‚ด๋ถ€์— ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค. 

- ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ค ์˜๋ฏธ ์žˆ๋Š” ์ผ์„ ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ OS์—์„œ ์ œ๊ณต๋œ API๋ฅผ ์‚ฌ์šฉํ•ด์„œ OS์—๊ฒŒ ์š”์ฒญํ•ด์•ผ ํ•˜๊ณ , ๊ทธ API๊ฐ€ ์‹ค์ œ ๊ตฌํ˜„๋œ ์‹œ์Šคํ…œ DLLํŒŒ์ผ๋“ค์€ ์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์˜ ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋”ฉ ๋˜์–ด์•ผ ํ•œ๋‹ค. 

 


6. "Helloworld" ๋ฌธ์ž์—ด ํŒจ์น˜ 

๋ชฉํ‘œ: ๋ฉ”์‹œ์ง€ ๋ฐ•์Šค์— ํ‘œ์‹œ๋˜๋Š” "Hello World!" ๋ฌธ์ž์—ด์„ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ

๋ฌธ์ž์—ด์„ ํŒจ์น˜ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

  1. ๋ฌธ์ž์—ด ๋ฒ„ํผ๋ฅผ ์ง์ ‘ ์ˆ˜์ •
  2. ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒˆ๋กœ์šด ๋ฌธ์ œ์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ์ „๋‹ฌ

 

(1) ๋ฌธ์ž์—ด ๋ฒ„ํผ๋ฅผ ์ง์ ‘ ์ˆ˜์ •

//์ด ๋ฐฉ๋ฒ•์€ ์ „์ฒด ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ

 

- ๋คํ”„ ์ฐฝ์—์„œ Goto ๋ช…๋ น์œผ๋กœ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋˜์–ด์žˆ๋Š” ์ฃผ์†Œ์ธ 00402124 ์ฃผ์†Œ๋กœ ์ด๋™ 

  • <๋คํ”„> ์ฐฝ์—์„œ ctrl + g ํ•ด์„œ ํ•ด๋‹น ์ฃผ์†Œ๋กœ ์ด๋™ 

 

ctrl + e ๋‹จ์ถ•ํ‚ค๋ฅผ ํ†ตํ•ด Edit ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ๋„์šด๋‹ค.

  • keep size ํ•ด์ œ
  • ์œ ๋‹ˆ์ฝ”๋“œ์— "Hello Reversing" ์ž…๋ ฅ -> OK

 

//์œ ๋‹ˆ์ฝ”๋“œ์˜ ๋ฌธ์ž์—ด์€ 2๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ NULL๋กœ ๋๋‚˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•ด์•ผ ํ•จ 

 

ํŒจ์น˜ ์„ฑ๊ณต

 

 

- ํŒŒ์ผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ

  •  ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ ์˜๊ตฌ ๋ณด๊ด€์„ ์œ„ํ•œ ๊ฒƒ (๋””๋ฒ„๊ฑฐ ์ข…๋ฃŒํ•˜๋ฉด ํŒจ์น˜ํ–ˆ๋˜ ๋‚ด์šฉ ์‚ฌ๋ผ์ง)
  • dump์ฐฝ์—์„œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„ ์„ ํƒ ํ›„ ๋งˆ์šฐ์Šค ์šฐ์ธก -> Copy to executable file -> Hex ์ฐฝ ๋‚˜ํƒ€๋‚˜๋ฉด ๋งˆ์šฐ์Šค ์šฐ์ธก -> Save file ์„ ํƒ ํ›„ ์ €์žฅ 

 

(2) ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•˜์—ฌ ์ „๋‹ฌ 

๋ ์ชฝ ๋นˆ ์นธ ์ ๋‹นํ•œ ๊ณณ(Null Padding)์— ๋ฌธ์ž์—ด ์ž…๋ ฅํ•ด์ฃผ๊ธฐ 

  • ๋ฌธ์ž์—ด์€ 00403090์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. 

 

์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•œ ๋ฒ„ํผ ์ฃผ์†Œ(403090)๋ฅผ MessageBoxW ํ•จ์ˆ˜์— ๋„˜๊ฒจ์ค€๋‹ค.

 

ํŒจ์น˜ ์„ฑ๊ณต