JavaRush /Java Blog /Random-KO /์ž๋ฐ” ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด
Ivan Zaitsev
๋ ˆ๋ฒจ 33
ะšะธะตะฒ

์ž๋ฐ” ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์•ˆ๋…•ํ•˜์„ธ์š”, ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ๋ด์•ผ ํ•˜๋Š”๋ฐ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์—†๊ฑฐ๋‚˜, ๋ˆ„๊ตฌ๋„ ๋ณผ ์ˆ˜ ์—†๋„๋ก ํ”„๋กœ๊ทธ๋žจ์„ ์•”ํ˜ธํ™”ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ์ž‘์€ ํ”„๋กœ๊ทธ๋žจ ๋ชฉ๋ก์„ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค.
Java ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด - 1

์ˆ˜์—… ์ค‘ ๋ฒˆ์—ญ๊ธฐ

์ด ํ”„๋กœ๊ทธ๋žจ์€ ๋ฌธ์ž์—ด ๋ณ€์ˆ˜๋ฅผ ํŽธ์ง‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
Java ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด - 2
์ง€์นจ :
  1. ํฌํ•จ๋œ ์ค„ ๋ชฉ๋ก์ด ์™ผ์ชฝ์— ๋‚˜ํƒ€๋‚  ๋•Œ๊นŒ์ง€ ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ *.class ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค. ์ˆ˜์—…์— ํ…์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์™ผ์ชฝ ๋ชฉ๋ก์—์„œ ๋ผ์ธ์„ ํ•˜๋‚˜์”ฉ ์„ ํƒํ•˜๊ณ , ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ ์ฐฝ์—์„œ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋‹จ ์ฐฝ์— ์›๋ณธ ํ…์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  3. ๋ณ€๊ฒฝ๋œ ๋ผ์ธ์€ ๋ชฉ๋ก์—์„œ ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  4. ์ด๋ฏธ ๋ณ€๊ฒฝ๋œ ํ–‰์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ *.class ํŒŒ์ผ์„ ์ €์žฅํ•˜๋ ค๋ฉด ํŒŒ์ผ->์ €์žฅ ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

JD-GUI

์ด ํ”„๋กœ๊ทธ๋žจ์€ Java ํด๋ž˜์Šค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
Java ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด - 3
์ง€์นจ:
  1. jar ๋˜๋Š” ํด๋ž˜์Šค ํŒŒ์ผ์„ ํ”„๋กœ๊ทธ๋žจ ์ฐฝ์œผ๋กœ ๋“œ๋ž˜๊ทธํ•ฉ๋‹ˆ๋‹ค.
์œ ์‚ฌํ•œ ํ”„๋กœ๊ทธ๋žจ: luyten, BytecodeViewer.

์ž๋ฐ” ๋ฐ”์ดํŠธ์ฝ”๋“œ ํŽธ์ง‘๊ธฐ

์ด ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ํŽธ์ง‘ํ•˜๊ณ  Java ํด๋ž˜์Šค๋ฅผ ๋ณด๊ณ  ๋ณ€๊ฒฝํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
Java ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด - 4
์ง€์นจ :
  1. ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜์—ฌ *.class ํŒŒ์ผ ๋˜๋Š” *.jar ํŒŒ์ผ์„ ์—ด๊ณ  ํŽธ์ง‘ํ•  ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ์™ผ์ชฝ ๋ชฉ๋ก์—์„œ ํƒญ์„ ํ•˜๋‚˜์”ฉ ์„ ํƒํ•˜์„ธ์š”.
  3. ๋ถ„์„๋ฒ• ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์™ผ์ชฝ์˜ ๋ถ„์„๋ฒ• ํƒญ์„ ์„ ํƒํ•˜๊ณ  ์›ํ•˜๋Š” ๋ถ„์„๋ฒ•์„ ์„ ํƒํ•˜์„ธ์š”.
  4. ์ด๋ฏธ ์ˆ˜์ •๋œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํฌํ•จ๋œ ์ƒˆ *.class ํŒŒ์ผ์„ ์ €์žฅํ•˜๋ ค๋ฉด ๋ฉ”์†Œ๋“œ ํŽธ์ง‘ ์ƒ๋‹จ์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ ์ €์žฅ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
์œ ์‚ฌํ•œ ํ”„๋กœ๊ทธ๋žจ: dirtyJOE, BytecodeViewer.

์„ธ๋กœ๋ณด

์ด ํ”„๋กœ๊ทธ๋žจ์€ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํฌ๊ด„์ ์œผ๋กœ ๋ณดํ˜ธํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
Java ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด - 5
์ง€์นจ :
  1. ๋ณดํ˜ธํ•˜๋ ค๋Š” *.jar ํŒŒ์ผ๊ณผ ์ด๋ฅผ ์ €์žฅํ•  ์œ„์น˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ณดํ˜ธํ•ด์•ผ ํ•  ํ™•์ธ๋ž€์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.
  3. ์‹คํ–‰์„ ํด๋ฆญํ•˜๊ณ  ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
์œ ์‚ฌํ•œ ํ”„๋กœ๊ทธ๋žจ: proguard, zelix, allatori.

๊ณ ์‚ฌ๋ฆฌ

์ด ํ”„๋กœ๊ทธ๋žจ์€ Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋””์ปดํŒŒ์ผํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ๊ทธ๋žจ์—๋Š” ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ง€์นจ :
  1. ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋””์ปดํŒŒ์ผํ•  ํŒŒ์ผ์„ ๋ฐฐ์น˜ํ•˜๊ณ , ์†Œ์Šค์šฉ ํด๋”๋„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด 1) ๋””์ปดํŒŒ์ผ์šฉ ํด๋”, 2) ์†Œ์Šค์šฉ ํด๋”(fernflower.jar deobf src ํ˜ธ์ถœ) ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. deobf ํด๋”์˜ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ๋Š” src ํด๋”์— ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
์œ ์‚ฌํ•œ ํ”„๋กœ๊ทธ๋žจ: deobfuscator, JD-Core, Mocha. ์ง€๊ธˆ์€ ๊ทธ๊ฒŒ ์ „๋ถ€์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ์šฉํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๊ฒŒ์‹œ๋ฌผ์— ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ์œ„์˜ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์€ ์ธํ„ฐ๋„ท์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION