Jastes 2022. 5. 16. 21:03

๋ถ„์„(Export)!

์˜ˆ์ œ๋กœ HelloWorld.exe๋ฅผ ๋ถ„์„ํ•ด๋ณด๋Š” ์‹ค์Šต์„ ํ•ด๋ด…์‹œ๋‹ค.

 

์˜ˆ์ œ์—” 1์ดˆ๋ฅผ ๋Œ€๊ธฐ ํ›„ Hello, world!๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ์˜ค๋ฅธ์ชฝ์—์„œ ๋‚ด๋ ค๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ๋ถ„์ด ์ง์ ‘ ์ปดํŒŒ์ผํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋„ ์นœ์ ˆํžˆ ์˜ฌ๋ ค์•ผ์ฃ 

 

์šฐ๋ฆฌ๋Š” ์ด ์ฝ”๋“œ์— ๋Œ€ํ•˜์—ฌ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅธ๋‹จ ์ „์žฌํ•˜์— ์ง„ํ–‰ํ•ด์•ผ ๋ฆฌ๋ฒ„์‹ฑ์ด๊ฒ ์ฃ 
์ž ๊ทธ๋Ÿผ ํ•œ๋ฒˆ ๋ฐ‘์— exe ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ฑฐ๋‚˜ ์ปดํŒŒ์ผ ํ•˜์…”์„œ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค ์ฐธ๊ณ ๋กœ ์ „ IDA ์“ธ๊ฑฐ์˜ˆ์š”

/*
    File: hello-world.cpp
    Build opts:
      - /MT -> Library Static Linking
      - /DYNAMICBASE:NO -> Disable ASLR
      - /od -> Disable Optimization
*/
 
#include <Windows.h>
#include <stdio.h>
 
char* str;
int main() {
  int delay = 1000;
  Sleep(delay);  // 1000ms(1์ดˆ)๋ฅผ ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  str = (char*)"Hello, world!\n";
  printf(str);
 
  return 0;
}
  • HelloWorld ์ •์  ๋ถ„์„
  • HelloWorld ๋™์  ๋ถ„์„

HelloWorld.exe

์ž์„ธํ•œ ์‚ฌ์šฉ๋ฒ•์€ ๊ท€์ฐฎ๊ธฐ๋„ ํ•˜๊ณ  ์•ต๊ฐ„ํ•ด์„  ๋ฐ”๋กœ ์•„์‹ค๊ฑฐ๋‹ˆ๊นŒ ์ด๋ฏธ์ง€๋กœ ๋Œ€์ฒด ํ•˜๋„๋ก ํ•˜์ฃ 


์ •์  ๋ถ„์„

์‹คํ–‰ ํ›„ ๋Œ์–ด์˜จ ํ›„ ์•„๋ฌด๊ฒƒ๋„ ๊ฑด๋“ค์ง€ ๋ง๊ณ  ์‹คํ–‰

์ •์  ๋ถ„์„์€ ์ฃผ๋กœ mainํ•จ์ˆ˜๋ฅผ ์ฐพ๊ณ , ์ด๋ฅผ ๋ถ„์„ํ•˜๋ฉฐ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
์ด ์˜ˆ์ œ์—” IDA๊ฐ€ ์ด๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„์ฃผ์ง€๋งŒ ์ต์ˆ™ํ•ด์งˆ๊ฒธ ๋„์›€ ์—†์ด ์ฐพ์•„๋ณด์•„์•ผ๊ฒ ์ฃ 

 

๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜๋‚˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘ ์ง€์ ์ธ ์ง„์ž…์ (Entry Point;EP)๋ถ€ํ„ฐ ๋ถ„์„์„ ์‹œ์ž‘ํ•ด ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๊ณ ,
๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋Œ€์ƒ ํ•จ์ˆ˜์˜ ํŠน์„ฑ์ด๋‚˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์—ฌ๋Ÿฌ ์™ธ์ ์ธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

์ „์ž๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ๊ทœ๋ชจ๊ฐ€ ์ข€๋งŒ ์ปค์ ธ๋„ ๋ถ„์„์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ด ๊ธ‰์ฆํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋ก  ์ ์šฉ์ด ์–ด๋ ต์ฃ 
๊ทธ๋ž˜์„œ ์—ฌ๊ธด ํ›„์ž์˜ ๋ฐฉ์‹์œผ๋กœ main ํ•จ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•ด๋ณด์•„์š”

 

์ง„์ž…์ ๋ถ€ํ„ฐ mainํ•จ์ˆ˜๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ •์ ์œผ๋กœ ๋ถ„์„ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์€ ๋ถ„์„ ๊ฒฝํ—˜!!


๋ฌธ์ž์—ด ๊ฒ€์ƒ‰๐Ÿ”

ํ”„๋กœ๊ทธ๋žจ์„ ์ •์  ๋ถ„์„ํ•  ๋•Œ, ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ •๋ณด ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์— ํฌํ•จ๋œ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

 

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

 

IDA๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ์— ํฌํ•จ๋œ ๋ฌธ์ž์—ด์„ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก "๋ฌธ์ž์—ด ํƒ์ƒ‰" ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜์— ์ด๋ฏธ์ง€๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด

01

  1. Shift + F12๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์— ํฌํ•จ๋œ ๋ฌธ์ž์—ด์ด ์—ด๊ฑฐ๋œ Strings ์ฐฝ์ด ๋œธ
  2. ๋ฌธ์ž์—ด ์ค‘ 'Hello, world!' ๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    - ์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๋‹ค์–‘ํ•œ ๋ฌธ์ž์—ด์ด ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์ถ”๊ฐ€๋˜๋‚˜ ์ด ๋ฌธ์ž์—ด์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋„ฃ์€ ๊ฒƒ์œผ๋กœ ์ถ”์ธก ๊ฐ€๋Šฅ
  3. ์ด ๋ฌธ์ž์—ด์„ ๋”๋ธ” ํด๋ฆญ(or Curl+P)ํ•ด ๋”ฐ๋ผ๊ฐ‘์‹œ๋‹ค.

์ƒํ™ฉ ์ฐธ์กฐ๐Ÿ”€

์ •์  ๋ถ„์„์„ ํ•˜๋‹ค๊ฐ€ ์—ฌ๋Ÿฌ ์ด์œ (Ex. ์ˆ˜์ƒํ•œ ๊ฐ’์ด๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ๋•Œ)๋กœ ์ฐธ์กฐํ•  ํ•จ์ˆ˜๋ฅผ ๋ถ„์„ํ•  ๋•Œ,
๋งŽ์€ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋“ค์€ ์ƒํ™ฉ ์ฐธ์กฐ(Cross Reference; XRef)๋ผ๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์•ž์—์„œ ์ฐพ์€ "Hello, world!\n"๋ผ๋Š” ์ˆ˜์ƒํ•œ ๋ฌธ์ž์—ด์„ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค

"aHelloWorld"๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ƒํ˜ธ ์ฐธ์กฐ์˜ ๋‹จ์ถ•ํ‚ค X๋ฅผ ๋ˆ„๋ฅด๋ฉด ์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ xrefs ์ฐฝ์ด ๋œน๋‹ˆ๋‹ค.
์ด ์ฐฝ์—๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋“  ์ฃผ์†Œ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

 

์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ํด๋ฆญํ•ด ์ด๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉด.. ์ €๋Š” sub_..+16์ด๋ผ๊ณ  ๋œจ๋Š”๋ฐ..
dreamhack์—์„  main์œผ๋กœ ๋œจ๋Š” ๊ฑธ ๋ณด์•„ ์ฐจ์ด๊ฐ€ ์•ฝ๊ฐ„์”ฉ ์žˆ๋‚˜๋ด์š”(main์ด๋ผ.. ๊ทธ๋Ÿด ์ผ์ด ์—†์ง€๋งŒ.. ์™œ์ฃ ?)

๐Ÿ’ก main ํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•

 ์ผ๋ฐ˜์ ์œผ๋กœ main ํ•จ์ˆ˜๋Š” C๊ณ„์—ด ์–ธ์–ด์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ ์ค‘ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰ ํ•จ์ˆ˜!
