
1. μ μ λΆμ (Static Analysis)
: νλ‘κ·Έλ¨μ μ€νμν€μ§ μκ³ λΆμνλ λ°©λ²
β
μ μ λΆμμ μ₯μ π
- νλ‘κ·Έλ¨μ μ 체 ꡬ쑰λ₯Ό νμ νκΈ° μ½λ€.
- λΆμ νκ²½μ μ μ½μμλ λΉκ΅μ μμ λ‘λ€.
· λΆμμ μ§μνλ μ μ ν λκ΅¬λ§ κ°μΆλ€λ©΄ μλ κ°λ₯
- λ°μ΄λ¬μ€μ κ°μ μ μ± νλ‘κ·Έλ¨μ μνμΌλ‘λΆν° μμ νλ€.
β
μ μ λΆμμ λ¨μ π
- νλ‘κ·Έλ¨μ λλ ν (Obfuscation)κ° μ μ©λλ©΄ λΆμμ΄ λ§€μ° μ΄λ €μμ§λ€.
- μ μ λΆμλ§μΌλ‘λ λ€μν λμ μμλ₯Ό κ³ λ €νκΈ° μ΄λ ΅λ€.
· μ΄ λ¬Έμ λ νλ‘κ·Έλ¨μ μ€ν νλ¦μ΄ 볡μ‘ν μλ‘ λμ± μ¬κ°ν΄μ§
β
β
β
μ μ λΆμμ μ
λνμ μΈ μ μ λΆμ λꡬ μ€ νλμΈ IDAλ₯Ό μ¬μ©νμ¬ HelloWorld.exeλΌλ νλ‘κ·Έλ¨μ μ΄λ©΄ μλμ κ°λ€.

μ΄λ―Έμ§μ κ°μ΄λ° λΆλΆμμ νλ‘κ·Έλ¨μ μ΄μ λΈλ¦¬ μ½λλ₯Ό μ΄ν΄λ³Ό μ μλ€.
μ΄λ―Έμ§μ μ°μΈ‘μ μμΉνλ μ½λλ λμ»΄νμΌ(Decompile)λ μ½λμ΄λ€. μ΄λ€μ κΈ°κ³μ΄λ₯Ό μ¬λμ΄ μ΄ν΄νκΈ° μ¬μ΄ μΈμ΄λ‘ λνλ΄μ΄ λΆμμ λμ± μ½κ² ν μ μκ² ν΄μ€λ€.
β
μ΄λ―Έμ§μ μ’μΈ‘μλ νλ‘κ·Έλ¨μ ꡬμ±νλ μ¬λ¬ ν¨μμ νλ‘κ·Έλ¨κ³Ό κ΄λ ¨λ κ°μ’ μ 보λ₯Ό λ³Ό μ μλ€.
μ΄μΈμλ
μνΈμ°Έμ‘° (Cross Reference) : λ¬Έμμ΄μ΄λ ν¨μλ₯Ό μ΄λμμ μ¬μ©νλ μ§ λ³΄μ¬μ€
μ μ΄ νλ¦ κ·Έλν (Control Flow Graph) : ν¨μμ μ€ν νλ¦μ 보기 μ½κ² ν΄μ€
λ±μ ν΅ν΄ λΆμκ°κ° νλ‘κ·Έλ¨μ μ½κ² μ΄ν΄ν μ μλλ‘ λλλ€.
β
β

