궁금한게있는데

홈 > 안드로이드 > 안드로이드 > 기술
안드로이드

궁금한게있는데

3 Sukah 25 10867 0

제가혼돈의학교라고하는게임에들어있는 il2cpp를덤프했거든요? (올드 버전으로)


// Namespace:
public abstract class BadNerdItem : VNLObject // TypeDefIndex: 2798
{
 // Fields
 public const string SAVE_ITEM_LIST_PREFIX = "saveItemList"; // 0x0
 public string availableInStoresStart; // 0x10
 public string availableInStoresEnd; // 0x14
 public int displayLevelFloor; // 0x18
 public int displayLevelCeiling; // 0x1C
 public int everyXAmountUse; // 0x20
 private int usedInThisSession; // 0x24
 public string sn; // 0x28
 public bool assignableToSlot; // 0x2C
 public string _price; // 0x30
 public string _nameTagsRequired; // 0x34
 public string _vipTokensRequired; // 0x38
 public string _level; // 0x3C
 public bool upgradedItem; // 0x40
 public BadNerdItem preRequisiteForBuying; // 0x44
 public string description; // 0x48
 public bool spin; // 0x4C
 public float spinSpeed; // 0x50
 protected string assignedTag; // 0x54
 public float carryingWeight; // 0x58
 public AudioClip pickupSound; // 0x5C
 public AudioClip useSound; // 0x60
 public AudioClip detatchSound; // 0x64
 private bool isOwnedbyPlayer; // 0x68
 public float hOffset; // 0x6C
 public float vOffset; // 0x70
 public int storeOrder; // 0x74
 public bool isForPlayerOnly; // 0x78
 public bool isInMiscSection; // 0x79
 public bool isInMiscSectionInInventory; // 0x7A
 public AttackComponent owner; // 0x7C
 public bool dontStripDescriptionLineBreaks; // 0x80
 public bool canBeSold; // 0x81
 public float sellItemAtPercent; // 0x84
 public Vector3 overrideRotation; // 0x88
 public bool isAuctionable; // 0x94
 public bool limitedEdition; // 0x95
 public bool disableParticlesInShops; // 0x96
 public bool readyForSale; // 0x97
 public Vector3 manualSize; // 0x98
 private static string descKeySuffix; // 0x0
 private static bool skipPickupSound; // 0x4
 private bool detecting; // 0xA4
 public static bool ignoreCapacity; // 0x5
 public bool canBeDetached; // 0xA5
 protected bool isDestroyed; // 0xA6
 public bool cannotOwnDuplicate; // 0xA7