๋ฆฌ๋ฒ„์‹ฑ์„ ์ฒ˜์Œ ํ•˜์‹œ๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ mainํ•จ์ˆ˜๋ผ ์ฐฉ๊ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ
OS๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋ช…์‹œ๋œ EP๋กœ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰, ์ผ๋ฐ˜ํ™” ์˜ค๋ฅ˜ ์ฃผ์˜!


 ์ง„์ž…์ ๊ณผ mainํ•จ์ˆ˜์˜ ์‚ฌ์ด๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒƒ์€ ์ปดํŒŒ์ผ๋Ÿฌ์˜ ๋ชซ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‘˜ ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ํ™˜๊ฒฝ์„ ๋จผ์ € ๊ตฌ์„ฑํ•˜๊ณ , ๊ทธ ๋’ค์— mainํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ฃ . ํ•ด์„œ ์ง„์ž…์ ์— ์œ„์น˜ํ•˜๋Š” ํ•จ์ˆ˜(์ž„์˜๋กœ start ํ•จ์ˆ˜)์— mainํ•จ์ˆ˜๋ฅผ ์ฐพ์„๋ผ๋ฉด ๋งŽ์€ ํ™•์ธ์ด ํ•„์š”ํ•˜๋ฉฐ ์ง์ ‘ํ•ด๋ณด๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ๊ฑธ ์ถ”์ฒœ!

main ํ•จ์ˆ˜ ๋ถ„์„ by ์ •์  ๋ถ„์„

์ด์ œ mainํ•จ์ˆ˜๋ฅผ ์ฐพ์•˜์œผ๋‹ˆ, F5(๋””์ปดํŒŒ์ผ)ํ•˜์—ฌ ํ•จ์ˆ˜์˜ ์ฃผ์š” ์ •๋ณด๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค.
ํ•˜์ง€๋งŒ ์ „.. mainํ•จ์ˆ˜๋กœ ์•ˆ ๋œจ๋ฏ€๋กœ ์„ค๋ช…๋งŒ ํ•ด์•ผ๊ฒ ๋„ค์š” ใ… 

์ธ์ž ๋ถ„์„์„ ํ•˜๋ฉด IDA๋Š” argc, argv, envp๋กœ 3๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

  1. Sleepํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ 1์ดˆ ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  2. qword_14001DBE0์— “Hello, world!\n” ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค.
  3. sub_140001060์— “Hello, world!\n” ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜์—ฌ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  4. 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

sub_140001060 ํ•จ์ˆ˜ ๋ถ„์„

์ด ํ•จ์ˆ˜์˜ ๋””์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋จผ์ € va_start ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ€๋ณ€ ์ธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
sub_1400...2E28(1u)๋ฅผ ๋ถ„์„ํ•˜๋ฉด ์ธ์ž์ธ a1๋ฅผ ๋ฐ›์•„๋“œ๋ ค ์ŠคํŠธ๋ฆผํ•˜๋Š” ํ•จ์ˆ˜๋กœ
๋ฐ˜ํ™˜ํ•˜๊ธฐ์— ์ธ์ž๋กœ 1์ด ๋“ค์–ด๊ฐ€ stdout์„ ์˜๋ฏธ

 

๋”ฐ๋ผ์„œ ๋ฌธ์ž์—ด ์ธ์ž๋ฅผ ๋ฐ›๊ณ  stdout ์ŠคํŠธ๋ฆผ์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€๋ณ€ ํ•จ์ˆ˜!!
์ด ๋ชจ๋“  ์ •ํ™ฉ์„ ํ†ตํ•ด sub_140..1010์€ ๋ฐ˜ํ™˜์„ ํ•˜๋ฏ€๋กœ printf ํ•จ์ˆ˜๋กœ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

๐Ÿ’ก์ŠคํŠธ๋ฆผ(Stream)์ด๋ž€?

๋ฐ์ดํ„ฐ๊ฐ€ ์กฐ๊ธˆ์”ฉ ํ˜๋Ÿฌ๋“ค์–ด์˜จ๋‹ค๋Š” ์˜๋ฏธ๋กœ ๋ช…๋ช…๋จ
๋ฐ์ดํ„ฐ๋Š” ์ŠคํŠธ๋ฆผ์˜ ํ˜•์‹์œผ๋กœ ํ•œ ํ”„๋กœ์„ธ์Šค → ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ, ๋˜๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค → ํŒŒ์ผ ๋“ฑ์œผ๋กœ ์ด๋™
 OS๋Š” stdin(Standard input), stdout(Standard output), stderr(Standard error)
์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ์ŠคํŠธ๋ฆผ๋“ค์„ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ User์™€ ํ”„๋กœ์„ธ์Šค ์—ฐ๊ฒฐ


 printf ํ•จ์ˆ˜(= stdout์„ ํ†ตํ•ด)์œผ๋กœ, scanf ํ•จ์ˆ˜(= stdin์„ ํ†ตํ•ด) ํ”„๋กœ์„ธ์Šค์— ์ „๋‹ฌํ•ด์คŒ