β
β
β
β
β
2. λμ λΆμ (Dynamic Analysis)
: νλ‘κ·Έλ¨μ μ€νμν€λ©΄μ λΆμνλ λ°©λ²
β
λμ λΆμμ μ₯μ π
- μ½λλ₯Ό μμΈν λΆμν΄λ³΄μ§ μκ³ λ νλ‘κ·Έλ¨μ κ°λ΅μ μΈ λμμ νμ ν μ μλ€.
· μ΄λ€ μ λ ₯μ λν κ°λ³ ν¨μ λλ νλ‘κ·Έλ¨μ μΆλ ₯μ λΉ λ₯΄κ² νμΈν μ μμΌλ―λ‘ μ΄ μΆλ ₯κ°λ€μ κΈ°λ°μΌλ‘ λμμ μΆλ‘ ν΄λ³Ό μ μλ€.
β
λμ λΆμμ λ¨μ π
- λΆμ νκ²½μ ꡬμΆνκΈ° μ΄λ €μΈ μ μλ€.
· λμ λΆμμ νλ‘κ·Έλ¨μ μ€ννλ©΄μ λΆμνλ κ²μ΄λ―λ‘, νλ‘κ·Έλ¨μ μ€ννμ§ λͺ»νλ©΄ λμ λΆμμ μ§νν μ μλ€. → κ°μ λ¨Έμ μ΄λ μ₯μΉλ₯Ό ꡬ맀νλ κ²μ΄ λ²κ±°λ‘κ³ μ΄λ €μΈ μ μλ€.
- λμ λΆμμ μ΄λ ΅κ² νλ μ¬λ¬ κΈ°λ²μ΄ κ°λ°λ¨
-> μν° λλ²κΉ (Anti Debugging)
: λμ λΆμμ μΌμ’ μΈ λλ²κΉ μ λ°©ν΄ν¨
μλμ κ°μ΄ μμ μ΄ λλ²κΉ λΉνκ³ μλμ§ κ²μ¬νκ³ , λλ²κΉ μ€μ΄λ©΄ νλ‘κ·Έλ¨μ κ°μ λ‘ μ’ λ£μν΄
if (is_debugging()) // λλ²κΉ
μΈμ§ νμΈ
exit(-1); // νλ‘κ·Έλ¨ μ’
λ£
Func();
β
β
β
λμ λΆμμ μ
μλμ°μ λνμ μΈ λμ λΆμ λꡬλ‘λ λλ²κ±° μ€ νλμΈ x64dbgκ° μλ€.
μ΄λ₯Ό μ΄μ©νλ©΄ μ€ν μ€μΈ μ΄μ λΈλ¦¬ μ½λ, CPUμ λ μ§μ€ν°(Register) μν, λ©λͺ¨λ¦¬(Memory)μ μ€ν(Stack)μ κ°μ νμΈνλ©° λΆμμ μ§νν μ μλ€.
β
//helloworld.c
#include <stdio.h>
int main()
{
int n = 0x31337;
printf("Hello World 0x%x\n", n);
return 0;
}
λ€μμ μ½λλ₯Ό μ»΄νμΌ ν HelloWorld.exeλ₯Ό x64dbgλ‘ λμ λΆμμ νλ©΄,

λ€μκ³Ό κ°μ΄ μΌμͺ½ μκ° μ΄μ λΈλ¦¬, μΌμͺ½ μλκ° λ©λͺ¨λ¦¬, μ€λ₯Έμͺ½ μκ° λ μ§μ€ν°, μ€λ₯Έμͺ½ μλκ° μ€νμ μ 보λ₯Ό 보μ¬μ€λ€.




1) νμ¬ μ½λλ 0x31337μ΄λΌλ μμ«κ°μ μ€νμ μ μ₯νκ³ μλ€. μμ€ μ½λμ int n = 0x31337μ λμλλ€.
2) 1μ μ½λλ₯Ό μ€νν μ§ν, μ΄λ―Έμ§ μλλ₯Ό 보면 μ€νμ 0x31337μ΄ μ μ₯λ κ±Έ νμΈν μ μλ€.
3) printf ν¨μλ₯Ό νΈμΆνλ€. μ΄λ―Έμ§ μ€λ₯Έμͺ½ μμ λ μ§μ€ν°λ₯Ό 보면, rcxμ Hello World 0x%x\n λ¬Έμμ΄μ΄, rdxμ 0x31337μ΄ μ μ₯λ κ²μ νμΈν μ μλ€.
4) 3μ μ½λλ₯Ό μ€νν μ§ν, νλ‘κ·Έλ¨μ 보면 Hello World 0x31337μ΄ μΆλ ₯λ κ²μ νμΈν μ μλ€.
β
β
μ μμμ²λΌ λμ λΆμμ νλ‘κ·Έλ¨μ μ€μ λ‘ μ€ννλ©° μμ€ν μ λ³νλ₯Ό κ΄μ°°νλ κ²μ΄ νΉμ§μ΄λ€.
β
β
β
β
β

'DreamHack > Reversing (Dreamhack)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Reversing] 3μ£Όμ°¨ dreamhack stage 3 (0) | 2022.05.08 |
---|---|
[Reversing] 2μ£Όμ°¨_dreamhack stage 3 - (1) (0) | 2022.04.30 |
[Reversing] 2μ£Όμ°¨ dreamhack stage 3 (0) | 2022.04.30 |
[Reversing] 1μ£Όμ°¨ dreamhack stage 2 (0) | 2022.04.07 |
[Reversing] 1μ£Όμ°¨ dreamhack stage 1 (0) | 2022.04.07 |