 // Methods
 protected void .ctor(); // RVA: 0x1A6774 Offset: 0x1A6774
 private static void .cctor(); // RVA: 0x1A6854 Offset: 0x1A6854
 public long get_AvailableInStoresEnd(); // RVA: 0x1A68E4 Offset: 0x1A68E4
 public long get_AvailableInStoresStart(); // RVA: 0x1A6944 Offset: 0x1A6944
 public int get_price(); // RVA: 0x1A69A0 Offset: 0x1A69A0
 public void set_price(int value); // RVA: 0x1A6A5C Offset: 0x1A6A5C
 public int get_nameTagsRequired(); // RVA: 0x1A6B24 Offset: 0x1A6B24
 public void set_nameTagsRequired(int value); // RVA: 0x1A6BE0 Offset: 0x1A6BE0
 public int get_vipTokensRequired(); // RVA: 0x1A6CA8 Offset: 0x1A6CA8
 public void set_vipTokensRequired(int value); // RVA: 0x1A6D64 Offset: 0x1A6D64
 public int get_level(); // RVA: 0x192CFC Offset: 0x192CFC
 public void set_level(int value); // RVA: 0x1A6E2C Offset: 0x1A6E2C
 public virtual Type getCategory(); // RVA: 0x1A6EF4 Offset: 0x1A6EF4
 public virtual float getWeight(); // RVA: 0x180B14 Offset: 0x180B14
 protected virtual void Awake(); // RVA: 0x1A6FFC Offset: 0x1A6FFC
 public virtual void initForStoreView(); // RVA: 0x1A70E0 Offset: 0x1A70E0
 public void register(); // RVA: 0x1A70E4 Offset: 0x1A70E4
 public virtual string getTitleLabel(); // RVA: 0x1A7244 Offset: 0x1A7244
 public string getPriceLabel(); // RVA: 0x1A74D8 Offset: 0x1A74D8
 public virtual string getSellQuantityOverride(); // RVA: 0x1A76DC Offset: 0x1A76DC
 public virtual string getCountLabel(); // RVA: 0x1A76E4 Offset: 0x1A76E4
 public virtual void carryItemsAcrossLevel(Transform parent); // RVA: 0x1A782C Offset: 0x1A782C
 public virtual void becomeDamagedGoods(); // RVA: 0x1A7898 Offset: 0x1A7898
 public virtual void unCarryItemsAcrossLevel(Transform parent); // RVA: 0x1A789C Offset: 0x1A789C
 public virtual string getStats(); // RVA: 0x180818 Offset: 0x180818
 public virtual Vector3 getSize(); // RVA: 0x194080 Offset: 0x194080
 public virtual string getDetailedDescription(); // RVA: 0x1A7908 Offset: 0x1A7908
 private string getDescription(); // RVA: 0x1A7D40 Offset: 0x1A7D40
 protected virtual int getPlayerOwnCount(); // RVA: 0x1A7EE0 Offset: 0x1A7EE0
 public virtual string getLootName(); // RVA: 0x1A8294 Offset: 0x1A8294
 public bool salvs(AttackComponent player); // RVA: 0x1A829C Offset: 0x1A829C
 public abstract string getStatusLabel(); // -1
 public void onStoreSelect(); // RVA: 0x1A851C Offset: 0x1A851C
 public void onInventorySelect(); // RVA: 0x1A85E0 Offset: 0x1A85E0
 public virtual bool useItem(AttackComponent player); // RVA: 0x1A86A4 Offset: 0x1A86A4
 protected void trackUsed(); // RVA: 0x1A8820 Offset: 0x1A8820
 public bool isAbleToFitInCapacity(AttackComponent player); // RVA: 0x1A433C Offset: 0x1A433C
 public virtual bool bePickedUp(AttackComponent player); // RVA: 0x1A890C Offset: 0x1A890C
 public virtual bool beBaught(PlayerAttackComponent player); // RVA: 0x1A8F78 Offset: 0x1A8F78
 protected void playPickupSound(); // RVA: 0x1A8E10 Offset: 0x1A8E10
 protected void playUseSound(); // RVA: 0x1A8754 Offset: 0x1A8754
 public virtual void toggleCollider(bool on); // RVA: 0x1A8F80 Offset: 0x1A8F80
 protected virtual void setTagAndLayer(string tag, int layer); // RVA: 0x1A9020 Offset: 0x1A9020
 protected virtual void doDetachItemFromBone(AttackComponent player); // RVA: 0x1A92C0 Offset: 0x1A92C0
 public virtual bool putAwayItem(bool force); // RVA: 0x1A92C4 Offset: 0x1A92C4
 public void pickupPrefab(AttackComponent player); // RVA: 0x1989F0 Offset: 0x1989F0
 public virtual void detachItem(bool reposition, bool forceDetach); // RVA: 0x1A9664 Offset: 0x1A9664
 protected virtual void setKinematic(bool on); // RVA: 0x1A9AE0 Offset: 0x1A9AE0
 protected void playDetatchSound(); // RVA: 0x1A99E0 Offset: 0x1A99E0
 public void destroy(); // RVA: 0x1A9B80 Offset: 0x1A9B80
 private void OnDestroy(); // RVA: 0x1A9C38 Offset: 0x1A9C38
 public virtual string getPlaceHolderName(); // RVA: 0x1A9C44 Offset: 0x1A9C44
 public virtual string getInventoryUseButtonLabel(); // RVA: 0x1A9CBC Offset: 0x1A9CBC
 public virtual bool onInventoryUse(AttackComponent player); // RVA: 0x1A9D34 Offset: 0x1A9D34
 public virtual bool isFixableItem(); // RVA: 0x1A9F2C Offset: 0x1A9F2C
 public virtual bool isUpgradableItem(); // RVA: 0x1A9F34 Offset: 0x1A9F34
 public virtual bool fix(); // RVA: 0x1A9F3C Offset: 0x1A9F3C
 public virtual bool upgrade(); // RVA: 0x1A9F44 Offset: 0x1A9F44
 public virtual string canBeSoldValidation(); // RVA: 0x1A9F54 Offset: 0x1A9F54
 public virtual Mesh getMesh(); // RVA: 0x1A9F5C Offset: 0x1A9F5C
 public virtual Renderer getRenderer(); // RVA: 0x1AA14C Offset: 0x1AA14C
 public virtual void saveInItemList(int itemListIndex, ItemSerializer itemSerializer); // RVA: 0x180CF4 Offset: 0x180CF4
 public virtual void loadToItemList(int itemListIndex, ItemSerializer itemSerializer); // RVA: 0x181670 Offset: 0x181670
 public virtual string canBeBought(PlayerAttackComponent player, int quantity); // RVA: 0x1AA32C Offset: 0x1AA32C
 private void <register>m__BE(); // RVA: 0x1AA7AC Offset: 0x1AA7AC
 private void <bePickedUp>m__BF(); // RVA: 0x1AAC24 Offset: 0x1AAC24

이렇게 나왔는데....

정작 신버전은

methods부분에

// Methods
 protected virtual void MMADPCCHONN(string MPCMGJNKJGM, int LECMJOPOPOE); // RVA: 0x44F744 Offset: 0x44F744
 public virtual float DFLIKABJBAF(); // RVA: 0x44F9A8 Offset: 0x44F9A8
 public virtual string GBBHCCCOMHJ(); // RVA: 0x44F9B0 Offset: 0x44F9B0
 public long LNLGCCFDAHF(); // RVA: 0x44F9B8 Offset: 0x44F9B8
 public int MMMNMHFBGKM(); // RVA: 0x44FA1C Offset: 0x44FA1C
 protected virtual void ICFBMIEFLCN(); // RVA: 0x44FAB8 Offset: 0x44FAB8
 protected virtual void GJDDEOOCOIG(AttackComponent GDIOOCJKBGC); // RVA: 0x44FB98 Offset: 0x44FB98
 protected void CLNFOECIFGL(); // RVA: 0x44FB9C Offset: 0x44FB9C
 public void NGCKBKNMDFF(); // RVA: 0x44FC68 Offset: 0x44FC68
 public virtual Vector3 FMLDGBOOFBI(); // RVA: 0x44FD9C Offset: 0x44FD9C
 public virtual string KNPPCEKJCMJ(PlayerAttackComponent GDIOOCJKBGC, int AOHLCCPOJBA); // RVA: 0x44FEB8 Offset: 0x44FEB8
 public virtual bool AAHNKJNIIAM(AttackComponent GDIOOCJKBGC); // RVA: 0x45026C Offset: 0x45026C
 public virtual Type KDNLJFFAAHP(); // RVA: 0x4504E8 Offset: 0x4504E8
 public virtual string NHKHJPHCEKM(); // RVA: 0x4505F8 Offset: 0x4505F8
 public virtual void GCKDPJJDPCH(); // RVA: 0x450600 Offset: 0x450600
 public string LEBFLMABECL(); // RVA: 0x450604 Offset: 0x450604
 public virtual void LLOFEKJFGEC(bool IJBHJNEHAGO, bool AIHGCFMOBMP); // RVA: 0x450994 Offset: 0x450994
 private string BEOKJOMNPJH(); // RVA: 0x450E48 Offset: 0x450E48
 public virtual Renderer DPIHIEPKLGE(); // RVA: 0x450FA0 Offset: 0x450FA0
 public virtual string CKPAALBNADE(); // RVA: 0x451158 Offset: 0x451158
 protected void CFGNGPIBGMO(); // RVA: 0x4513C4 Offset: 0x4513C4
 public virtual bool DCPOFKCFLBB(); // RVA: 0x451504 Offset: 0x451504
 public virtual string BNINBBNMFAK(); // RVA: 0x45150C Offset: 0x45150C
 public virtual bool IAHENACBEHA(); // RVA: 0x451514 Offset: 0x451514
 public virtual void CFEHJNAIENG(); // RVA: 0x45151C Offset: 0x45151C
 public virtual string KBKLIJKMFKN(); // RVA: 0x451520 Offset: 0x451520
 public virtual string GDBEKMLIJOF(); // RVA: 0x451528 Offset: 0x451528
 public virtual bool BFDPGGKGEIK(); // RVA: 0x451530 Offset: 0x451530
 public int OLAKGGOJFMH(); // RVA: 0x45044C Offset: 0x45044C
 public long EAEKCDNGKJM(); // RVA: 0x451538 Offset: 0x451538
 public bool MHPGODGDHLO(AttackComponent GDIOOCJKBGC); // RVA: 0x45159C Offset: 0x45159C
 protected virtual int CDNIBFILAPC(); // RVA: 0x4519B4 Offset: 0x4519B4
 public virtual bool AHECLOJIAEG(PlayerAttackComponent GDIOOCJKBGC); // RVA: 0x451D2C Offset: 0x451D2C
 public virtual bool FFODDGJBHIJ(AttackComponent GDIOOCJKBGC); // RVA: 0x451D34 Offset: 0x451D34
 public virtual void OAFNIBDIDJJ(int BLDLJABAJIP, ADCIDCNDNEA GIHDHODLBJH); // RVA: 0x451F00 Offset: 0x451F00
 public void EKFFIAFKAFH(int EKANFFEKEKM); // RVA: 0x452B7C Offset: 0x452B7C
 public virtual string PDINBNBPAEH(); // RVA: 0x452C24 Offset: 0x452C24
 public virtual bool CKEHMDGDOAL(); // RVA: 0x452E98 Offset: 0x452E98
 public virtual void IJMEPPFDCHM(Transform JGEGPGMFENH); // RVA: 0x452EA8 Offset: 0x452EA8
 public virtual string OJOGCIJJFDI(); // RVA: 0x452F98 Offset: 0x452F98
 public bool LHBNMPCBHDM(AttackComponent GDIOOCJKBGC); // RVA: 0x452FF4 Offset: 0x452FF4
 public virtual Type DFFCOKKDGBD(); // RVA: 0x4532B4 Offset: 0x4532B4
 private void NOIMEFGPAKF(); // RVA: 0x4533C4 Offset: 0x4533C4
 public void onInventorySelect(); // RVA: 0x4533D0 Offset: 0x4533D0
 public void onStoreSelect(); // RVA: 0x453480 Offset: 0x453480
 public virtual string DBOHCHFLACD(); // RVA: 0x453530 Offset: 0x453530
 protected virtual int BOLBKGHPDAP(); // RVA: 0x453538 Offset: 0x453538
 public virtual Renderer ONJMDJELNMO(); // RVA: 0x4538B0 Offset: 0x4538B0
 private void OnDestroy(); // RVA: 0x453A9C Offset: 0x453A9C
 public virtual string GIDDMFPJILG(); // RVA: 0x453AA8 Offset: 0x453AA8
 public void MBOIFFJMJHC(int EKANFFEKEKM); // RVA: 0x452A2C Offset: 0x452A2C
 public int PABLADNAOJB(); // RVA: 0x4507C0 Offset: 0x4507C0
 public virtual bool FKBHDFEKEJI(bool MMNBHPHFOAM); // RVA: 0x453EC0 Offset: 0x453EC0
 protected virtual void NMKIPBBJPHK(AttackComponent GDIOOCJKBGC); // RVA: 0x454210 Offset: 0x454210
 public virtual void LOIJOFHOGAK(Transform JGEGPGMFENH); // RVA: 0x454214 Offset: 0x454214
 public virtual string MEBPFACHHOK(); // RVA: 0x454304 Offset: 0x454304
 public virtual string FKKFKHEECBO(); // RVA: 0x454570 Offset: 0x454570
 public void GIAKJMMHECL(); // RVA: 0x4547E4 Offset: 0x4547E4
 protected virtual void CJHDPCOGFEA(bool LMBKICECLBI); // RVA: 0x454894 Offset: 0x454894
 public virtual string NACFCNLIBLO(); // RVA: 0x45491C Offset: 0x45491C
 public virtual void HDFNJPLEIDL(Transform JGEGPGMFENH); // RVA: 0x454A2C Offset: 0x454A2C
 public virtual bool BKHFICFKLKD(AttackComponent GDIOOCJKBGC); // RVA: 0x454B1C Offset: 0x454B1C
 public void MDKBNOAOIHL(int EKANFFEKEKM); // RVA: 0x454C64 Offset: 0x454C64
 private void OHGADMHMNBM(); // RVA: 0x454D0C Offset: 0x454D0C
 public int HKGJMFFBKBP(); // RVA: 0x45514C Offset: 0x45514C
 public void OJALEDBIAJE(AttackComponent GDIOOCJKBGC); // RVA: 0x4551E8 Offset: 0x4551E8
 protected void JCCBAPJLLBP(); // RVA: 0x4552E4 Offset: 0x4552E4
 public virtual void IOJAJHNONOG(int BLDLJABAJIP, ADCIDCNDNEA GIHDHODLBJH); // RVA: 0x455424 Offset: 0x455424
 public void OEPLPFAMPID(); // RVA: 0x455D80 Offset: 0x455D80
 private static void .cctor(); // RVA: 0x455E30 Offset: 0x455E30
 protected virtual void FHMGCBCPGJD(string MPCMGJNKJGM, int LECMJOPOPOE); // RVA: 0x455EA4 Offset: 0x455EA4
 public void OBHKPCOBLLF(); // RVA: 0x45612C Offset: 0x45612C
 private void NPJBNIJHILE(); // RVA: 0x4561DC Offset: 0x4561DC
 public virtual Mesh NCDCBFLAKDA(); // RVA: 0x4561E8 Offset: 0x4561E8
 public virtual bool DIKIPPODKNM(PlayerAttackComponent GDIOOCJKBGC); // RVA: 0x4563B8 Offset: 0x4563B8
 public virtual string FLIPNMEPMLD(); // RVA: 0x4563C0 Offset: 0x4563C0
 public virtual string MPIECABEEEF(); // RVA: 0x45641C Offset: 0x45641C
 protected void ONOHDPCDMIE(); // RVA: 0x450D70 Offset: 0x450D70
 protected virtual void Awake(); // RVA: 0x456478 Offset: 0x456478
 public virtual void NFNOGGHBMKH(); // RVA: 0x456550 Offset: 0x456550
 public void .ctor(); // RVA: 0x456554 Offset: 0x456554
 public virtual void BGMIFOEPAPJ(bool LMBKICECLBI); // RVA: 0x456614 Offset: 0x456614
 public void BBHNPNMGLMH(int EKANFFEKEKM); // RVA: 0x452984 Offset: 0x452984
 public virtual string JDJOOKBHJBF(); // RVA: 0x45669C Offset: 0x45669C
 public virtual Renderer AKMMABKFLBO(); // RVA: 0x4566F8 Offset: 0x4566F8
 public virtual bool LOGHIIFDCCL(); // RVA: 0x4568B0 Offset: 0x4568B0
 public virtual bool LMPMNFKMJIE(); // RVA: 0x4568C0 Offset: 0x4568C0
 protected virtual void LGJFBNCCEFP(bool LMBKICECLBI); // RVA: 0x4568C8 Offset: 0x4568C8
 public void DOMEAAPIBHK(); // RVA: 0x456950 Offset: 0x456950
 public int HCKPNLCEIAK(); // RVA: 0x44A258 Offset: 0x44A258
 public virtual bool APILFCKOJFG(AttackComponent GDIOOCJKBGC); // RVA: 0x456AB4 Offset: 0x456AB4
 public void HNEBFFHOOCL(int EKANFFEKEKM); // RVA: 0x4528DC Offset: 0x4528DC
 public virtual void CKPGLHOFIOO(Transform JGEGPGMFENH); // RVA: 0x456F44 Offset: 0x456F44
 public virtual void MLIMFBJIBNM(Transform JGEGPGMFENH); // RVA: 0x457034 Offset: 0x457034
 public virtual bool PFNGJFAMAMB(); // RVA: 0x457124 Offset: 0x457124
 protected void NACDCIKDGAM(); // RVA: 0x454BAC Offset: 0x454BAC
 public bool IMDKFLCOLON(AttackComponent GDIOOCJKBGC); // RVA: 0x44A2F4 Offset: 0x44A2F4
 public long DDJDPMOGNPB(); // RVA: 0x45712C Offset: 0x45712C
 public virtual void NMPKGCBODPP(bool LMBKICECLBI); // RVA: 0x457194 Offset: 0x457194
 public virtual bool JKINAKHIKBE(); // RVA: 0x45721C Offset: 0x45721C
 public bool CPGHGJKGFCB(AttackComponent GDIOOCJKBGC); // RVA: 0x457224 Offset: 0x457224
 public void LMCDILKJCPD(int EKANFFEKEKM); // RVA: 0x457478 Offset: 0x457478
 public virtual void JMEHJKBCHJC(); // RVA: 0x457520 Offset: 0x457520
 protected virtual void MOOHIEMMDMK(string MPCMGJNKJGM, int LECMJOPOPOE); // RVA: 0x457524 Offset: 0x457524
 public int EKIIJKHOPNJ(); // RVA: 0x45085C Offset: 0x45085C
 public virtual string EHIKACAKGHG(); // RVA: 0x4577AC Offset: 0x4577AC
 public virtual Renderer IMBECOLBIJA(); // RVA: 0x457A20 Offset: 0x457A20
 protected void BLHPGIANDED(); // RVA: 0x457C0C Offset: 0x457C0C
 public void CMJBMBFKOGD(); // RVA: 0x457D4C Offset: 0x457D4C
 public int MBMKIFANCBP(); // RVA: 0x4508F8 Offset: 0x4508F8
 protected void HMBKLLHFMDC(); // RVA: 0x457E84 Offset: 0x457E84
 public virtual string FKEHAGBHMOI(PlayerAttackComponent GDIOOCJKBGC, int AOHLCCPOJBA); // RVA: 0x457F58 Offset: 0x457F58
 public void NDAPNOLMELE(int EKANFFEKEKM); // RVA: 0x452AD4 Offset: 0x452AD4
}