์ด๋Ÿฐ ๊ธฐ๋ณธ ์ŠคํŠธ๋ฆผ์™ธ์—, ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ํ•„์š”์— ๋”ฐ๋ผ ์ƒ์„ฑ ๊ฐ€๋Šฅ!


Ex)dream.txt๋ผ๋Š” ํ…์ŠคํŠธํŒŒ์ผ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์ด ํŒŒ์ผ๊ณผ ์ŠคํŠธ๋ฆผ ํ˜•์„ฑ ๋‚ด์šฉ ์ž‘์„ฑ 

mainํ•จ์ˆ˜ ๋ถ„์„ by ๋™์  ๋ถ„์„

์ด๋ฒˆ์—” ์•ž์—์„œ ๋ถ„์„ํ•œ ๋‚ด์šฉ์„ ๋™์  ๋ถ„์„์œผ๋กœ ์‚ดํŽด๋ด…์‹œ๋‹ค
์ •์  ๋ถ„์„์—์„œ ํ–ˆ๋˜ ๊ฒƒ์„ ์ž˜ ์ƒ๊ฐํ•ด๋ณด๊ณ  ํ•ด๋ณผ๊นŒ์š”


์ค‘๋‹จ์  ์„ค์ •(Break Point, F2) ๋ฐ ์‹คํ–‰(Run, F9)

๋™์  ๋ถ„์„์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์šฐ๋ฆฌ๋Š” ๋Œ€๊ฐœ ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ ์ค‘ ์•„์ฃผ
์ผ๋ถ€๋ถ„์˜ ๋™์ž‘์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ๊ธฐ์— ํŠนํžˆ ์—ฌ๊ธฐ ์˜ˆ์ œ์—์„  mainํ•จ์ˆ˜๊ฒ ์ฃ .

 

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

01

  1. main ํ•จ์ˆ˜์— ์ค‘๋‹จ์ ์„ ์„ค์ •(F2)
  2. ๋””๋ฒ„๊น… ์‹œ์ž‘ํ•ด mainํ•จ์ˆ˜๊นŒ์ง€ ์‹คํ–‰(๋””๋ฒ„๊น… ์‹คํ–‰; F9)
    - ๋””๋ฒ„๊ฑฐ๋ฅผ ๊ณ ๋ฅด๋ผ๋Š” ์ฐฝ์ด ๋œจ๋ฉด Local Windows debugger๋ฅผ ์„ ํƒํ•ด์š”
  3. ๋™์  ๋ถ„์„์„ ์œ„ํ•œ ์ค€๋น„ ๋

ํ•œ ๋‹จ๊ณ„ ์‹คํ–‰(Step Over, F8)

