Upgrade to Pro — share decks privately, control downloads, hide ads and more …

逆向工程基礎

Inndy
December 01, 2016

 逆向工程基礎

Inndy

December 01, 2016
Tweet

More Decks by Inndy

Other Decks in Technology

Transcript

  1. 㖈Ꟛ㨥⛓⵹ ˙ 䧮⧺鏤⡹䊺竤剚 ˙ ✳鹎⡙⼧鹎⡙⼧Ⱉ鹎⡙⛓꟦✽湱鱲䳖 ˙ 㻨玑䒭濼麥JG MPPQ GVODUJPO SFDVSTJPO

    WBSJBCMF BSSBZ ˙ $铃鎊㛇劥1PJOUFS乽⡲ ˙ 㥶卓剤聃♶㣖僈涯涸㖒倰〳⟃莊䩛涮㉏ ˙ 㥶卓⟃♳剤馄麕♧⼱⟃♳溏♶䥢䧴♶濼麥⡹〳腋饥ꐫ來㹔✫
  2. ♶ず涸管陼㛂遤倰䒭 ˙ 管陼䧭⾲欰堥㐼焺/BUJWF ˙ $ $ 0CK$ 4XJGU HPMBOH IBTLFMM

    "OESPJE "35  ˙ 管陼䧭⚥꟦焺*OUFSNFEJBUF-BOHVBHF *- PSCZUFDPEF ˙ /&5 $ 7# '  +BWB 1ZUIPO QSFDPNQJMFEUPQZD  ˙ 湬陼*OUFSQSFUJOH ˙ 1ZUIPO 3VCZ +BWB4DSJQU 7#4DSJQU -*41
  3. 管陼㐼珏겳 ˙ "05 "IFBEPGUJNF  ˙ 㽠僽⡹濼麥涸$ $ 管陼㐼䖰⾲㨥焺管陼䧭〳㛂遤墂呪 ˙

    +*5 +VTUJOUJNF  ˙ $ISPNF涸7+BWB4DSJQUFOHJOF㿂倴鸏珏駵饱⢵涸儘⦬管陼䧭堥㐼焺 ˙ 5SBOTDPNQJMBUJPO ˙ 䖰♧珏邍麨倰䒭管陼䧭〥㢫♧珏TPVSDFDPEFUPTPVSDFDPEF $ZUIPO  CZUFDPEFUPOBUJWF "OESPJE3VO5JNF "35
  4. 䧮⦛鎣锸涸眕㕠 ˙ 〫剤"05$PNQJMFS管陼ⴀ⢵涸/BUJWF$PEF ˙ YBOEY@Ⰽ珏卺圓 ˙ Ⱖ➮涸ヤ ˙ 䊨Ⱘ鿪窍⡹✫荈䊹㷸ゅ9% ˙

    +BWB+%(6* KBEY DGS ˙ "OESPJE +BWB KBEY EFYKBS +%(6* ˙ /&5*-4QZ /&53FFDUPS EPU1FFL +VTU%FDPNQJMF ˙ 1ZUIPO QZD VODPNQZMF
  5. 鎹䥊넓垸㘗 AB AB AB AB CC CC CC CC FF

    FF FF FF        
  6. ˙ Ⰽ珏倰䒭CJHFOEJBO MJUUMFFOEJBO ˙ Y⢪欽MJUUMFFOEJBO ˙ JOUBY̔Y Y Y Y

    JONFNPSZ  ˙ MPOHMPOHCYBCDEFG ˙ ̔YFG YDE YBC Y Y Y Y Y JONFNPSZ  ˙ CJHFOEJBO ˙ JOUBY̔Y Y Y Y JONFNPSZ 侮侸⮭㶸倰䒭
  7. ⴲ䱳穉ざ铃鎊 00000000: 56 53 83 ec 04 8b 5c 24

    10 83 fb 02 7e 24 31 f6 VS....\$....~$1. 00000010: 8d 43 ff 83 ec 0c 83 eb 02 50 e8 e1 ff ff ff 83 .C.......P...... 00000020: c4 10 01 c6 83 fb 02 7f e7 8d 46 01 83 c4 04 5b ..........F....[ 00000030: 5e c3 鸏❉须俲僽➊랃
  8. 00000000 56 00000001 53 00000002 83EC04 00000005 8B5C2410 00000009 83FB02

    0000000C 7E24 0000000E 31F6 00000010 8D43FF 00000013 83EC0C 00000016 83EB02 00000019 50 0000001A E8E1FFFFFF 0000001F 83C410 00000022 01C6 00000024 83FB02 00000027 7FE7 00000029 8D4601 0000002C 83C404 0000002F 5B 00000030 5E 00000031 C3 ⴲ䱳穉ざ铃鎊 ⿾穉陼⛓䖕 push esi push ebx sub esp,byte +0x4 mov ebx,[esp+0x10] cmp ebx,byte +0x2 jng 0x32 xor esi,esi lea eax,[ebx-0x1] sub esp,byte +0xc sub ebx,byte +0x2 push eax call dword 0x0 add esp,byte +0x10 add esi,eax cmp ebx,byte +0x2 jg 0x10 lea eax,[esi+0x1] add esp,byte +0x4 pop ebx pop esi ret address opcode assembly code
  9. ⴲ䱳穉ざ铃鎊 ⾲㨥焺Ꟁ鸏垺 int fib(int n) { if(n <= 2) {

    return 1; } else { return fib(n - 1) + fib(n - 2); } }
  10. EAX = 0x12345678 AX = 0x5678 AL = 0x78 AH

    = 0x56 ⴲ䱳穉ざ铃鎊 酢⯏4* 4) 4-  խխխ%* %) %- &*1䭸ぢ玑䒭植㖈㛂遤 涸䭸⟂
  11. ˙ Y@㢵✫CJUTSFHJTUFSㄤ겙㢫涸Ⱄ⦐冾㶸㐼 ˙ &"9 CJUT ̔3"9 CJUT  ˙ 3

    3 3 3 3 3 3 3 ˙ 3 CJUT 3% CJUT 38 CJUT 3# CJUT  ˙ 麌皿佪桧刿㥪 ˙ ⟃⵹CJUT冾㶸㐼銴⨞Ⰽ妄⸈岁䩞腋㸤䧭MPOHMPOH CJUTJOUFHFS 湱 ⸈植㖈〫銴♧妄 ˙ $BMMJOHDPOWFOUJPO♶ず⿮侸剚⯓佞冾㶸㐼 ⴲ䱳穉ざ铃鎊CJUT䊴殯
  12. ⴲ䱳穉ざ铃鎊 ˙ 须俲珏겳 ˙ 冾㶸㐼SFH ˙ &"9 &#9 &$9 &%9

    &%* &4* &41 ˙ 侸⧩JNN ˙    YD Y ˙ 鎹䥊넓⿮罌NFN ˙ CZUFQUS<Y> ˙ EXPSEQUS<FCY FBY  >
  13. ⴲ䱳穉ざ铃鎊 • add dst, src • dst += src •

    dst:mem, reg • src:mem, reg, imm • dst, src 不可同時為 mem • add eax, 7 // eax += 7 • add dword ptr [0x123456+eax*4], ebx // arr[eax] += ebx • add eax, ebx // eax += ebx
  14. ⴲ䱳穉ざ铃鎊 • mov dst, src - dst = src •

    add dst, src - dst += src • sub dst, src - dst -= src • and dst, src - dst &= src • or dst, src - dst |= src • xor dst, src - dst ^= src • not dst - dst = ~dst • inc dst - dst++
  15. ⴲ䱳穉ざ铃鎊 // 算數練習 mov eax, 8 mov ebx, 7 xor

    ecx, ecx inc ecx add eax, ebx add ebx, ebx sub eax, ebx sub ecx, eax
  16. ⴲ䱳穉ざ铃鎊 • push val • val: imm, reg, mem •

    把數值 push 進堆疊 • pop target • target: reg, mem • 把數值從堆疊 pop 到指定的地⽅方
  17. ⴲ䱳穉ざ铃鎊 • jmp target • target: reg, imm, mem •

    無條件跳轉到 target 的指令繼續執⾏行行 • call target • 函式呼叫,跟 jmp 有點像,但是把返回位址 push 進堆疊 • ret • 從 function 跳回返回位址,等於 pop eip
  18. ⴲ䱳穉ざ铃鎊 • cmp a, b • a: reg, mem •

    b: imm, reg • 比較完之後 CPU 會把比較結果記錄在 EFLAGS 裡⾯面 • je addr, jz addr - 如果比較相等就跳轉 / jne addr - 不相等跳轉 • jg addr - 如果 a > b 就跳轉 • jl addr - 如果 a < b 就跳轉 • jge addr - 如果 a >= b 就跳轉 • jle addr - 如果 a <= b 就跳轉
  19. ⴲ䱳穉ざ铃鎊&'-"(4 ˙ 0'ˋ0WFSPX ˙ 4'ˋ4JHOFE ˙ ;'ˋ;FSP'MBH ˙ $'ˋ$BSSZ'MBH ˙

    3FGFSFODFIUUQTDPVSTFTFOHSJMMJOPJTFEVFDFCPPLTMBCNBOVBMBTTFNCMZIUNM 0' 4' ;' $' … 11 … 7 6 … 0