λ¬Έμ λ μ¬κΈ°μ λ€μ΄λ°μ μ μμ΅λλ€. (μμΆ ν΄μ μ λΉλ°λ²νΈλ codeengn μ λλ€.)
λͺ©νκ° : OEP(Original Entry Point) + Serial κ°
OEP λ?
νλ‘κ·Έλ¨μ μ§μ§ μμ μμΉ, ν¨νΉλμ΄ μλ νμΌμ μ μμ μΌλ‘ μΈν¨νΉ νμ λμ λ³Έ μμ μμΉ.
UPX μ κ²½μ°μλ POPAD λͺ λ Ή λ€ JMP λ¬Έμ μ¬μ©ν΄ μμΆν΄μ λ μλ³Έ μ½λμ μμΉλ‘ μ ννλλ°, κ·Έ μ νλ¬Έμ΄ μ€νλμ΄ μ΄λν μ£Όμκ° OEP μ λλ€.
μ€νμ μμΌλ΄ λλ€.
μ¬μ©μκ° μ λ ₯ν κ°κ³Ό μ리μΌμ λΉκ΅νλ μ νμ λ¬Έμ μ λλ€.
μ λ ₯κ°κ³Ό μ리μΌμ΄ μΌμΉνμ§ μμ μ μ€ν¨ λ©μΈμ§λ°μ€κ° νΈμΆλ©λλ€.
λλ²κ±°λ‘ μ΄μ΄λ³΄λ©΄ PUSHAD λΌλ λͺ λ Ήμ΄ κ°μ₯ λ¨Όμ λμ λλλ€.
UPX λ‘ ν¨νΉλμ΄ μλ νμΌμ΄λ€μ.
μ΄λ κ² PEid λ‘ ν¨νΉλ λͺ¨μ΅μ νμΈν μ μμ΅λλ€.
μ λ¨κ³μμλ μΈν¨νΉμ λν΄ μ€λͺ νμΌλ κ°λ¨ν μ§ννλλ‘ ν©μλ€.
POPAD λͺ λ Ή λ€ μμΆν΄μ λ μλ³Έ μ½λλ‘ μ ννλ λͺ λ Ήμ BP λ₯Ό κ±Έκ³ μ€νμ ν΄ μ€λλ€.
[F8] ν€λ‘ μ΄λνλ©΄ μλμ κ°μ΄ μΈν¨νΉλ μ½λλ₯Ό λ³Ό μ μμ΅λλ€.
00401360 μ£Όμλ‘ μ΄λνμΌλ, OEP λ 00401360 μ λλ€.
μ΄μ λ€νλ₯Ό λ μ€μΌκ² μ£ ?
(λ§μ°μ€ μ°ν΄λ¦ -> Dump debugged process)
Rebuild μ΅μ μ 체ν¬λ₯Ό ν΄μ νμ§ μκ³ μ§νν©λλ€.
κ·Έλλ‘ Dump λ²νΌμ λλ¬ 06_dump λ‘ μ μ₯νκ² μ΅λλ€.
λ€νλ₯Ό λ¬ νμΌμ μ€νν΄λ³΄λ©΄ μ λμκ°λ κ²μ λ³Ό μ μμ΅λλ€.
ν¨νΉμ΄ νλ Έλμ§ PEid λ‘ νμΈμ ν΄ λ³΄κ² μ΅λλ€.
μ΄λ κ² μ μμ μΌλ‘ μμΆμ΄ ν΄μ λμμ΅λλ€.
μ΄ μνλ‘ λλ²κ±°μ μ¬λ €λ³΄κ² μ΅λλ€.
μλ³Έ μ½λκ° λ³΄μ λλ€.
μλλ All referenced text strings κΈ°λ₯μ μ΄μ©νλ € νμΌλ, μλμ κ°μ΄ μλ¬΄λ° λ¬Έμμ΄λ 보μ΄μ§ μμ΅λλ€.
κ·Έ κ΄κ³λ‘ All intermodular calls κΈ°λ₯μ μ¬μ©νλλ‘ νκ² μ΅λλ€.
All intermodular calls λμ Back to user mode λ₯Ό μ¬μ©ν μλ μμ΅λλ€.
Back to user mode?
Back to user mode λ νΉμ μ΄λ²€νΈκ° μΌμ΄λκΈ° μ μ μ€μ νλ©°, νΉμ μ΄λ²€νΈμ call λͺ λ Ήμ΄ μΌμ΄λ λ€μ κ·Έ μ£Όμλ₯Ό μ‘μ μ μλ κΈ°λ₯μ λλ€.
μ΄λ»κ² νλκ°?
λλ²κ±°μμ νμΌμ μ€νν΄ μ€λλ€.
μ무 κ°μ΄λ μ λ ₯ν λ€ μ€λ₯ λ¬Έμμ΄μ λμ°κ³ , μ€λ₯ λ©μΈμ§λ°μ€μ νμΈ λ²νΌμ λλ₯΄μ§ μμ μ±λ‘ νλ‘κ·Έλ¨μ μ μ§μμΌ μ€λλ€. (μ’μΈ‘ μλ¨λ°μ μ μ§ λ²νΌ νΉμ [F12] ν€λ₯Ό μ¬μ©ν©λλ€.)
μ¬κΈ°μ [Alt + F9] ν€λ₯Ό λλ₯΄λ©΄ Back to user mode λ‘ λ€μ΄κ° μ μμ΅λλ€.
μ¬κΈ°μ μλ¬ λ©μΈμ§λ°μ€μ νμΈ λ²νΌμ λλ₯΄λ©΄ κ·Έ μ£Όμλ‘ μ΄λν μ μμ΅λλ€.
μ λ PEid λ‘ μΈν©λ νμΌμ μ΄μ΄λ΄€μ λ, Visual C++ μ μ¬μ©ν κ²μΌλ‘ 보μ μλ¬ μ°½μ νΈμΆν λ Win32 API μ MessageBox ν¨μλ₯Ό μ¬μ©νμΌλ¦¬λΌ μΆμΈ‘νμ΅λλ€.
μ°ν΄λ¦ -> Search for -> All intermodular calls κΈ°λ₯μΌλ‘ MessageBox ν¨μλ₯Ό μ°Ύμλ΄ μλ€.
μ΄λ ΅μ§ μκ² μ°Ύμ μ μμμ΅λλ€.
λλΈν΄λ¦μΌλ‘ μ μ£Όμλ‘ μ΄λν΄μ€μλ€.
μ΄λ κ² λ©μΈμ§λ°μ€ νΈμΆ μ νλ‘ μ±κ³΅/μ€ν¨μ μΆλ ₯λλ λ¬Έμμ΄μ΄ 보μ λλ€.
쑰건 λΆκΈ°λ¬Έμ μ±κ³΅ λ¬Έμμ΄ μμ μμ κ²λλ€.
μ΄ JNZ λͺ λ Ήμ΄ μ€νλλ©΄ μ€ν¨ λ¬Έμμ΄ μΆλ ₯ λ°λ‘ μ μ£Όμλ‘ μ΄λνλ€μ.
μ TEST λͺ λ ΉμΌλ‘ EAX κ° 0μ΄ μλλ©΄ JNZ λͺ λ Ήμ μ€νμΌλ‘ μ€ν¨νκ² λ©λλ€.
EAX λΌλ©΄ λ¦¬ν΄ κ°μ μ μ₯νλ λ²μ© λ μ§μ€ν°μμ£ ?
κ·Έλ λ€λ©΄ λ°λ‘ μμμ νΈμΆλλ ν¨μμ μ£Όλͺ©ν΄μΌ ν©λλ€.
μ΄λ κ² TEST λͺ λ Ήμ μ, ν¨μλ₯Ό νΈμΆνλ λΆλΆμ BP λ₯Ό κ±Έμ΄μ€λλ€.
μ΄ ν¨μλ PUSH λͺ λ Ήμ ν΅ν΄ λ κ°μ μΈμλ₯Ό μ λ¬λ°λλ°, νλλ μμ§ λͺ¨λ₯΄κ³ λ€λ₯Έ νλλ "AD46DFS547" μ΄λΌλ λ¬Έμμ΄μ λλ€.
BP κΉμ§ μ€νν΄λ΄ μλ€.
μκΉ μ€ν¨νλ λ¬Έμμ΄μ λ£μ΄μ€λλ€.
μ£Όμ μ°½μ μ¬μ©μκ° μ λ ₯ν μλ¦¬μΌ κ°μ΄ μΆκ°κ° λ©λλ€.
PUSH λͺ λ ΉμΌλ‘ μ΄ ν¨μμ μ λ¬λλ μΈμ νλλ μ κ° μ λ ₯ν κ°μ΄μλ€μ.
(00401073 μ£Όμμ νΈμΆλλ ν¨μμ μΈμ : μ¬μ©μκ° μ λ ₯ν μ리μΌ, AD46DFS547 μ΄λΌλ λ¬Έμμ΄)
κ·Έλ λ€λ©΄ μ΄ ν¨μλ λ¬Έμμ΄ λΉκ΅ ν¨μμΌ κ²λλ€.
μ΄λ κ² ν¨μ λ΄λΆλ‘ step in ν΄λ³΄λ©΄ EDX μ AD46DFS547 μ΄λΌλ κ°μ, ECX μ μ°λ¦¬κ° μ λ ₯ν κ°μ λ£μ΅λλ€.
EDXμ 4 byte λ₯Ό EAXμ λ£μ΄ ECXμ 1 byte μ© λΉκ΅νκ³ , ZF = 0 μ΄λ©΄ 1μ 리ν΄νκ³ ZF = 1μ΄λ©΄ λΉκ΅νλ κ³Όμ μ κ³μ λ°λ³΅ν©λλ€.
κ°λ¨ν λ§ν΄ μ°λ¦¬κ° μ λ ₯ν κ°κ³Ό AD46DFS547 μ λΉκ΅νλ κ³Όμ μ λλ€.
μ΄ AD46DFS547 μ΄λΌλ κ°μ νλ‘κ·Έλ¨μ μλ¦¬μΌ κ°μΌλ‘ λ£μ΄λ³΄κ² μ΅λλ€.
Check Serial λ²νΌμ λλ¦ λλ€.
μ΄λ κ² μ±κ³΅ λ©μΈμ§λ°μ€κ° νΈμΆλ©λλ€.
λ°λΌμ μλ¦¬μΌ κ°μ AD46DFS547 μ λλ€.
μ°λ¦¬κ° ꡬν΄μΌ νλ κ°μ OEP + Serial κ°μ΄λ λ΅μ 00401360AD46DFS547 μ λλ€.
OEP + Serial = 00401360AD46DFS547
'reverse engineering > CodeEngn' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CodeEngn] Basic RCE L08 λ¬Έμ νμ΄ (0) | 2020.12.08 |
---|---|
[CodeEngn] Basic RCE L07 λ¬Έμ νμ΄ (5) | 2020.12.07 |
[CodeEngn] Basic RCE L05 λ¬Έμ νμ΄ (5) | 2020.12.05 |
[CodeEngn] Basic RCE L04 λ¬Έμ νμ΄ (2) | 2020.12.05 |
[CodeEngn] Basic RCE L03 λ¬Έμ νμ΄ (0) | 2020.12.03 |