์•ž์„œ ์‚ดํŽด๋ณธ ์ค‘๋‹จ์ ๊ณผ ์‹คํ–‰์ด ํ•„์š”ํ•œ ์‹คํ–‰ ๊ณผ์ •์„ ์ƒ๋žตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋ฉด, Step Over(F8)์€ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋ถ€๋ถ„์˜
์ฝ”๋“œ๋ฅผ ์ •๋ฐ€ํ•˜๊ฒŒ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ F8์„ ๋ˆ„๋ฅด๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ๋™์ž‘ ๋ถ„์„ ใ„ฑ

  1. sub rsp, 38์„ ํ†ตํ•ด mainํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•  ์Šคํƒ ์˜์—ญ ํ™•๋ณด
  2. rsp+0x20์— 4byte ๊ฐ’์ด 0x000003e8์„ ์ €์žฅ
  3. rsp+0x20์— ์ €์žฅ๋œ ๊ฐ’์„ ecx์— ์˜ฎ๊น€, ์ด๋Š” ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ!
  4. Sleepํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ; ecx๊ฐ€ 0x3e8์ด๋ฏ€๋กœ, Sleep(1000)์ด ์‹คํ–‰๋˜์–ด 1์ดˆ๊ฐ„ ์‹คํ–‰์ด ๋ฉˆ์ถค


  5. “Hello, world!\n” ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๋ฅผ rax์— ์˜ฎ๊น€
  6. ์•„๋ž˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๋คํ”„ ์ฐฝ์„ ์ด์šฉํ•˜์—ฌ 0x14001a140์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ฉด ์‹ค์ œ๋กœ ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ์ €์žฅ๋จ
  7. rax์˜ ๊ฐ’์„ data์„ธ๊ทธ๋จผํŠธ์˜ ์ฃผ์†Œ์ธ 0x14001dbe0์— ์ €์žฅ
  8. 0x14001dbe0์— ์ €์žฅ๋œ ๊ฐ’์„ rcx์— ์˜ฎ๊น€; ์ด๋Š” ๋‹ค์Œ ํ˜ธ์ถœํ•  ํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ž๋กœ ์‚ฌ์šฉ๋จ


  9. 0x140001060ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ; ์šฐ๋ฆฌ๋Š” ์ •์  ๋ถ„์„์„ ํ†ตํ•ด ์ด ํ•จ์ˆ˜๋ฅผ printfํ•จ์ˆ˜๋ผ๊ณ  ์ถ”์ธกํ–ˆ์ฃ 
  10. ํ”„๋กœ๊ทธ๋žจ์„ ํ™•์ธํ•˜๋ฉด Hello, world!๊ฐ€ ์ถœ๋ ฅ๋จ ๋™์  ๋ถ„์„์€ ์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ ์‰ฝ๋‹ค
  11. ์‹œ์ž‘ํ•  ๋•Œ ํ™•์žฅํ•œ ์Šคํƒ ์˜์—ญ์„ add rsp, 38์„ ํ†ตํ•ด ๋‹ค์‹œ ์ถ•์†Œํ•˜๊ณ , ret๋กœ ์›ํ•ด ์‹คํ–‰ ํ๋ฆ„์œผ๋กœ ใ„ฑ

ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ง„์ž…ํ•˜๊ธฐ(Step Into, F7)๐Ÿคฟ

์•ž์˜ Step Over๋ฅผ ์ž์„ธํžˆ ๊ด€์ฐฐํ–ˆ๋‹ค๋ฉด Step Over๊ฐ€ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ์ ‘๊ทผ์„ ์•ˆํ–ˆ์ฃ 
ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๊นŒ์ง€ ์ •๋ฐ€ํ•˜๊ฒŒ ๋ถ„์„ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ์ฃ ..

 

๋งŽ์€ ๋””๋ฒ„๊ฑฐ๋Š” ๊ทธ๋Ÿฐ ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•˜์—ฌ Step Into(F7)๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋ฒˆ์—” printf()์— ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•˜๊ณ ,ํ•ด๋‹น ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๋กœ ์ง„์ž…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

01

  1. ๋””๋ฒ„๊น…์„ ์ค‘๋‹จ(Ctrl-F2)ํ•˜๊ณ , printf๋ฅผ ํ˜ธ์ถœํ•˜๋Š” 0x14000110b์— ์ค‘๋‹จ์ ์„ ์„ค์ •
  2. ๋””๋ฒ„๊น…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ , Continue(F9)๋ฅผ ํ•˜์—ฌ, printfํ•จ์ˆ˜์— ๋„๋‹ฌ
  3. F7 ๋‹จ์ถ•ํ‚ค๋ฅผ ํ†ตํ•ด ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€ ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ RIP๊ฐ€ ์ด๋™ํ•œ ๊ฒƒ์„ ํ™•์ธ ๊ฐ€๋Šฅ

Appendix, ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์กฐ์ž‘ํ•˜๊ธฐ

IDA๋ฅผ ์ด์šฉํ•˜๋ฉด ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Sleep Forever

๊ธฐ์กด ์ฝ”๋“œ์—์„œ๋Š” Sleep(delay=1000)์„ ํ˜ธ์ถœํ•ด 1์ดˆ ๋™์•ˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์ง€์‹œ์ผฐ์ฃ .
์ด๋ฒˆ์—” delay ๊ฐ’์„ 1000000์œผ๋กœ ์กฐ์ž‘ํ•ด 1000์ดˆ ๋™์•ˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์ง€์‹œ์ผœ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

01234

  1. delay๋ฅผ Sleepํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ถ„์— ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค๋ฅผ ์žฌ์‹œ์ž‘
  2. ์Šคํƒ์„ ๋ณด๋ฉด rsp+0x20์— delay์˜ ๊ฐ’์ธ 0x3e8์ด ์ €์žฅ๋จ
  3. ํ•ด๋‹น ๊ฐ’์„ ํด๋ฆญํ•ด, F2๋ฅผ ๋ˆ„๋ฅธ ๋’ค 0xf4240(1000000) ์ž…๋ ฅ/ delay์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ
  4. ์ด์ œ F9๋ฅผ ๋ˆŒ๋Ÿฌ์„œ Sleepํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ์•„๋งˆ ๋Œ€๋žต 20๋ถ„ ์ •๋„ ๊ธฐ๋‹ฌ๋ ค์•ผ ํ”„๋กœ์„ธ์Šค ์žฌ๊ฐœ๋จ

์—ฌ๊ธฐ์„  ๊ฒฐ๊ณผ๋ฅผ ์ฒด๊ฐํ•˜๊ธฐ ์‰ฝ๊ฒŒ ํ•ด๊ธฐ ์œ„ํ•ด Sleepํ•จ์ˆ˜์˜ ์ธ์ž๋ฅผ ์กฐ์ž‘ํ–ˆ์ง€๋งŒ,
์‹ค์ œ๋ก  ์–ด๋–ค ํ•จ์ˆ˜์˜ ๋™์ž‘์„ ๋ชจ๋ฅผ ๋• ์ธ์ž๋ฅผ ์ ์ ˆํžˆ ์กฐ์ž‘ํ•ด ํ•จ์ˆ˜์˜ ๋™์ž‘๊ณผ ์ธ์ž์˜ ์—ญํ• ๋“ค์„ ์œ ์ถ”!

 

์ฐธ๊ณ ๋กœ ์˜คํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ด ์žˆ๊ธฐ์— ์•„๋ž˜ Q&A์— ์˜ฌ๋ฆฐ ์งˆ๋ฌธ ๋งํฌ ๋‹ฌ์•„๋“œ๋ฆด๊ป˜์š”
rdi rsi rdx rcx r7.. ๋ญ ์ด๋Ÿฐ ์ธ์ž์— ์žˆ์–ด์„œ Sleep์— ์™œ ecx๋ƒ ๋ผ๋Š” ์งˆ๋ฌธ์ธ๋ฐ ์•„๋ฌด๋ž˜๋„ ๋ฆฌ๋ˆ…์Šค๋ž‘ ์œˆ๋„์šฐ๋Š”..

 

Sleep()์ธ์ž๋กœ ecx๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

`rsp+0x20์— ์ €์žฅ๋œ ๊ฐ’์„ ecx์— ์˜ฎ๊น๋‹ˆ๋‹ค. ์ด๋Š” ํ•จ์ˆ˜์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Sleepํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ecx๊ฐ€ 0x3e8์ด๋ฏ€๋กœ, Sleep(1000)์ด …

dreamhack.io


์ฝ”๋“œ ์š”์•ฝ๐Ÿ“

์ด๋ฒˆ ์ฝ”์Šค์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ธ HelloWorld.exe๋ฅผ IDA๋กœ ๋ถ„์„ํ•ด๋ณด๋Š” ์‹ค์Šต์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
์‹ค์Šต์„ ํ†ตํ•ด IDA์— ์ข€ ๋” ์ต์ˆ™ํ•ด์ง€๊ณ , ๋™์  ๋ถ„์„๊ณผ ์ •์  ๋ถ„์„์˜ ์ฐจ์ด๋ฅผ ๋Š๊ปด ๋ณด์…จ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  • BreakPoint(F2): ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น ์ง€์ ์— ๋„๋‹ฌํ•˜๋Š” ์ˆœ๊ฐ„ ์ •์ง€
  • Restart(Ctrl + F2): ๋””๋ฒ„๊น…์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • Run(F9): ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์† ์‹คํ–‰, ๋˜๋Š” ๋””๋ฒ„๊น…์„ ์‹œ์ž‘
  • Step Into(F7): ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ์‹คํ–‰ํ•จ /ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด๋ผ๋ฉด, ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ
  • Step Over(F8): ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ์‹คํ–‰ํ•จ / ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ๋Š” ๋“ค์–ด๊ฐ X

์ฐธ๊ณ  ์ž๋ฃŒ

 

Exercise: Helloworld

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉฐ, ์ •์  ๋ถ„์„๊ณผ ๋™์  ๋ถ„์„ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io

์ฐธ๊ณ  ์ด๋ฏธ์ง€

 

Exercise: Helloworld

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋ฉฐ, ์ •์  ๋ถ„์„๊ณผ ๋™์  ๋ถ„์„ ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io