이렇게나오더라고요 이거 암호화되서그런가요? 맞다면 어떻게푸나요?


25 Comments
3 Sukah 2019.10.06 21:03  
전문가님들 부탁드려요ㅠㅠ
6 지존 2019.10.06 22:24  
메서드 이름 난독화 된거고요
직접 컨트롤플로우 따라가면서 핵심이 되는 메서드를 찾으셔야 해요
3 Sukah 2019.10.07 00:07  
다른방법은 없나요ㅠㅠㅠㅠ

Congratulation! You win the 7 축하드립니다! 당첨되셨어요~!

2 밀키스 2019.10.07 15:16  
읔..저에게 너무어려운..
1 김춘배 2019.10.07 18:06  
다 난독화되어있는 것은 아닌것같은데요? 질문자님이 찾고싶은 기능과 유사한 함수 이름에 BP를 걸고 동적디버깅 해보세요!
S 코드몽키 2019.10.08 02:32  
난독을 변태같이걸어놨네요;
3 Sukah 2019.10.08 18:16  
코몽님 도와주세요ㅠㅠㅠ
S 코드몽키 2019.10.08 18:50  
ㅌㅌㅌ 탈모가왔습니다
S 붉은상어 2019.10.10 16:06  
난독화 프로그램을 사용하기는 했네요.
아래 함수의 경우는 더미코드로 보입니다.
무시해도 될듯해요~
S 붉은상어 2019.10.10 17:31  
https://assetstore.unity.com/packages/tools/utilities/obfuscator-48919
참고하세요 ~
S 코드몽키 2019.10.10 21:30  
유니티 개발자들은
https://assetstore.unity.com/packages/tools/utilities/obfuscator-48919
이거 아니면
https://assetstore.unity.com/packages/tools/utilities/anti-cheat-toolkit-152334

