é¡ãªãã·ã§ã³
officeãã©ã«ããŒå ã®ãã¡ã€ã«ã®å 容ã«ããé¢æ°åŒæ°ã®èª¬æã®çãæ€çŽ¢ã®åŸããã¡ã€ã«cïŒ\ Program Files \ Microsoft Office \ Office15 \ 1033 \ XLINTL32.DLLãèŠã€ãããŸãã ã ããã§ã1033ã¯ããŒã«ã©ã€ãºèšèªã®LCIDã§ãïŒ msdnã®è©³çŽ° ïŒã
ãã£ãšèŠããšãããããååãšããŠãæ¢ããŠãããã®ãèŠã€ãã£ãããšãæããã«ãªããŸããã ãã¡ã€ã«å ã®äž¡æ¹ã®ãªãã·ã§ã³ã®AGGREGATEé¢æ°ã®åŒæ°ã®èª¬æã¯æ£ãããã®ã§ããã Excelãç¬èªã®ããŒã«ã©ã€ãºãã¡ã€ã«ã誀ã£ãŠè§£æããããšãå€æããŸããã ãã®åŸãExcelããŒã«ãªãŒãŒã·ã§ã³ãã¡ã€ã«ããŒãµãŒãäœæããããå°ãªããšãMS OfficeããŒã«ãªãŒãŒã·ã§ã³ãã¡ã€ã«ã®åœ¢åŒãç解ããããšã決å®ãããŸããã
ãŸããåŒæ°ãšé¢æ°ã®èª¬æã®ã¿ã®ããŒãµãŒãäœæããããšã決å®ãããŸãããããã¯ãäžèšã®ãã¡ã€ã«ããã£ãšèŠãŠã¿ããšããã©ãŒããããéåžžã«åçŽã§ããããã«æããããã§ãã ã
ãã®çµæããã¡ã€ã«ãå°ãææ ®æ·±ãèªãã åŸãåŒæ°ãšé¢æ°ãèšè¿°ããããã®ãã®ãããªã¹ããŒã ãæããã«ãªããŸããïŒ
- ãã¹ãŠã®èª¬æã¯ãExcelçšã®äœããã®ãã€ãã£ãé¢æ°é åºã§èšè¿°ãããŠããŸãããxls圢åŒã®ä»æ§ã§èª¬æãããŠããé¢æ°é åºãšã¯äžèŽããŸããã§ããã
- é¢æ°ã®å説æã¯ã次ã®åœ¢åŒã§èšè¿°ãããŸãããïŒã+é¢æ°åŒæ°ã®ã«ã³ãåºåãã®èª¬æ+ [âïŒâ +ååšããå Žåã¯åŒæ°ã®2çªç®ã®ã»ãã] +â !!â +é¢æ°èªäœã®èª¬æ+âïŒâ +âã§å ±æãããåŒæ°ã®èª¬æïŒã
- ãã¹ãŠã®é¢æ°ã«èª¬æãããããã§ã¯ãªãã次ã®ããã«ãã¡ã€ã«ã«æžã蟌ãŸããå®å šã«ç©ºã®é¢æ°ããããŸãã -ããã ãã§ãã
ãã®ã¹ããŒã ã«ãããšãããŒãµãŒã¯ããã«èšè¿°ããããã®äœæ¥ã«éåžžã«ããŸã察åŠããŸããããããã€ãã®åé¡ããããŸããã
- äžéšã®æ©èœã®èª¬æã®éãå
·äœçã«ã¯249ãã250ã®æ©èœã®èª¬æã®éãããã³504ãã505ã®éã«ãç解ã§ããªãã¯ã©ãã«ãŒããããåã³éåžžã®èª¬æããããŸããã
- äžéšã®æ©èœã®èª¬æã¯ãéžæããã¹ããŒã ã«é©åããããããã®ããã«æŸèæãäœæããå¿ èŠããããŸããã
- ã©ã®èª¬æãã©ã®æ©èœã«å±ãããã¯æ確ã§ã¯ãããŸããã
- ããŸããŸãªããŒã«ã©ã€ãºã®é¢æ°èšè¿°ã®ãããã¯ã®å é ã®ãªãã»ããã¯ç°ãªã£ãŠããããããã®ãªãã»ãããæã§èªèããŠãããŒãµãŒã®èŸæžã«å ¥åããå¿ èŠããããŸããã ããã§ã¯ã©ã®ãããªèªååã«ã€ããŠè©±ããŸããïŒ
- äžéšã®ããŒã«ã©ã€ãºã§ã¯ã説æã¯UTF-8圢åŒã§ãä»ã®UTF-16ã§ã¯ãäžè¬çã«èª¬æã®ååã¯UTF-8ã§ããã1ã€ã¯UTF-16ã§ããã
ããããååãšããŠãå€ãã®æ±ããããã³ã°ã«ãããã»ãšãã©ãã¹ãŠã®ããŒã«ã©ã€ãºã®æ©èœã®èª¬æãåŒãåºãããšãã§ããŸããã
ããã«æ·±ã
ã©ã®èšè¿°ãã©ã®æ©èœã«å±ããããšããåé¡ã解決ããããšã¯æ®ã£ãŠããŸãã ãããè¡ãããã«ãMS Officeãã©ã«ããŒå ã®ãã¡ã€ã«ã®ã³ã³ãã³ãã®æ€çŽ¢ãåã³éå§ããŸããããä»åã®ã¿é¢æ°åãæ€çŽ¢ããŠããŸããã ãããŠå¹žéãªããšã«ãé¢æ°ã®èª¬æãèšèŒãããXLINTL32.DLLãã¡ã€ã«ã®é£ã«XLLEX.DLLãã¡ã€ã«ããããé¢æ°ã®ååã«äŒŒããã®ããããŸããã
圌ãã ããäœãšãã¹ããŒã¹ãªãã§äžåã«æ©ããã ãããŠãè±èªã®å Žåããã®ããã¹ããèªåã®æã§å¥ã ã®é¢æ°åã«è§£æããããšãäŸç¶ãšããŠå¯èœã§ããã°ãã¢ã©ãã¢èªãŸãã¯ã¿ã€èªã§ã¯ãããã§ããŸããã§ããã
ååãšããŠãããã§ã¯ãExcelã®ããŒã«ã©ã€ãºãã¡ã€ã«ã®åœ¢åŒãæ¢ã«ç解ãããããã®åé¡ã«åãçµãã§å°±å¯ããæã§ããããšãæããã«ãªããŸããã æåã®ãã®ãéžã°ããŸããã
æåã«ãé¢æ°ã®èª¬æãšé¢æ°ã®ååã®äž¡æ¹ããååãã1ãã§ã¿ã€ããã234ãã®ãªãœãŒã¹ã®dllãã¡ã€ã«ã«æ ŒçŽãããŠããããšã«æ°ä»ããŸããã XLLEX.DLLãã¡ã€ã«ïŒããã¯é¢æ°åãä»ãããã®ïŒããã®ãªãœãŒã¹ãã³ãã®ææ ®æ·±ã調æ»ã«ããã次ã®çºèŠã«è³ããŸããã 次ã«ãWinHEXãšèšç®æ©ã䜿çšããŠããããã®é åãããæ·±ãç 究ããããšã«ããŸããã é¢æ°ã®ååã䜿çšããŠããµã€ãã®åã«ããè©æ¬ºåž«ã®ãµã€ããèŠãŠã¿ãŸãããã
æåã®2ãã€ãïŒ01 00-æå³ããŸã ããããŸããã 次ã®2ãã€ãã¯56 02ã§ã-è£è¿ããš0256ã«ãªãã16é²æ³ãã10é²æ³ã«è»¢éããå Žåã¯598ã«ãªããŸããæå³ã®ããããã¹ãã®ãããã¯ã«ãã以äžã®é¢æ°åãšãŸã£ããåãã§ãã ããã¯ãã§ã«åã°ããããšã§ãã ããã«èª¿ã¹ããšã次ã®ãã€ãã®ãã¢ã¯ã亀æãããå Žåãå¢å ããã·ãŒã±ã³ã¹ã«äŒŒãŠããŸãã å®éããããã®ãã€ãã¯ãkrakozyabrãããã¯ã®çµããããã®åã ã®é¢æ°ã®èšè¿°ã®ãªãã»ããã§ãã å®éãXLLEX.DLLãã¡ã€ã«ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãæåã®é¢æ°ãCOUNT-5ãã€ãïŒ0005h-0000hïŒã2çªç®-IF-2ãã€ãïŒ0007h-0005hïŒã3çªç®-ISNA-4ãã€ãïŒ000Bh-0007hïŒã§ããããšã瀺ããŠããŸãã
ããã¯ãã¹ãŠéåžžã«åªããŠããŸãããé¢æ°åã®é·ããæå®ãããŠããkrakozyabrãããã¯ã®éå§äœçœ®ã決å®ããæ¹æ³ã§ãã å®éãåããŒã«ã©ã€ãºã§ã¯ããã®ãããã¯ã«ã¯ç¬èªã®ãªãã»ããããããŸãã 次ã«ãXLLEX.DLLãã¡ã€ã«ãããªãœãŒã¹ãã³ãã®ããããŒãæãå§ããŸããã
æåã®4ãã€ãã¯ãªãœãŒã¹ã®ãµã€ãºã§ãã ããã«ããªãã»ãã33h 34hã«ãããã€ãïŒå€-0256ïŒã¯ããã¡ã€ã«ã«èšé²ãããŠããé¢æ°åã®æ°ãšãŸã£ããåãã§ããããšã«èå³ããããŸããã ããã«ã03hã¯17ãã€ãããšã«ç¹°ãè¿ãããã¹ã¯ãªãŒã³ã·ã§ããã§éžæãããé åã®æåŸã®4ãã€ã-0E 6F 00 00ã¯ããªãœãŒã¹ã®ãµã€ãºã«çããæ°=éžæãããé åã®ãµã€ãº+ 4 + 4-1ã«çãããªããŸããããŒã¿ãååšãããã¡ã€ã«ã®éšåã®ãµã€ãºã
ããã§ã03hã®ç¹°ãè¿ãã®éã«ãããã¹ãŠã®ãã€ããæžãåºããŠãå°ãã°ã«ãŒãåã§ããŸãã
03 | 0F05 | 00000000 | 0000 | 9E1C0000 | 00000000 |
03 | 5602 | 00000000 | 0100 | 51150000 | 9E1C0000 |
03 | 0601 | 00000000 | 0200 | A00A0000 | EF310000 |
03 | 0404 | 00000000 | 0300 | E6310000 | 8F3C0000 |
03 | 3100 | 00000000 | 0400 | 99000000 | 756E0000 |
- 1ãã€ã-ãããã¯ã®ã¿ã€ãïŒã¿ã€ã02ã03ã04-éåžžã®è¡ã¯officeãã¡ã€ã«ã«ããã01-WordBasicé¢æ°ããŒãã«ã®ããã«èŠããŸããå šäœã®èª¬æã¯ãé¢æ°åãšåé¢æ°ã®äœããã®ã€ã³ããã¯ã¹ã®åœ¢åŒã«ãªããŸãïŒã
- 2ãã€ã-ãããã¯å ã®èŠçŽ ã®æ°ã
- 4ãã€ã-ããããŸããã ç§ãèŠããã¹ãŠã®ãã¡ã€ã«ã§ããã®å€ã¯åžžã«0ã§ãããäºçŽãããŠããå ŽåããããŸãã
- 2ãã€ã-ãããã¯ã®ã·ãªã¢ã«çªå·ã
- 4ãã€ã-ãããã¯ãµã€ãº
- 4ãã€ã-7Ahã®ãã¡ã€ã«ã®å Žåããããã¯èšè¿°ã®æ«å°Ÿããã®ãããã¯ã®ãªãã»ããã
ãšã³ã³ãŒãã£ã³ã°ãæ±ã£ãŠããŸã
åºæ¬çã«ããã®ããŒã¿ã¯ãã§ã«XLLEX.DLLãã¡ã€ã«ã®èªåããŒãµãŒãäœæãããã¹ãŠã®èšèªã®ãã¹ãŠã®é¢æ°ã®ååãšä»ã®å€ãã®æ å ±ãåŒãåºãã®ã«ååã§ãã ãããããã®ããã»ã¹ã«ã¯1ã€ã®åé¡ããããŸãããããŒã«ãªãŒãŒã·ã§ã³ã®ããäžéšã ããUTF-8圢åŒã§ããŒã¿ãä¿åããŸãã ã»ãšãã©ã®ããŒã¿ã¯ãå®å šã«ç解ã§ããªã圢åŒã§ä¿åãããŸããåæåã¯ãUTF-8ã§ãã®èšèªã®ããŒãã«ãåºæºã«ãããªãã»ããã§1ãã€ãã§ãšã³ã³ãŒããããŸãã ããšãã°ãããªã«æåãCããšãHãã¯A1ãšA7ãšããŠèšè¿°ãããããŒãã«UTF8ã§ã¯çªå·D0A1ãšD0A7ãæã£ãŠããŸãããåæã«ãpãã¯D0ã§ããã¯ãã§ãããC0ãšèšè¿°ãããŠããŸãã
ãã®åé¡ã解決ããããã«ãç§ã¯æåã«Excelèªäœãå°ãªããšãUTF-8ã§ãã®ãããªãããŸããªãšã³ã³ãŒãã£ã³ã°ããæååãå€æããæ¹æ³ãç解ããããšããŸããã ãããè¡ãã«ã¯ãããã€ãã®èšèªã®ãããã¯ã®èª¬æãæ¯èŒããå¿ èŠããããŸããããã·ã¢èªã®ããŒã«ã©ã€ãºãšè±èªã䜿çšããŸããã
è±èªã®ããŒã«ã©ã€ãºã®ãããã¯ã®èª¬æã®å§ãŸãïŒ
- è±èªïŒ0100 5602 0500 ...ïŒäžã§èª¬æããããã«ã2çªç®ã®2ãã€ãã¯ãããã¯å ã®èŠçŽ ã®æ°ã§ã3çªç®ã®2ãã€ãã¯æåã®èŠçŽ ã®é·ãã§ãïŒCOUNTé¢æ°ã¯5ãã€ãã§ãïŒ...ïŒ
- ãã·ã¢èªïŒ0184 5602 0400 ...ïŒ2çªç®ã®2ãã€ãã¯èŠçŽ ã®æ°ã3çªç®ã®2ãã€ãã¯æåã®èŠçŽ ã®é·ãïŒCOUNTé¢æ°ã¯4ãã€ãïŒ...ïŒ
ããããããã€ãã®çµè«ãå°ãåºãããŸããããããã¯èšè¿°ã®æåã®2ãã€ãã¯ãšã³ã³ãŒãã§ãã æåã®ãã€ãã0ã®å Žåããã®ãããã¯ã®ããã¹ãã¯Unicode LEã§èšè¿°ãããããã§ã¯ãã¹ãŠãåçŽã§ãã ãšã³ã³ãŒãã®æåã®ãã€ãã01ã®å Žåã2çªç®ã®ãã€ãã調ã¹ãå¿ èŠããããŸãã 2çªç®ã®ãã€ã= 00ã®å Žåãããã¹ãã¯åçŽãªUTF-8ãšã³ã³ãŒãã§ãšã³ã³ãŒããããŸããããã§ããé ãæ©ãŸãå¿ èŠã¯ãããŸããã ãããã2çªç®ã®ãã€ãã0ã§ãªãå Žåã¯ã©ãã§ããããïŒ
æåã¯ãèŸæžãã³ã³ãã€ã«ããã ãã§ãã2çªç®ã®ãã€ãã®å€ã¯ãUTF-8ããŒãã«ã®ãªãã»ããã§ãã ããã¯ããã«ç§ãéå±ãããç§ã¯ãã¿ãŒã³ãæ¢ãå§ããŸããã UTF-8ããŒãã«ã®ãªãã»ããã¯ãoffset =ïŒbyte2-80hïŒ* 4 + C0hã®ããã«å®çŸ©ã§ããããšãããã«æããã«ãªããŸããã å¯äžã®åé¡ã¯ããšã³ã³ãŒãã£ã³ã°ã®ã°ã«ãŒãã«ãã£ãŠã¯ãC0hãå¥ã®çªå·ã«å€æŽããå¿ èŠãããããšã§ãã
ãã®çµæãããã¹ãå€æé¢æ°ã¯æ¬¡ã®ããã«ãªãå§ããŸããã
CïŒã³ãŒã
#region Convert int GetCharSize(int blockIndex) { if(block2Encoding[blockIndex][0] == 0) return 2; if(block2Encoding[blockIndex][0] == 1) return 1; if (block2Encoding[blockIndex][0] == 2) return 2; if (block2Encoding[blockIndex][0] == 3) return 1; return 1; } byte[] Convert(byte[] array, int blockIndex) { byte encodingByte1 = block2Encoding[blockIndex][0]; byte encodingByte2 = block2Encoding[blockIndex][1]; if(encodingByte1 == 0 || encodingByte1 == 2) return Convert0000(array); if(encodingByte2 < 0x80) return ConvertFromUTF8(array, 0x00, 0xC2); int d = encodingByte2 - 0x80; d *= 4; byte byte1; byte byte2; if(d < 0x20) { byte1 = 0; byte2 = (byte) (0xC0 + d); } else if(d < 0x40) { byte1 = 0xE0; byte2 = (byte) (0xA0 + (d - 0x20)); } else { d -= 0x40; byte1 = (byte) (0xE1 + d / 0x40); byte2 = (byte) (0x80 + d % 0x40); } return ConvertFromUTF8(array, byte1, byte2); } byte[] ConvertFromUTF8(byte[] array, byte byte1, byte byte2) { List<byte> result = new List<byte>(); foreach(byte b in array) { if(b <= 0xFF / 2) result.Add(b); else { if(byte1 != 0) result.Add(byte1); byte d = (byte) (byte2 + (b - 1) / 0xBF); result.Add(d); d = b; if(b >= 0xC0) { d = (byte) (b - 0xC0 + 0x80); } result.Add(d); } } return result.ToArray(); } byte[] Convert0000(byte[] array) { return Encoding.Convert(Encoding.Unicode, Encoding.UTF8, array); } #endregion
æ žå¿ã«å°éãã
ãã®ãã¹ãŠã®åŸãXLLEX.DLLãã¡ã€ã«ãããã¹ãŠã®ããŒã«ã©ã€ãºãããããã¹ããæ£ç¢ºãã€æ£ç¢ºã«æœåºããããšã¯ãã§ã«å¯èœã§ãããããã®æ¹æ³ã¯é¢æ°ãšåŒæ°XLINTL32.DLLã®èª¬æãå«ããã¡ã€ã«ã«ã¯å®å šã«äžé©åã§ããã ããã§ã¯ãæåããã»ãšãã©ãã¹ãŠãå§ããªããã°ãªããŸããã§ããããããã¯ãã§ã«ç°¡åã§ããã
æåã«ãXLINTL32.DLLãã¡ã€ã«ã§ãXLLEX.DLLãã¡ã€ã«ã®ããŒã¿ã«æ¢ã«éŠŽæã¿ãããã䌌ãŠãããã®ãèŠã€ããããšããŸããã ããªãã¿ã®ç»åã¯ããªãã»ãã0459hããå§ãŸããŸããã
ã€ãŸã 04B1hããã¯ãXLLEX.DLLãã¡ã€ã«ãšåããããã¯ã®èª¬æããããŸãããããã®ãªãã»ãããè¶ ãããšããã¹ãŠãã©ããããããç解ã§ããŸããã§ããã ãŸãããªãœãŒã¹ã®ãã¹ãŠã®ããã¹ãããXLLEX.DLLãã¡ã€ã«ã®åæã«åºã¥ããŠå°åºãããèŠåã«åŸã£ãŠããããã§ã¯ãããŸããã
å°æ¥ã2çªç®ã®ã¿ã€ãã®ãããã¯ãšããŠèªèããããšãæ¢ã«åŠãã ãããã¯ãšãæåã®ã¿ã€ãã®ãããã¯ãåŒã³åºãæ¹æ³ããŸã ããããªããããã¯ã決å®ãããŸããã ãããã¯ãXLINTL32.DLLãã¡ã€ã«ã®2çªç®ã®ã¿ã€ãã®ãããã¯ã®äžã«ãããŸãã
æåã®ã¿ã€ãã®ãããã¯ã®ããã¹ãã¯ã2çªç®ã®ã¿ã€ãã®ãããã¯ã®ãããã®çµããã®ã»ãŒçŽåŸããå§ãŸããŸãããæåã®ã¿ã€ãã®ãããã¯ã®ãããããããã«å«ãŸããŠããå Žæãããã³æåã®ã¿ã€ãã®ãããã¯å ã®ããã¹ãã»ãã¬ãŒã¿ãŒã®æ±ºå®æ¹æ³ãèŠã€ããããšã¯æ®ããŸãã ç 究ã®ããã«ããã®ãããã¯ãéžæãããŸããïŒ
ãã®ãããªç·ã¯ããã«ãããã³ããŒãããã³è²Œãä»ããããå°å·ãããã°ã©ãçšããªã©ã§æ確ã«è¡šç€ºãããŸãã ããã«ããŒããšå¢å ããå€ã®ãç¹æ§ãã©ããŒã16é²ã³ãŒãã§è¡šç€ºãããŸãã ãã®ã©ããŒã®æåã®2ã€ã®å€-46hãš6Eh-10é²æ°40ã§ã®ãããã®å·® ããã¹ãã¯Unicode LEã§æ瀺çã«èšå®ããããåãåããã³ããŒã貌ãä»ããã®é·ãã¯20 * 2 = 40ã«ãªããŸããåæããŸãã å¥ã®å€ã®ãã¢ããã§ãã¯ããŠã¿ãŸãããïŒ78h-6Eh = 10/2 = 5-ãå°å·ãã®æ£ç¢ºãªé·ãã ãªãã»ãã07BE66hããæå³ã®ããããã¹ãã®å é ãŸã§ãã¹ãŠã®ãã€ããçŸããæžãæããŸãã
00 46000000
00 6E000000
00 78000000
...
FF E2020000
çµæã®ã¹ããŒãã¡ã³ãã®åèšã®é·ãã¯ã07BEABh-07BE66h + 1 = 46h-æ¢ã«ãã£ãå Žæã§ãã æåã®ã¿ã€ãã®ãããã¯å ã®èŠçŽ ã®èª¬æã¯æ¬¡ã®ããã«ãªããŸãã1ãã€ãã¯èŠçŽ ã®ã¿ã€ãã4ãã€ãã¯ãã®ãããã¯ã®å é ããã®èŠçŽ ã®ãªãã»ããã§ãã åŸã§å€æããããã«ãæåã®ã¿ã€ãã®ãããã¯ã®èŠçŽ ã®ã¿ã€ãã¯ã00hïŒãŠãã³ãŒãã®ãã¬ãŒã³ããã¹ãã0Ah-ããã€ãã®ãããŸããªkrakozyabryãFFh-ãã®ãããã¯ã®æåŸã®èŠçŽ ïŒã§ãã
æåŸã«ããªãœãŒã¹ããããŒãåŠçãããã¹ãŠã®ãããã¯ã®ãªãã»ãããã©ã®ããã«æ±ºå®ããããã調ã¹ãŸãã
æåã«ã2çªç®ã®ã¿ã€ãã®ãã¹ãŠã®ãããã¯ã®èª¬æã¯ãªãã»ãã0A67hã§çµããããªãã»ãã0459hã§å§ãŸãããšãæãåºããã®ã§ã2çªç®ã®ã¿ã€ãã®ãããã¯ã®èª¬æã®é·ãã¯0A67h-0459h + 1 = 060Fhã§ããã0455hã«ã¯4ãã€ãã®çªå·060BhããããŸãïŒ060Bh + 4 = 060Fh ã 455hã«ã¯ã2çªç®ã®ã¿ã€ãã®ãããã¯èšè¿°ã»ã¯ã·ã§ã³ã®é·ããèšé²ãããŠããããšãããããŸãã
ãªãœãŒã¹ã®å é ããã®æåã®ã¿ã€ãã®ãããã¯ã®å€äœãã©ã®ããã«èšè¿°ãããããç解ããããã«ãæåã®ã¿ã€ãã®åãããã¯ã«ã€ããŠããã®ãããã¯ã®å§ãŸãã®å€äœãšãã®é·ãã®è¡šãã³ã³ãã€ã«ããããšã決å®ãããŸããã
æåã®ã¿ã€ãã®æåã®ãããã¯ã¯ã2çªç®ã®ã¿ã€ã-0A68hã®ãããã¯ã®èšè¿°ãçµãããšããããå§ãŸããŸãã
ãªãã»ãã | é·ã |
---|---|
0A68h | 011Ah |
0B82h | 00CEh |
0C50h | 0148h |
01E8hïŒãªãã»ãã25hïŒããæ°å€011AhïŒãªãã»ãã21hïŒãæžç®ããŠã¿ãŸãããïŒ01E8h-011Ah = CEhã2çªç®ã®ãããã¯ã®é·ãã 楜ãã¿ïŒ01E8hïŒãªãã»ãã25hïŒãã0330hïŒãªãã»ãã29hïŒãåŒãïŒ0330h-01E8 = 0148hãããã³011Ah-æåã®ãããã¯ã®é·ãã®ããã«èŠããŸãã 1Dhãªãã»ãããããæåã®ã¿ã€ãã®ãããã¯ã®ãªãã»ããã®èšè¿°ãããããšãããããŸãã ãããã¯ã2çªç®ã®ã¿ã€ãã®ãããã¯ã®èšè¿°ã®çµãããããããã¯ã®å§ãŸãã®ãªãã»ããã®åœ¢åŒã§èšé²ãããŸãïŒãŸãã¯ãããã¯ã®å 容ãå«ãã»ã¯ã·ã§ã³ã®å§ãŸã-ããããã䟿å©ã§ãïŒã 04hãš1Dã®éã®ãã€ãã®çš®é¡ãç解ããããšã¯æ®ã£ãŠããŸãã 1DïŒæåã®ã¿ã€ãã®ãããã¯ã®ãªãã»ããã®èšè¿°ã®å§ãŸãïŒãš0455hïŒ2çªç®ã®ã¿ã€ãã®ãããã¯ã®èšè¿°ã®é·ããæ ŒçŽããããªãã»ãããã€ãŸãæåã®ã¿ã€ãã®ãããã¯ã®èšè¿°ã®çµããïŒãåŒããšïŒ0455h-1D = 0438hãã¡ããã©ãã®ãããªæ°ã¯ãªãã»ãã19hã«ãããŸãã 04hãã19hãŸã§ã®æ®ãã®21ãã€ãã«ããã®ã¯ãç§ã«ã¯è¬ã§ãã ã¯ããç¹ã«ç解ããããããŸããã§ããã ãã¹ãŠã®ãªãã£ã¹ããŒã«ãªãŒãŒã·ã§ã³ãã¡ã€ã«ã§ããã®ãªãã»ããã¯åãã§ãã
Microsoft OfficeããŒã«ãªãŒãŒã·ã§ã³ãã¡ã€ã«ãèªã¿åãããã®ç§ã®ããã°ã©ã ïŒ I. Diskãžã®ãªã³ã¯
UPDïŒ2016幎1æ16æ¥
æåã®ã¿ã€ãã®ãããã¯ã¯ããã¡ã€ã«ã®æåŸã«æžã蟌ãŸããè¿œå ã®èŸæžã§ãšã³ã³ãŒããããããšãããããšãå€æããŸããã ã©ãããããã¯ãã¡ã€ã«ãµã€ãºãæžããããã«è¡ããã èŸæžã«ã¯ã1ãã€ãã§è¡šãããå€ãã®æåãå«ããããšãã§ããŸãã å®éã«ã¯ããªã³ã¯ã¯ãœãŒã¹ã³ãŒããæŽæ°ããŠããŸãã
çããã¡ã€ã«æ§é ã®ä»æ§
4ãã€ã-ãªãœãŒã¹ãµã€ãº
21ãã€ã-å声ã§ã¯ãªã
4ãã€ã-ã¿ã€ã1ã®ãããã¯æ°* 4 =ã¿ã€ã1ã®ãããã¯ã®ããããèšè¿°ãããã€ãæ°
*æåã®ã¿ã€ãã®ãããã¯ãããã®èª¬æã®å§ãŸã*
4ãã€ã-ãããã¯èšè¿°ã®çµããããã®ã¿ã€ã1ãããã¯ã®ãªãã»ããã é£æ¥ãã2ã€ã®å€ã®éãã¯ãã¿ã€ã1ãããã¯ã®é·ãã§ãã
*æåã®ã¿ã€ãã®ãããã¯ãããã®èª¬æã®çµãã*
4ãã€ã-ã¿ã€ã2ã®ãããã¯ã®ããããèšè¿°ãããã€ãæ°=ã¿ã€ã2ã®ãããã¯æ°* 17ãã€ã
* 2çªç®ã®ã¿ã€ãã®ãããã¯ãããã®èª¬æã®å§ãŸã*
1ãã€ã-ãããã¯ã¿ã€ã
2ãã€ã-ã¿ã€ã2ã®ãããã¯ã®èŠçŽ æ°
4ãã€ã-ããããŸããã ç§ã®æèŠã§ã¯ãåžžã«0ã§ãããäºçŽãããŠããå¯èœæ§ããããŸãã
2ãã€ã-ãããã¯çªå·2
4ãã€ã-2çªç®ã®ã¿ã€ãã®ãããã¯é·
4ãã€ã-ãããã¯èšè¿°ã®æåŸãã2çªç®ã®ã¿ã€ãã®ãããã¯ã®ãªãã»ãã
* 2çªç®ã®ã¿ã€ãã®ãããã¯ãããã®èª¬æã®çµãã*
4ãã€ã-ã¿ã€ã2ã®ãããã¯ã®ããŒã¿é·
*æåã®ã¿ã€ãã®ãããã¯*
1ãã€ã-èŠçŽ ã¿ã€ã-FFã®å Žå-ãã®èŠçŽ ã¯ãã®ãããã¯ã®æåŸã00ãUnicodeã®ãã¬ãŒã³ããã¹ãã®å Žåã0Aãxsã®å Žå
4ãã€ã-ãã®ãããã¯ã®å é ããã®èŠçŽ ãªãã»ãã
次ã®ã¢ã€ãã
*æåã®ã¿ã€ãã®ãããã¯ã®çµãã*
* 2çªç®ã®ã¿ã€ãã®ãããã¯*
1ãã€ã-ãšã³ã³ãŒãã®æåã®ãã€ã
1ãã€ã-ãšã³ã³ãŒãã®2çªç®ã®ãã€ã
2ãã€ã-ãããã¯å ã®èŠçŽ ã®æ°
* 2çªç®ã®ã¿ã€ãã®ãããã¯ã®èŠçŽ ã®ããã*
2ãã€ã-ãããã¯èŠçŽ ã®å é ããã®çžå¯Ÿãªãã»ããã 2çªç®ã®èŠçŽ ããå§ãŸããŸãã ãªãã»ãããFFFFãè¶ ããå Žåããªãã»ããã®åŸã«ããã«2ãã€ããè¿œå ãããŸã= FFFFãååŸããå¿ èŠãããåæ°ã
* 2çªç®ã®ã¿ã€ãã®ãããã¯ã®èŠçŽ ã®ãããã®çµãã*
* 2çªç®ã®ã¿ã€ãã®ãããã¯ã®çµãã*
*********************
ã³ãŒãã£ã³ã°ã«ããïŒ
ãšã³ã³ãŒãã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
2çªç®ã®ãã€ã== 0ã®å Žåãããã¯åçŽãªUnicodeãªãã«ãšã³ãã£ã¢ã³ã§ãã
2çªç®ã®ãã€ã== 1ã®å ŽåãèŠçŽ ã¯UTF8ã§ãšã³ã³ãŒãããããªãã»ããã¯æåã®ãã€ãã§æ±ºå®ã§ããŸãã
*********************
2çªç®ã®ã¿ã€ãã®ãããã¯ã¯ãããã«ããã€ãã®ã¿ã€ãã§ã
2ã3ã4-éåžžã®è¡
1-WordBasicããŒãã«ã®ããã«èŠããŸãããæåã«ããã€ãã®ã€ã³ããã¯ã¹ã®ããŒãã«ããããŸãïŒWordBasicé¢æ°ã®ã€ã³ããã¯ã¹ãããããŸããïŒ
21ãã€ã-å声ã§ã¯ãªã
4ãã€ã-ã¿ã€ã1ã®ãããã¯æ°* 4 =ã¿ã€ã1ã®ãããã¯ã®ããããèšè¿°ãããã€ãæ°
*æåã®ã¿ã€ãã®ãããã¯ãããã®èª¬æã®å§ãŸã*
4ãã€ã-ãããã¯èšè¿°ã®çµããããã®ã¿ã€ã1ãããã¯ã®ãªãã»ããã é£æ¥ãã2ã€ã®å€ã®éãã¯ãã¿ã€ã1ãããã¯ã®é·ãã§ãã
*æåã®ã¿ã€ãã®ãããã¯ãããã®èª¬æã®çµãã*
4ãã€ã-ã¿ã€ã2ã®ãããã¯ã®ããããèšè¿°ãããã€ãæ°=ã¿ã€ã2ã®ãããã¯æ°* 17ãã€ã
* 2çªç®ã®ã¿ã€ãã®ãããã¯ãããã®èª¬æã®å§ãŸã*
1ãã€ã-ãããã¯ã¿ã€ã
2ãã€ã-ã¿ã€ã2ã®ãããã¯ã®èŠçŽ æ°
4ãã€ã-ããããŸããã ç§ã®æèŠã§ã¯ãåžžã«0ã§ãããäºçŽãããŠããå¯èœæ§ããããŸãã
2ãã€ã-ãããã¯çªå·2
4ãã€ã-2çªç®ã®ã¿ã€ãã®ãããã¯é·
4ãã€ã-ãããã¯èšè¿°ã®æåŸãã2çªç®ã®ã¿ã€ãã®ãããã¯ã®ãªãã»ãã
* 2çªç®ã®ã¿ã€ãã®ãããã¯ãããã®èª¬æã®çµãã*
4ãã€ã-ã¿ã€ã2ã®ãããã¯ã®ããŒã¿é·
*æåã®ã¿ã€ãã®ãããã¯*
1ãã€ã-èŠçŽ ã¿ã€ã-FFã®å Žå-ãã®èŠçŽ ã¯ãã®ãããã¯ã®æåŸã00ãUnicodeã®ãã¬ãŒã³ããã¹ãã®å Žåã0Aãxsã®å Žå
4ãã€ã-ãã®ãããã¯ã®å é ããã®èŠçŽ ãªãã»ãã
次ã®ã¢ã€ãã
*æåã®ã¿ã€ãã®ãããã¯ã®çµãã*
* 2çªç®ã®ã¿ã€ãã®ãããã¯*
1ãã€ã-ãšã³ã³ãŒãã®æåã®ãã€ã
1ãã€ã-ãšã³ã³ãŒãã®2çªç®ã®ãã€ã
2ãã€ã-ãããã¯å ã®èŠçŽ ã®æ°
* 2çªç®ã®ã¿ã€ãã®ãããã¯ã®èŠçŽ ã®ããã*
2ãã€ã-ãããã¯èŠçŽ ã®å é ããã®çžå¯Ÿãªãã»ããã 2çªç®ã®èŠçŽ ããå§ãŸããŸãã ãªãã»ãããFFFFãè¶ ããå Žåããªãã»ããã®åŸã«ããã«2ãã€ããè¿œå ãããŸã= FFFFãååŸããå¿ èŠãããåæ°ã
* 2çªç®ã®ã¿ã€ãã®ãããã¯ã®èŠçŽ ã®ãããã®çµãã*
* 2çªç®ã®ã¿ã€ãã®ãããã¯ã®çµãã*
*********************
ã³ãŒãã£ã³ã°ã«ããïŒ
ãšã³ã³ãŒãã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
2çªç®ã®ãã€ã== 0ã®å Žåãããã¯åçŽãªUnicodeãªãã«ãšã³ãã£ã¢ã³ã§ãã
2çªç®ã®ãã€ã== 1ã®å ŽåãèŠçŽ ã¯UTF8ã§ãšã³ã³ãŒãããããªãã»ããã¯æåã®ãã€ãã§æ±ºå®ã§ããŸãã
*********************
2çªç®ã®ã¿ã€ãã®ãããã¯ã¯ãããã«ããã€ãã®ã¿ã€ãã§ã
2ã3ã4-éåžžã®è¡
1-WordBasicããŒãã«ã®ããã«èŠããŸãããæåã«ããã€ãã®ã€ã³ããã¯ã¹ã®ããŒãã«ããããŸãïŒWordBasicé¢æ°ã®ã€ã³ããã¯ã¹ãããããŸããïŒ
é¢çœãã§ã
Excelé¢æ°ã®ååã®äžã«ã¯ãããã¥ã¡ã³ãã®ã©ãã«ãèšèŒãããŠããªããã®ããããæ°åŒã§äœ¿çšããããšã¯ã§ããŸããã ååãç§ã®ããã«ããŒã«ã©ã€ãºãããŠããçç±ã¯ãŸã è¬ã§ãã ãããã®æ©èœã®äžéšã次ã«ç€ºããŸãã
- GOTOïŒåç §ïŒ;
- HALTïŒcancel_closeïŒ;
- ECHOïŒè«çïŒ;
- WINDOWSïŒtype_numãmatch_textïŒ;
- INPUTïŒmessage_textãtype_numãtitle_textãdefaultãx_posãy_posãhelp_refïŒ;
- ADD.TOOLBARïŒbar_nameãtool_refïŒã
PS
å¬ã®é·ãäŒæã§ãç§ã¯ããã«éå±ã«ãªããExcelããã©ã³ãã«åºã¥ããŠè¡ã®é«ããèšç®ããæ¹æ³ã決å®ãå§ããŸããã OllyDbgãšIDAã§æ°åæéãè²»ãããåŸãã»ãŒ2,000è¡ã®CïŒã³ãŒããçãŸããŸãããããã«ããããã¹ãŠã®ãã©ã³ãããµã€ãºãããã³ãã©ã¡ãŒã¿ãŒã«ã€ããŠè¡ã®é«ããExcelãš100ïŒ äžèŽããŸãã ããã«ãExcelå éšã®ããã€ãã®èå³æ·±ãæ©èœãæ確ã«ãªããŸãããããã®ãããã¯ã¯ãã§ã«å¥ã®èšäºã®ããã®ãã®ã§ãã