이거 두개를 많이 쓰더라구요
기능은 비슷한거같은데  안티치트툴킷같은경우 사용법을 잘만 익히면 상당한 수준까지 보안을 끌어올릴수있는 키트였습니다

고작 50달러밖에안하는데 메소드 클래스 난독화부터 스피드핵감지 어플 변조감지등등 이런저런 기능들이 많이 들어있었습니다
참고로 가끔 세일할떄가 있으니 싸게 나왔을떄 구매하셔서 한번 기능분석해보시는것도 좋을거같습니다^^;
3 Sukah 2019.10.12 18:34  
난독화 풀수는없나요ㅠㅠ
2 에스트 2019.11.04 12:51  
난독화 푸는 플 있던데요 아래에
2 songod 2019.12.19 17:12  
감사합니다.
1 HACK2R 2020.01.29 09:33  
저런 난독화 봤는데.. 풀진 못함..

Congratulation! You win the 10 축하드립니다! 당첨되셨어요~!

2 호랑이쿨광 2020.03.09 05:59  
너무 어렵네요~
7 래바리 2020.04.03 18:44  
감사합니다.
1 이나얼아니 2020.05.20 13:24  
감사합니다
7 임중호 2020.05.23 22:52  
감사합니다~
4 쿨록 2020.08.07 19:14  
감사합니다~
1 kyo23 2021.02.08 12:46  
감사합니다
1 지구를지켜라 2021.04.02 09:48  
이런 점도 있군요...;;
1 korminho 2021.07.26 20:49  
감사합니다아~
1 열심 2022.01.24 23:09  
… 세상에는 많은 프로그램이 있는데.. 영어가 필수네요…
1 MrJoka408 2023.12.30 21:54  
Did you find a solution to this?