
ç§ãã¡ã®äŒæ¥ã§ã¯ãã¿ã¹ã¯ã¯éåžžã«éèŠãªãã¡ã€ã«ã転éããéã®ã»ãã¥ãªãã£ã¬ãã«ãé«ããããšã§ããã äžè¬ã«ãåèªããšã«ãäžå®ã®éãèç©ããŠãããããscpã䜿çšããŠè»¢éããeTokenã¿ã€ãã®ãªã¢ãŒãã³ã³ãããŒã«ã«èªèšŒçšã®èšŒææžã®ç§å¯ããŒãä¿åããå¿ èŠããããšããçµè«ã«éããŸããã
ã¢ã€ãã¢ã¯è¯ãããã«èŠããŸãããããããå®è£ ããæ¹æ³ã¯ïŒ ãããããã¯ã©ã€ã¢ã³ããã³ã¯ãäŒèšã§åããŠããªãã£ãããšãæãåºããŸããã話ãããååetsdk.dllã®ã©ã€ãã©ãªããªãããšãåªãã奜å¥å¿ãç§ã襲ãããããéžãã ã®ã§ãã
äžè¬ã«ãéçºäŒç€Ÿã¯Webãµã€ãã§SDKãé åžããŠããŸããããã®ããã«ã¯ãœãããŠã§ã¢éçºäŒç€ŸãšããŠç»é²ããå¿ èŠããããããã¯æããã«ç§ã§ã¯ãããŸããã ã€ã³ã¿ãŒãããã§ããã¥ã¡ã³ããèŠã€ããããšãã§ããŸããã§ãããã奜å¥å¿ãåã¡ããããèªåã§ç解ããããšã«ããŸããã å³æžé€š-ããã«ãããŸããæéããããŸãã誰ãç§ãæ¢ããã®ã§ããïŒ
ç§ãæåã«ããããšã¯ãNirSoft DLL Export Viewerãèµ·åããããšã§ãã©ã€ãã©ãªã«ãã£ãŠãšã¯ã¹ããŒããããé©åãªé¢æ°ã®ãªã¹ãã衚瀺ãããŸããã ãªã¹ãã¯èŠæ ããè¯ããããŒã¯ã³ãæäœãããšãã®ã¢ã¯ã·ã§ã³ã®ããžãã¯ãšã·ãŒã±ã³ã¹ããã¬ãŒã¹ãããŸãã ãã ãã1ã€ã®ãªã¹ãã§ã¯äžååã§ãããã©ã®ãã©ã¡ãŒã¿ãŒããã©ã®é åºã§è»¢éããçµæãååŸããããç解ããå¿ èŠããããŸãã

ãããŠãç§ãã¡ã®è¥ããæãåºããŠOllyDbgããŒãžã§ã³2.01ãèµ·åããã¯ã©ã€ã¢ã³ããã³ã¯ã§äœ¿çšãããccom.dllæå·ã·ã¹ãã Crypto-Comã©ã€ãã©ãªãããŒããããã®äžã«etsdk.dllã©ã€ãã©ãªã䜿çšããŠããã®æ¹æ³ãç解ãå§ããŸãã
å®è¡å¯èœãã¡ã€ã«ããªããããã©ã€ãã©ãªã¯Ollyãã³ãã«ã®loaddll.exeã䜿çšããŠããŒãããããããå®å šãªãããã°ã倢èŠãããšããã§ããŸããã å®éããããã¬ãŒãéã¢ã»ã³ãã©ãŒãšããŠäœ¿çšããŸãïŒã¯ããIDAããããŸãããç§ã¯IDAã䜿çšããããšã¯ãªããäžè¬ã«æ¯æãããŸãïŒã
ã³ã³ããã¹ãã¡ãã¥ãŒãåŒã³åºããŠã[æ€çŽ¢]> [ãã¹ãŠã®ã¢ãžã¥ãŒã«éåŒã³åºã]ãéžæããååã§çµæãæŽçããET *ã§å§ãŸãé¢æ°ãæ¢ããŸãããèŠã€ãããŸããã ããã¯ãã©ã€ãã©ãªãåçã«æ¥ç¶ããããšãæå³ãããããåããªã¹ãã§GetProcAddressåŒã³åºããæ¢ãããããã調ã¹ãŠãç¹å®ã®è©Šã¿ã§ETReadersEnumOpené¢æ°ã®ã¢ãã¬ã¹ãèŠã€ããããšããŸãã

æªããªãã åä¿¡ããé¢æ°ã¢ãã¬ã¹ã¯ãMOV DWORD PTR DSã¿ã€ãã®ã³ãã³ãã«ãã£ãŠã¡ã¢ãªã«ä¿åãããŸãïŒ[10062870]ãEAXããã®ãããªåã³ãã³ããéžæããã³ã³ããã¹ãã¡ãã¥ãŒãåŒã³åºãã[åç §ã®æ€çŽ¢]> [ã¢ãã¬ã¹å®æ°]ãéžæããŸãã éãããŠã£ã³ããŠã«ãçŸåšã®ã³ãã³ããšé¢æ°åŒã³åºãã®ãã¹ãŠã®å Žæã衚瀺ãããŸãã ãããã調ã¹ãŠãåŒã³åºãããŠããé¢æ°ã®ååãã³ã¡ã³ãã«ããŠãã ãããããã«ãããå°æ¥ã®ç掻ã楜ã«ãªããŸãã
ãããã®é¢æ°ãé©åã«åŒã³åºãæ¹æ³ãç解ããæãæ¥ãŸããã æåããå§ããŠãèªè ã«é¢ããæ å ±ãååŸããæ¹æ³ãåŠã³ãŸãããã ETReadersEnumOpené¢æ°ãåŒã³åºãå Žæã«æž¡ããæ®ã£ãã³ã¡ã³ãã®ãããã§ãETReadersEnumNextãšETReadersEnumNextãšETReadersEnumCloseã®äž¡æ¹ã1ã€ã®é¢æ°ã«éäžããŠããããšãããããŸã-æããã«ããªãŒããŒã®ãªã¹ããååŸããããšã«åŸäºããŠããŸãã
ãã¹ãŠã®é¢æ°ã¯cdeclåŒã³åºãèŠçŽã䜿çšããŸãã ããã¯ãçµæãEAXã¬ãžã¹ã¿ã«è¿ããããã©ã¡ãŒã¿ãå³ããå·Šã«ã¹ã¿ãã¯ãééããããšãæå³ããŸãã ããã«ãããã¯ããã¹ãŠã®ãã©ã¡ãŒã¿ãŒãããã«ã¯ãŒãã®æ¬¡å ãæã¡ãããã§ãªãå Žåã¯æ¡åŒµããããããç§ãã¡ã®ç掻ãç°¡çŽ åãããããšãæå³ããŸãã
ETReadersEnumOpenåŒã³åºãã®è¿åãèŠãŠã¿ãŸãããïŒ

1ã€ã®ãã©ã¡ãŒã¿ãŒãæž¡ãããŸããããã¯ãããŒã«ã«å€æ°ãžã®ãã€ã³ã¿ãŒã§ããåŒã³åºãã®åŸãçµæã0ã§ãªãå Žåãå¶åŸ¡ã¯æ瀺çãªãããã°ã³ãŒãã«è»¢éãããçããå Žåã¯å ã«é²ã¿ãŸãïŒZFãã©ã°ãšOFãã©ã°ãçããããã©ã°ãOFã³ãã³ãTESTã¯åžžã«0ã«ãªã»ãããããŸãã ãããã£ãŠãç§ã¯æ¬¡ã®é åºãçµã³ãŸãïŒå€æ°ã¯åç §ã«ãã£ãŠé¢æ°ã«æž¡ãããããã«ããã€ãã®åæèå¥åãè¿ããããã®çµæãé¢æ°ã¯ãšã©ãŒã³ãŒããŸãã¯ãšã©ãŒããªãå Žåã¯0ãè¿ããŸãã
ETReadersEnumNextã«ç§»åããŸãã

2ã€ã®ãã©ã¡ãŒã¿ãŒãæž¡ãããŸãïŒETReadersEnumOpenïŒåæã®èå¥åïŒã䜿çšããŠååŸããå€æ°ã®å€ãšãæããã«æ¬¡ã®å€ãè¿ãããããŒã«ã«å€æ°ãžã®ãã€ã³ã¿ãŒã ããã«ããã©ã¡ãŒã¿ã¯å³ããå·Šã«é çªã«è»¢éããããããæåã®ãã©ã¡ãŒã¿ãèå¥åã§ããã2çªç®ãçµæãã€ã³ã¿ã§ãã ãšã©ãŒã³ãŒãã¯åŒãç¶ãEAXãä»ããŠè¿ãããã«ãŒãã®èšèšããå€æãããšããšã©ãŒãå ±åããããã ãã§ãªãããªã¹ããããã®ããªãããšã瀺ãããã«ã䜿çšãããŸãã
ETReadersEnumCloseã¯ããã«åçŽã§ããåæèå¥åãæž¡ãããŸãããçµæã¯èª°ã«ãè¿·æããããŸããã

ãããã®æ©èœã®ç解ããã¹ãããæãæ¥ãŸããã ããã§ç§ã¯äœè«ãäœåãªããããŸãããäºå®ãç§ã¯å°éè·ã®ã·ã¹ãã 管çè ã§ããããããã£ãŠçé¢ç®ãªã³ã³ãã€ã«ãããããã°ã©ãã³ã°èšèªã¯å®å šã«ç§ã®ãã®ã§ã¯ãããŸããã ä»äºã«ã¯ãLinuxçšã®BashãšPythonãããã«å¿ èŠã§ãããWindowsã§äœãããã°ããç©ã¿éããå¿ èŠãããå Žåã¯ãæ°ã«å ¥ã£ãAutoItã䜿çšããŸãã
ç§ã®ãã©ã¹ã¯æ¬¡ã®ãšããã§ãã
- ã¢ããªãã£ïŒã€ã³ã¿ãŒããªã¿ãŒãšã¹ã¯ãªãããšãã£ã¿ãŒã¯å®å šã«ç§»æ€å¯èœïŒã
- GUIã䜿çšããç°¡åãªäœæ¥ã
- å€éšã©ã€ãã©ãªãæ¥ç¶ããæ©èœïŒååã§ã¯ãªãã«ããŠãïŒïŒããã°ã©ãã³ã°èšèªã«ãšã£ãŠã¯äºçŽ°ãªããšã¯ç¥ã£ãŠããŸãããã¹ã¯ãªããèšèªã«ãšã£ãŠã¯ããã»ã©éèŠã§ã¯ãããŸããïŒ
- ã¹ã¯ãªãããå®è¡å¯èœãã¡ã€ã«ã«çµã¿èŸŒãæ©èœã
çæïŒ
- æé»çãªåå€æãšè¡šãããåã®æ°ãäžååã§ãã
- ã¬ã³ãŒãïŒããã³é£æ³é åïŒãšOOPã®æ¬ åŠïŒäžè¬çã«ã¯ååšããŸãããCOMãªããžã§ã¯ãã«å¯ŸããŠã®ã¿ååšãããããååšããŸããïŒã
ãã®äœè«ã¯ãAutoItã§é¢æ°ã䜿çšããäŸãäœæãããšããäºå®ã«ãããŸãã èšèªã§ã®æé»çãªåä»ãã«é¢é£ããŠãå€éšã©ã€ãã©ãªããé¢æ°ãåŒã³åºãããšã¯ããäžæ Œå¥œã«èŠããŸãããæ©èœããŸãã
å§ããŸãããïŒççŽã«èšã£ãŠãã©ã®é¢æ°ãã©ã®ãµã€ãºãè¿ãã®ãããããªãã®ã§ãæåã«å€§ããªãããã¡ãŒãäžããŠãäœãèµ·ãããèŠãŠã¿ãŸãããã éå§ããã³ãŒãïŒ
Dim $ETSdkDll=DllOpen('etsdk.dll') Dim $buf=DllStructCreate('BYTE[32]') Func PrintBuf($buf) For $i=1 To DllStructGetSize($buf) ConsoleWrite(Hex(DllStructGetData($buf,'buf',$i),2)&' ') Next ConsoleWrite(@CRLF) EndFunc ConsoleWrite('Buffer before: ') PrintBuf($buf) $result=DllCall($ETSdkDll,'DWORD','ETReadersEnumOpen', _ 'PTR',DllStructGetPtr($buf) _ ) ConsoleWrite('Buffer after: ') PrintBuf($buf) ConsoleWrite('Return value: '&$result[0]&@CRLF)
å®è¡ãããšã次ã®ãããªçµè«ãåŸãããŸãã
Buffer before: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Buffer after: 44 6F C8 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Return value: 0
æ°åå®è¡ãããšãæåã®4ãã€ãã®ã¿ãå€æŽãããŠããããšãããããŸããã€ãŸãã4ãã€ãæŽæ°ãèå¥åãšããŠäœ¿çšãããŸããã€ãŸãããã®é¢æ°ããã®ç¶æ ã«åŒã³åºãã³ãŒããã³ãŒã ããããšãã§ããŸãã
Func ETReaderEnumOpen() Local $id=DllStructCreate('DWORD') Local $result=DllCall($ETSdkDll,'DWORD','ETReadersEnumOpen', _ 'PTR',DllStructGetPtr($id) _ ) Return $result[0]?0:DllStructGetData($id,1) EndFunc
ETReadersEnumNexté¢æ°ã䜿çšããåæ§ã®å®éšã§ã¯ããããã¡ã®æåã®260ãã€ãã«ãªãŒããŒåãšãŒããå«ãŸããŠããããšã瀺ãããŸããã ãã®é¢æ°ãžã®é 次åŒã³åºãã¯ãã·ã¹ãã å ã®ãã¹ãŠã®ãªãŒããŒã«ãã£ãŠãªã¹ããããŸããïŒããšãã°ãruTokenã®äžã«3ã€ãäºåã«äœæãããŸããïŒã eTokenã®ãªãŒããŒã¯ãæ¥ç¶ãããŠããããŒã¯ã³ã®æ°ã«å¿ããŠåçã«äœæãããæãèå³æ·±ãããšã«ããããã¡ãŒã®261çªç®ã®ãã€ãã1ã«èšå®ãããŸããããã¯ãæããã«ããªãŒããŒãšã©ã€ãã©ãªã®äºææ§ã瀺ããŸãã éã¢ã»ã³ãã«ãããã³ãŒããèŠããšã261çªç®ã®ãã€ãã0ã«çããã¬ã³ãŒããåŠçãããŠããªãããšãããããŸãã ãã¹ãŠã®ãªãŒããŒã®ãããã€ããããã¡ãŒã®æåŸãŸã§ã®ä»ã®ãã¹ãŠã®ãã€ãã¯0ã§ãéãã¯ãããŸããã
ããã§ãèªè ãèŠã€ããŸããã次ã¯äœãç解ããå¿ èŠããããŸãã é¢æ°ã®ãªã¹ãã調ã¹ãåŸãåŒã³åºãã·ãŒã±ã³ã¹ã¯æ¬¡ã®ããã«ãã¹ãã§ãããšããçµè«ã«éããŸããïŒæåã«ç®çã®ãªãŒããŒããã€ã³ããããã®æ®µéã§æ¿å ¥ãããããŒã¯ã³ã«é¢ããäžè¬çãªæ å ±ãèŠã€ããŠãããã°ã€ã³ãããã®åŸãã¡ã€ã«ã·ã¹ãã ã«ã¢ã¯ã»ã¹ããŸãã ãããã£ãŠã次ã®ã€ã³ã©ã€ã³é¢æ°ã¯ETTokenBindãšETTokenUnbindã§ãã

ETTokenBindã¯è€éã§ç解ãã«ããããã«èŠããŸããããã°ããæãäžããåŸã2ã€ã®ãã©ã¡ãŒã¿ãŒãé¢æ°ã«æž¡ããããšããçµè«ã«éããŸãããæåã®ãã©ã¡ãŒã¿ãŒã¯328ãã€ãïŒ0x0148ïŒã®ãããã¡ãŒãžã®ãã€ã³ã¿ãŒã§ããã2çªç®ã¯ãªãŒããŒã®ååãæã€æååãžã®ãã€ã³ã¿ãŒã§ãã å®éšãéããŠããããã¡ã®æåã®4ãã€ãã§èå¥åãè¿ãããããšãããããŸããïŒä»¥éïŒãã€ã³ãã£ã³ã°èå¥åïŒã æ®ãã®ãããã¡ãå²ãåœãŠãããŠããã®ã¯ãªãã§ãã-ä»ã®ãšããã¯è¬ã§ãã ç§ãå®éšããªãããŒã¯ã³ããããã¡ã®æ®ãã®324ãã€ãã¯ãŒãã§æºãããããŸãŸã§ããã æå®ãããèå¥åã¯è«ççã§ãããETTokenUnbindããã³ETTokenRebindé¢æ°ã®åŒæ°ãšããŠæ£åžžã«äœ¿çšãããŸãã

è¡ã®æ¬¡ã®é¢æ°ã¯ETRootDirOpenã§ãã çµæãžã®ãã€ã³ã¿ãŒããã€ã³ãã£ã³ã°IDãããã³å®æ°ã®3ã€ã®ãã©ã¡ãŒã¿ãŒãå¿ èŠã§ãã ãã®æ©èœã«ã¯ããã€ãã®æ©èœããããŸãã
æåïŒãã®é¢æ°ã®è¿ãããçµæã¯ããŒãã«çããïŒæåïŒã ãã§ãªããäžäœ2ãã€ããæ°å€0x6982ã«çãããã©ããããã§ãã¯ãããçµæããã®æ°å€ã«çããå Žåãå¶åŸ¡ã¯é¢æ°ã«è»¢éãããç¶ããŠETTokenLoginãåŒã³åºããŠããåè©Šè¡ããŸãETRootDirOpenãåŒã³åºããŸãã ãã®ããšããã0x6982ã¯ãAuthorization Requiredããæå³ãããšã©ãŒã³ãŒãã§ãããšçµè«ä»ããããšãã§ããŸãã ä»åŸããã¡ã€ã«ããã©ã«ããŒãæäœããä»ã®ãã¹ãŠã®æ©èœã¯åãããã«é 眮ãããŸãã
2çªç®ïŒãã©ã¡ãŒã¿ãŒã®1ã€ãšããŠããã®é¢æ°ã¯å®æ°0xF007ãåããŸãã ã³ãŒãã«ã¯ä»ã®å®æ°ã䜿çšããåŒã³åºãã¯ãããŸããã ããããããã®å®æ°ã¯ããŒã¯ã³ïŒå€ãã®ã«ãŒããã©ã«ããŒïŒïŒã«æžã蟌ãŸããæ å ±ãäœããã®åœ¢ã§ç¹åŸŽä»ããŠããã®ã§ãããã 2ãã€ãå®æ°ã®ãã¹ãŠã®å€ã«å¯ŸããŠãã«ãŒããã©ãŒã¹ãå®è¡ããããšããŸããããããŒã¯ã³ã¯å€0x0001ã0xF001-0xF00Bã«ã®ã¿å¿çããŸããïŒã¡ãªã¿ã«ãèªèšŒãèŠæ±ããŸããã§ããïŒã åŸã§ãæ°ããåæåãããããŒã¯ã³ã§åããã©ã«ããŒã䜿çšã§ããããšãããããŸããã ããã«ã€ããŠãã°ããèããåŸãéçºè ã®èšç»ã«ãããšãããŸããŸãªã«ãŒããã©ã«ããŒãããŸããŸãªç®çã«äœ¿çšããã0xF007ã¯ããŒçšã§ãããšæžãããŠãããšããçµè«ã«éããŸããã
3çªç®ïŒé¢æ°ã«ãã£ãŠè¿ãããå€ã¯ã¹ã¯ãªãŒã³ã·ã§ããã«ã¯è¡šç€ºãããŸãããã以åã«å²ãåœãŠããã328ãã€ãã®ãããã¡ãŒã®äžå€®ã«æ»ããŸãããã®ãããã¡ãŒãããæ€èšäžã®ããŒã¯ã³ã«é¢é£ããããŸããŸãªèå¥åãšããŒã¿ãæ ŒçŽããæ§é ã§ãããšå€æã§ããŸãã
æ¿èªã®è©Šã¿ãçµãã£ãã®ã§ãä»åºŠã¯å¯ŸåŠããŸãã ETTokenLoginé¢æ°ã¯ããã€ã³ãã£ã³ã°èå¥åãšãããã¡ãŒãžã®ãã€ã³ã¿ãŒãšãã2ã€ã®ãã©ã¡ãŒã¿ãŒãåãåããŸãã æåã¯ãããã¡ãäœããã®çµæãåºåããããã«äœ¿çšããããšèããŸããããå®éšã¯æ¬¡ã®ã¢ã«ãŽãªãºã ã䜿çšãããããšã瀺ããŸããïŒãã€ã³ã¿ããŒããŸãã¯ç©ºã®æååãæãå Žåãã©ã€ãã©ãªã¯ãã¹ã¯ãŒããèŠæ±ããã€ã³ã¿ãŒãã§ãŒã¹ãŠã£ã³ããŠãæç»ãã空ã§ãªãæååãæãå Žå-ãã®æååãã¹ã¯ãŒããšããŠäœ¿çšãããŸãã ETTokenLogoutã¯ããã€ã³ãã£ã³ã°èå¥åãšãã1ã€ã®ãã©ã¡ãŒã¿ãŒã®ã¿ãåãå ¥ããŸãã
次ã®é¢æ°ã°ã«ãŒãïŒETDirEnumOpenãETDirEnumNextãããã³ETDirEnumCloseã ã³ãŒãã調ã¹ãã«ãããã解ãããšããããšãã§ããŸãã äžè¬ã«ããããã¯ETReadersEnum *ãšåãããã«æ©èœããã¯ãã§ãããå¯äžã®éãã¯ãçŸåšã®ãã©ã«ããŒã®èå¥åãETDirEnumOpenã«ãã©ã¡ãŒã¿ãŒãšããŠæž¡ãããããšã§ãã ãã§ãã¯-åäœããŸãã
ETFilesEnumOpenãETFilesEnumNextãããã³ETFilesEnumCloseé¢æ°ã°ã«ãŒãã¯ãåãæ¹æ³ã§æ©èœããããã«å¿ èŠãªã ãã§ãããããã確å®ã«æ€èšŒããããšã¯ã§ããŸããã ã©ãããã調æ»äžã®ããŒã¯ã³ã®ã«ãŒããã©ã«ããŒã«ãã¡ã€ã«ã¯ãªãããã§ããã€ãŸããETDirOpené¢æ°ã䜿çšããŠãã©ã«ããŒããªãŒãããã«æ·±ãæãäžããŸãã

ãã®APIã¯ãæåã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠçµæãè¿ããšããäŒçµ±ãåŒãç¶ãã§ããããã«æããããããä»åããããåœãŠã¯ãŸããšä»®å®ããŸãã 2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãé¢æ°ã«æž¡ãããåã«ãMOVZX EDIãDIã³ãã³ãã䜿çšããŠå€æŽãããŸãã åèªã¯ããã«ã¯ãŒãã«å±éãããŸãã æããã«ãããã¯4ãã€ãã®ãã©ã¡ãŒã¿ãŒã§2ãã€ãã®ãã©ã«ããŒåãæž¡ãããã«å¿ èŠã§ãã ããŠãç©äºã®ããžãã¯ã«ãããšã3çªç®ã®ãã©ã¡ãŒã¿ãŒã¯éããŠãããã©ã«ããŒã®èå¥åã§ãã è©ŠããŠã¿ãŸãã-å€æããŸããã ETDirCloseã¯é©ãããšãªãæšæž¬ã§ããŸãïŒ1ãã©ã¡ãŒã¿ãŒ-ãã©ã«ããŒèå¥åã
ãã®ãããããŒã¯ã³äžã®ãã¹ãŠã®ãã¡ã€ã«ãšãã©ã«ããŒããªã¹ãããã®ã«ååãªããšãåŠã³ãŸããã 次ã®ç°¡åãªã³ãŒãã§ãããè¡ããŸãïŒããã§ã¯DllCallãåŒã³åºããŸãããèšäºã®æåŸã«ããã¢ãžã¥ãŒã«ããã¹ãã®ãã¹ãŠã®é¢æ°ã«å¯Ÿå¿ããŸãïŒã
Func PrintDir($Id,$Prefix) Local $EnumId=ETDirEnumOpen($Id) While 1 Local $dir=ETDirEnumNext($EnumId) If @error Then ExitLoop ConsoleWrite($Prefix&'(dir)'&Hex($dir,4)&@CRLF) Local $DirId=ETDirOpen($dir,$Id) PrintDir($DirId,$Prefix&@TAB) ETDirClose($DirId) WEnd ETDirEnumClose($EnumId) $EnumId=ETFilesEnumOpen($Id) While 1 Local $file=ETFilesEnumNext($EnumId) If @error Then ExitLoop ConsoleWrite($Prefix&'(file)'&Hex($file,4)&@CRLF) WEnd ETFilesEnumClose($EnumId) EndFunc Local $EnumId=ETReaderEnumOpen() If $EnumId Then While 1 Local $reader=ETReaderEnumNext($EnumId) If @error Then ExitLoop If Not $reader[1] Then ContinueLoop Local $BindId=ETTokenBind($reader[0]) ConsoleWrite($reader[0]&':'&@CRLF) ETTokenLogin($BindId,'123456') Local $DirId=ETRootDirOpen($BindId) PrintDir($DirId,@TAB) ETDirClose($DirId) WEnd EndIf ETReaderEnumClose($EnumId)
ã³ã³ãœãŒã«ã§ã®çµæïŒ
Aladdin Token JC 0: (dir)1921 (dir)DDDD (file)0002 (file)0003 (file)0004 (file)0001 (file)A001 (file)B001 (file)C001 (file)AAAA (file)D001
ãããïŒ
ããŠããã©ã«ããéããŠè¡šç€ºããæ¹æ³ãåŠã³ãŸããããã¡ã€ã«ãéããŠèªãæ¹æ³ãåŠã³ãŸãããã ETFileOpenã¯3ã€ã®ãã©ã¡ãŒã¿ãŒãåãå ¥ãããããæåã«ETDirOpenãšåãããšãè©Šã¿ãŸããçµæããã¡ã€ã«åããã©ã«ããŒIDããã¬ãŒã¯ãªãïŒéçºè ã¯æåŸã®2ã€ã®ãã©ã¡ãŒã¿ãŒãéã«ããŸããã ãŸããå°ãªããšãETFileCloseã¯é©ãããšãªãåäœããŸãã
ETFileReadã ææªã®æ©èœããªããªã 5ã€ã®ãã©ã¡ãŒã¿ãŒãèªèããŸãã ãããªã«ã©ãïŒ å¿ èŠãªãã®ããªã¹ãããŠã¿ãŸãããïŒã©ãããèªã¿èŸŒããïŒãã¡ã€ã«ïŒãã©ãããèªã¿èŸŒããïŒãããã¡ïŒãã©ãã ãèªã¿èŸŒãããã©ãããèªã¿èŸŒããã äœãã©ã®ããã«ç解ããããšããŸãããïŒ

ã芧ã®ãšãããETFileReadé¢æ°ã«æž¡ããã3çªç®ã®ãã©ã¡ãŒã¿ãŒã¯åžžã«0xFFFFã§ããããããããèªã¿åãããŒã¿ã®é·ãã§ãããšæ³å®ããåŸåããããŸãã æ®ãã®4ã€ã®ãã©ã¡ãŒã¿ãŒã¯ãå€éšããåãé åºã§FileReadHereãåŒã³åºããé¢æ°ã«éãããŸãã 次ã®å³ã¯ããã®é¢æ°ã®è¿ååŒã³åºãã瀺ããŠããŸãã æåã®ãã©ã¡ãŒã¿ãŒã®å€ã¯ãã¢ãã¬ã¹ESI + 8ã®ã¡ã¢ãªããååŸãããŸãã ãã®ã¢ãã¬ã¹ãžã®ãã€ã³ã¿ãŒã¯FileOpenHereé¢æ°ã§äœ¿çšããïŒåãååã«ã¡ãªãã§åœåãããŸãïŒãéããŠãããã¡ã€ã«ã®èå¥åãããã«æžã蟌ãŸããŸãã 2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãŒãã«çããããããã¡ã€ã«ã®èªã¿åãã®éå§ç¹ãæ åœããããã«å²ãåœãŠãŸãã 3çªç®ã®ãã©ã¡ãŒã¿ãŒïŒETFileReadã®4çªç®ïŒã¯ãªããšãªãæ¿ã£ãŠãããããçµæãããã¡ãŒãžã®ãã€ã³ã¿ãŒãšããŠå²ãåœãŠãŸãã 5çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãŸã£ããç°åžžã§ãã ã¢ãã¬ã¹ESI + 12ããã®åèªããã®äžã«é 眮ãããããã«ã¯ãŒãã«å±éãããŸãã ãããŸã§ã®ãšãããç§ãèŠããªãã»ããã¯ãã¹ãŠ4ã®åæ°ã§ããïŒ12ã¯4ã®åæ°ã§ã¯ãããŸããã0x12ãã€ãŸã10é²æ°ã§18ã§ãïŒã ã¢ãã¬ã¹ESI + 10ã¯ä»è¿ã®ã©ãã«ãèšèŒãããŠããŸããããESI + 0Cã¯FileGetInfoHereã«æž¡ããããããæåã«ETFileGetInfoé¢æ°ãåŠçããå¿ èŠããããŸãã ç°¡åã§ããæåã®ãã©ã¡ãŒã¿ãŒã¯ãã¡ã€ã«èå¥åã§ã2çªç®ã¯çµæãããã¡ãŒãžã®ãã€ã³ã¿ãŒã§ãã åŒã³åºãåŸããããã¡å ã®1ã2ã3ã7ãããã³8ãã€ããå€æŽãããŸãã ä»åŸãæåŸã®2ãã€ãããã¡ã€ã«ãµã€ãºã§ããããšãããããŸãã ETFileReadé¢æ°ãšããã®åºåãããã¡ãåæåããé¢æ°ã«æž¡ãããã®ã¯ãã®å€ã§ãã ETFileGetInfoã®çµæã®æåã®2ãã€ãã¯ãã¡ã€ã«åã§ããããšãå€æããŸããã 3çªç®ã®å€ã¯ç解ã§ããŸããã§ããããããŒã¯ã³äžã®1ã€ã®ãã¡ã€ã«ã«å¯ŸããŠã®ã¿1ã«èšå®ãããŸããã ãããã£ãŠã次ã®ãã©ã¡ãŒã¿ã®é åºãåºçŸããŸãããã¡ã€ã«èå¥åãèªã¿åãéå§ãã€ã³ããèªã¿åãæ倧ãã€ãæ°ããããã¡ãã€ã³ã¿ããããã¡ãµã€ãºã
ETFileGetInfoã«è§Šããã®ã§ãããã«ETDirGetInfoãå®è£ ããå¿ èŠããããŸãããã©ã¡ãŒã¿ãŒã®é åºã¯åãã§ããã¡ã€ã«ã§ã¯ãªããã©ã«ããŒã®èå¥åã®ã¿ãé¢ä¿ããŸãã è¿ãããçµæïŒèå¥åã«ãããã©ã«ããŒåã
ããã§ãããŒã¯ã³ããã®èªã¿åããå®äºããŸããã次ã¯ããŒã¯ã³ã«æžã蟌ã¿ãŸãã ãã©ã«ããŒãäœæããããšããå§ããŸãããã ETDirCreateé¢æ°ã®ãã©ã¡ãŒã¿ãŒïŒçµæãžã®ãã€ã³ã¿ãŒïŒæããã«ããã©ã«ããŒã®äœæåŸããã©ã«ããŒãéããèå¥åãããã«è¿ãããŸãïŒããã©ã«ããŒã®ååã芪ãã©ã«ããŒã®èå¥åãããã³0ã4çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ã³ãŒãã«ããŒãã³ãŒãã£ã³ã°ãããŠããããããäœã«åœ±é¿ããã®ããŸã ããããŸããã ä»»æã®å€ã«å¯ŸããŠãã©ã«ããŒãæ£åžžã«äœæãããŸãã ETDirDeleteã¯1ã€ã®ãã©ã¡ãŒã¿ãŒã®ã¿ãåãå ¥ãããããããã¯æããã«éããŠãããã©ã«ããŒã®èå¥åã§ãã ETFileCreateã¯ãETDirCreateãšåæ§ã®çµæãžã®ãã€ã³ã¿ãŒããã©ã«ããŒèå¥åããã¡ã€ã«åããã¡ã€ã«ãµã€ãºãããã³5çªç®ã®ãã©ã¡ãŒã¿ãŒã®5ã€ã®ãã©ã¡ãŒã¿ãŒãåããŸãã 5çªç®ã®ãã©ã¡ãŒã¿ãŒããŒã以å€ã®å€ã«èšå®ãããŠããå Žåã次ã«ãã®ãã¡ã€ã«ã«å¯ŸããŠETFileGetInfoãåŒã³åºããããšãçµæã®3çªç®ã®ãã€ãïŒãããã«ãããã®ïŒã1ã«èšå®ãããŸããèããŠãå®éšãè¡ããå±æ§ãèšå®ããããå ¥åããå¿ èŠãããããšã確èªããŸãããã¹ã¯ãŒããããã§ãªãå Žåãããã¯å¿ èŠãããŸããã ç§ãå®éšããããŒã¯ã³ã«ããã®ãããªãã¡ã€ã«ã1ã€ãããªãã£ãããšã¯é¢çœãã§ãã ä»ã®ãã¹ãŠã®ãã¡ã€ã«ããã®ããŒã§æå·åãããããšãé¡ã£ãŠããŸãã ETFileDeleteã¯ãETDirDeleteãšåæ§ã«ãé©ãããšãªãæ©èœããŸãã
ãã®ã©ã€ãã©ãªã§åç §ãããæåŸã®é¢æ°ã¯ETFileWriteã§ãã ããã¯4ã€ã®åŒæ°ãåããŸãïŒãã¡ã€ã«èå¥åããŒãïŒå®éšã¯ããã¡ã€ã«ã®å é ã«çžå¯Ÿçãªæ··åã§ããããšã瀺ããŸãïŒãããŒã¿ãšããŒã¿ãµã€ãºã®ãããããã¡ãžã®ãã€ã³ã¿ã ãã¡ã€ã«ã¯å±éãããªãããšã«æ³šæããŠãã ããã ãªãã»ãããšãã¡ã€ã«é·ã®åèšããã¡ã€ã«ãµã€ãºãè¶ ããå Žåãèšé²ã¯è¡ãããªãããããã¡ã€ã«ãµã€ãºãå€æŽããå¿ èŠãããå Žåããã¡ã€ã«ãåé€ããŠæ°ãããµã€ãºã§åäœæããå¿ èŠããããŸãã
ããã«ãã©ã€ãã©ãªã®ãšã¯ã¹ããŒãããŒãã«ããªã³ãŒã«ãããšãããã«5ã€ã®é¢æ°ããããŸãããCrypto-Comæå·åæ å ±ä¿è·ããŒã«ãšé£æºãããã®ã©ã€ãã©ãªã«ã¯ããããã®åŒã³åºãã¯å®è£ ãããŠããŸããã 幞ããªããšã«ãåãéè¡ã¯CIPFãæäœããããã®Message-Proã©ã€ãã©ãª-mespro2.dllãé åžããŠããŸããmespro2.dllã¯ããŒã¯ã³ã䜿çšã§ããETTokenLabelGetåŒã³åºããªã©ãããå°ãããŒã¯ã³ã䜿çšã§ããŸãã

ã¹ã¯ãªãŒã³ã·ã§ããã¯ãæåã®ã±ãŒã¹ã§ã¯2çªç®ã®ãã©ã¡ãŒã¿ãŒããŒãã§ããã2çªç®ã®ãã©ã¡ãŒã¿ãŒã§ã¯ããçš®ã®æ°å€ã§ãããšãã2ã€ã®é¢æ°åŒã³åºããããããšã瀺ããŠããŸãã 3çªç®ã®ãã©ã¡ãŒã¿ãŒã¯åžžã«ãã€ã³ã¿ãŒã§ããããããããçµæã§ãããæåã®ãã©ã¡ãŒã¿ãŒã§ãããšæ³å®ããŸã-ããŒã¯ã³ãå«ããã³ãã«ã®èå¥åãä»®å®ããããšã¯è«ççã§ã 2çªç®ã®ãã©ã¡ãŒã¿ãŒãšããŠãŒãããéå§ããããšããŸã-ãããã¡ãŒã®æåã®4ãã€ããå€0x0000000Aã«å€æŽãããŸããã 10ãããã¯ååãTestTokenãã®é·ãã§ãããæ«å°Ÿã«ãŒããã€ãããããŸãã ãããããã€ã³ã¿ãŒã«ãã£ãŠ3çªç®ã®ãã©ã¡ãŒã¿ãŒã«ããã«ã¯ãŒããè¿ãããå Žåãå¿ èŠãªãµã€ãºã®ãããã¡ãŒãžã®ãã€ã³ã¿ãŒã2çªç®ã®ãã©ã¡ãŒã¿ãŒã«è»¢éããå¿ èŠãããããšãããããŸãã ãããã£ãŠããã®é åºãçµäºããŸããæåã«é¢æ°ãå®è¡ãããšã2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯NULLãã€ã³ã¿ãŒã«ãªãã3çªç®ã¯ããã«ã¯ãŒããã€ã³ã¿ãŒã«ãªããŸãã 次ã«ãå¿ èŠãªãµã€ãºã®ãããã¡ãŒãåæåããé¢æ°ã2åå®è¡ããŸãã2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯ãããã¡ãŒãžã®ãã€ã³ã¿ãŒã§ãã
ããããããã«4ã€ã®é¢æ°ã®åŒã³åºãã¯ããã§ã¯å®è£ ãããŠããªãã£ããããç·åœãããšçŽæã§å®è£ ãåãåããŸãããåŒã³åºãããé¢æ°ã«æž¡ããããã©ã¡ãŒã¿ãŒãå°ãªããããšãããã°ã©ã å®è¡äžã«é倧ãªãšã©ãŒãçºçããããšãããããŸãããããã«ãããæ®ãã®é¢æ°ã®ãã©ã¡ãŒã¿ãŒã®æ°ãå®éšçã«éžæã§ããŸãïŒ
ETTokenIDGetïŒ3
ETTokenMaxPinGetïŒ2
ETTokenMinPinGetïŒ2
ETTokenPinChangeïŒ2
ETTokenIDGetã¯åçŽãªå€ãè¿ãã«ã¯å€ããããã©ã¡ãŒã¿ãŒãåãå ¥ãããããETTokenGetLabelãšåãæ¹æ³ã§å®è¡ããŸããæåã®è©Šè¡ã§å€æããããŒã¯ã³ã®åŽé¢ã«æžãããæ°åã®æååãè¿ããŸãã
äžæ¹ãETTokenMaxPinGetãšETTokenMinPinGetã«ã¯å€æ°ã®ãã©ã¡ãŒã¿ãŒããããåäžã®æ°å€ãè¿ãã®ã«çæ³çã§ãã æåã®ãã©ã¡ãŒã¿ãŒ-ãã³ãã«ã®èå¥åã2çªç®-æ°å€ãžã®ãã€ã³ã¿ãŒãè©ŠããŸãã ãã®çµæãããŒã¯ã³èšå®ã§æå®ããããã¹ã¯ãŒãã®æ倧é·ãšæå°é·ãååŸããŸãã
ETTokenPinChangeã¯ãååã«åºã¥ããŠããã¹ã¯ãŒããããŒã¯ã³ã«ããããå€æŽãã圹å²ãæããããã³ãã«èå¥åãšæ°ãããã¹ã¯ãŒããå«ãæååãžã®ãã€ã³ã¿ãŒã®ã¿ãåãå ¥ããå¿ èŠããããŸãã åããŠè©ŠããŠãããšãã«ããšã©ãŒã³ãŒã0x6982ã衚瀺ãããŸããããã¯ãç¥ã£ãŠããããã«ãããŒã¯ã³ã«ãã°ã€ã³ããå¿ èŠãããããšãæå³ããŸãã è«ççã§ãã ãã°ã€ã³ãšçããã¹ã¯ãŒãã§ç¹°ãè¿ããŸã-ãšã©ãŒ0x6416ãåãåããŸãã ãã¹ã¯ãŒãã®é·ããããªã·ãŒã«æºæ ããŠããªããšå€æããŸãã é·ããã¹ã¯ãŒãã§ç¹°ãè¿ããŸã-å®çŸããŸãã
ããã§ããã¹ãŠã®æ©èœã1ã€ã®ã¢ãžã¥ãŒã«ã«ãŸãšããŠä¿åããŸããä»ã®ãããžã§ã¯ãã«å«ããŸãã ã¢ãžã¥ãŒã«ã®ããã¹ãã¯æ¬¡ã®ãšããã§ãã
etsdk.au3
;Func ETReadersEnumOpen() ;Func ETReadersEnumNext($EnumId) ;Func ETReadersEnumClose($EnumId) ;Func ETTokenBind($ReaderName) ;Func ETTokenRebind($BindId) ;Func ETTokenUnbind($BindId) ;Func ETTokenLogin($BindId,$Pin='') ;Func ETTokenPinChange($BindId,$Pin) ;Func ETTokenLogout($BindId) ;Func ETRootDirOpen($BindId,$Dir=0xF007) ;Func ETDirOpen($Dir,$DirId) ;Func ETDirCreate($Dir,$DirId) ;Func ETDirGetInfo($DirId) ;Func ETDirClose($DirId) ;Func ETDirDelete($DirId) ;Func ETDirEnumOpen($DirId) ;Func ETDirEnumNext($EnumId) ;Func ETDirEnumClose($EnumId) ;Func ETFileOpen($File,$DirId) ;Func ETFileCreate($File,$DirId,$Size,$Private=0) ;Func ETFileGetInfo($FileId) ;Func ETFileRead($FileId) ;Func ETFileWrite($FileId,$Data,$Pos=0) ;Func ETFileClose($FileId) ;Func ETFileDelete($FileId) ;Func ETFilesEnumOpen($DirId) ;Func ETFilesEnumNext($EnumId) ;Func ETFilesEnumClose($EnumId) ;Func ETTokenLabelGet($BindId) ;Func ETTokenIDGet($BindId) ;Func ETTokenMaxPinGet($BindId) ;Func ETTokenMinPinGet($BindId) Const $ET_READER_NAME=0 Const $ET_READER_ETOKEN=1 Const $ET_FILEINFO_NAME=0 Const $ET_FILEINFO_PRIVATE=1 Const $ET_FILEINFO_SIZE=2 Dim $ETSdkDll=DllOpen('etsdk.dll') Func ETReadersEnumOpen() Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETReadersEnumOpen', _ 'PTR',DllStructGetPtr($Out) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETReadersEnumNext($EnumId) Local $Reader=DllStructCreate('CHAR name[260]; BYTE etoken;') Local $CallRes=DllCall($ETSdkDll,'WORD','ETReadersEnumNext', _ 'DWORD',$EnumId, _ 'PTR',DllStructGetPtr($Reader) _ ) Local $Result[2]=[ DllStructGetData($reader,'name'), _ DllStructGetData($reader,'etoken')] Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :$Result EndFunc Func ETReadersEnumClose($EnumId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETReadersEnumClose', _ 'DWORD',$EnumId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETTokenBind($ReaderName) Local $In=DllStructCreate('BYTE['&(StringLen($ReaderName)+1)&']') Local $Out=DllStructCreate('DWORD') DllStructSetData($In,1,$ReaderName) Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenBind', _ 'PTR',DllStructGetPtr($Out), _ 'PTR',DllStructGetPtr($In) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETTokenRebind($BindId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenRebind', _ 'DWORD',$BindId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETTokenUnbind($BindId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenUnbind', _ 'DWORD',$BindId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETTokenLogin($BindId,$Pin='') Local $In=DllStructCreate('BYTE['&(StringLen($Pin)+1)&']') DllStructSetData($In,1,$Pin) Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenLogin', _ 'DWORD',$BindId, _ 'PTR',DllStructGetPtr($In) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETTokenPinChange($BindId,$Pin) Local $In=DllStructCreate('CHAR['&(StringLen($Pin)+1)&']') DllStructSetData($In,1,$Pin) Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenPinChange', _ 'DWORD',$BindId, _ 'PTR',DllStructGetPtr($In) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETTokenLogout($BindId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenLogout', _ 'DWORD',$BindId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETRootDirOpen($BindId,$Dir=0xF007) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETRootDirOpen', _ 'PTR',DllStructGetPtr($Out), _ 'DWORD',$BindId, _ 'DWORD',$Dir _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETDirOpen($Dir,$DirId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETDirOpen', _ 'PTR',DllStructGetPtr($Out), _ 'DWORD',$Dir, _ 'DWORD',$DirId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETDirCreate($Dir,$DirId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETDirCreate', _ 'PTR',DllStructGetPtr($Out), _ 'DWORD',$Dir, _ 'DWORD',$DirId, _ 'DWORD',0 _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETDirGetInfo($DirId) Local $Out=DllStructCreate('BYTE[8]') Local $CallRes=DllCall($ETSdkDll,'WORD','ETDirGetInfo', _ 'DWORD',$DirId, _ 'PTR',DllStructGetPtr($Out) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETDirClose($DirId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETDirClose', _ 'DWORD',$DirId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETDirDelete($DirId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETDirDelete', _ 'DWORD',$DirId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETDirEnumOpen($DirId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETDirEnumOpen', _ 'PTR',DllStructGetPtr($Out), _ 'DWORD',$DirId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETDirEnumNext($EnumId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETDirEnumNext', _ 'DWORD',$EnumId, _ 'PTR',DllStructGetPtr($Out) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETDirEnumClose($EnumId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETDirEnumClose', _ 'DWORD',$EnumId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETFileOpen($File,$DirId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETFileOpen', _ 'PTR',DllStructGetPtr($Out), _ 'DWORD',$DirId, _ 'DWORD',$File _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETFileCreate($File,$DirId,$Size,$Private=0) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETFileCreate', _ 'PTR',DllStructGetPtr($Out), _ 'DWORD',$DirId, _ 'DWORD',$File, _ 'DWORD',$Size, _ 'DWORD',$Private _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETFileGetInfo($FileId) Local $Out=DllStructCreate('WORD name;WORD private;WORD;WORD size') Local $CallRes=DllCall($ETSdkDll,'WORD','ETFileGetInfo', _ 'DWORD',$FileId, _ 'PTR',DllStructGetPtr($Out) _ ) Local $Result[3]=[ DllStructGetData($Out,'name'), _ DllStructGetData($Out,'private'), _ DllStructGetData($Out,'size')] Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :$Result EndFunc Func ETFileRead($FileId) Local $FileInfo=ETFileGetInfo($FileId) If @error Then Return SetError(@error,0,False) Local $Out=DllStructCreate('BYTE ['&$FileInfo[$ET_FILEINFO_SIZE]&']') Local $CallRes=DllCall($ETSdkDll,'WORD','ETFileRead', _ 'DWORD',$FileId, _ 'DWORD',0, _ 'DWORD',0xFFFF, _ 'PTR',DllStructGetPtr($Out), _ 'DWORD',$FileInfo[$ET_FILEINFO_SIZE] _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETFileWrite($FileId,$Data,$Pos=0) $Data=Binary($Data) Local $DataSize=BinaryLen($Data) Local $In=DllStructCreate('BYTE['&$DataSize&']') DllStructSetData($In,1,$Data) Local $CallRes=DllCall($ETSdkDll,'WORD','ETFileWrite', _ 'DWORD',$FileId, _ 'DWORD',$Pos, _ 'PTR',DllStructGetPtr($In), _ 'DWORD',$DataSize _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETFileClose($FileId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETFileClose', _ 'DWORD',$FileId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETFileDelete($FileId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETFileDelete', _ 'DWORD',$FileId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETFilesEnumOpen($DirId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETFilesEnumOpen', _ 'PTR',DllStructGetPtr($Out), _ 'DWORD',$DirId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETFilesEnumNext($EnumId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETFilesEnumNext', _ 'DWORD',$EnumId, _ 'PTR',DllStructGetPtr($Out) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETFilesEnumClose($EnumId) Local $CallRes=DllCall($ETSdkDll,'WORD','ETFilesEnumClose', _ 'DWORD',$EnumId _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :True EndFunc Func ETTokenLabelGet($BindId) Local $Out1=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenLabelGet', _ 'DWORD',$BindId, _ 'PTR',0, _ 'PTR',DllStructGetPtr($Out1) _ ) If $CallRes[0] Then Return SetError($CallRes[0],0,False) Local $Out2=DllStructCreate('CHAR['&DllStructGetData($Out1,1)&']') $CallRes=DllCall($ETSdkDll,'WORD','ETTokenLabelGet', _ 'DWORD',$BindId, _ 'PTR',DllStructGetPtr($Out2), _ 'PTR',DllStructGetPtr($Out1) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out2,1) EndFunc Func ETTokenIDGet($BindId) Local $Out1=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenIDGet', _ 'DWORD',$BindId, _ 'PTR',0, _ 'PTR',DllStructGetPtr($Out1) _ ) If $CallRes[0] Then Return SetError($CallRes[0],0,False) Local $Out2=DllStructCreate('CHAR['&DllStructGetData($Out1,1)&']') $CallRes=DllCall($ETSdkDll,'WORD','ETTokenIDGet', _ 'DWORD',$BindId, _ 'PTR',DllStructGetPtr($Out2), _ 'PTR',DllStructGetPtr($Out1) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out2,1) EndFunc Func ETTokenMaxPinGet($BindId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenMaxPinGet', _ 'DWORD',$BindId, _ 'PTR',DllStructGetPtr($Out) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc Func ETTokenMinPinGet($BindId) Local $Out=DllStructCreate('DWORD') Local $CallRes=DllCall($ETSdkDll,'WORD','ETTokenMinPinGet', _ 'DWORD',$BindId, _ 'PTR',DllStructGetPtr($Out) _ ) Return $CallRes[0] _ ?SetError($CallRes[0],0,False) _ :DllStructGetData($Out,1) EndFunc
ãã®ãããããŒã¯ã³ãã¡ã€ã«ã·ã¹ãã ã§äœã§ãã§ããŸããããã瀺ãããã«ãããããŒã¯ã³ããå¥ã®ããŒã¯ã³ã«å 容ãã³ããŒããç°¡åãªã¹ã¯ãªãããæžããŸããããæŠå¿µå®èšŒãã¬ãã«ã®ã¹ã¯ãªãããã€ãŸã ãæ£ãããã¢ããªã±ãŒã·ã§ã³ã«ããã¯ãã®ãã§ãã¯ã¯å€ããããŸãããã2çªç®ã®æå¹ãªããŒã¯ã³ãååŸã§ããŸãã
eTokenCopy.au3
#include <etsdk.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #NoTrayIcon Opt('MustDeclareVars',1) Opt('GUIOnEventMode',1) Opt('GUIDataSeparatorChar',@LF) Const $Title='eToken Copy' Const $GUISize[2]=[250,100] Dim $SrcCtrl,$DstCtrl,$ListTimer Func TokenCopyDir($SrcId,$DstId) Local $Name,$SrcSubId,$DstSubId,$SrcInfo,$SrcData ; Local $EnumId=ETDirEnumOpen($SrcId) While 1 $Name=ETDirEnumNext($EnumId) If @error Then ExitLoop $SrcSubId=ETDirOpen($Name,$SrcId) $DstSubId=ETDirOpen($Name,$DstId) If @error Then $DstSubId=ETDirCreate($Name,$DstId) EndIf TokenCopyDir($SrcSubId,$DstSubId) ETDirClose($SrcSubId) ETDirClose($DstSubId) WEnd ETDirEnumClose($EnumId) ; $EnumId=ETFilesEnumOpen($SrcId) While 1 $Name=ETFilesEnumNext($EnumId) If @error Then ExitLoop $SrcSubId=ETFileOpen($Name,$SrcId) $SrcInfo=ETFileGetInfo($SrcSubId) $DstSubId=ETFileOpen($Name,$DstId) If Not @error Then ETFileDelete($DstSubId) EndIf $DstSubId=ETFileCreate($Name,$DstId,$SrcInfo[$ET_FILEINFO_SIZE],$SrcInfo[$ET_FILEINFO_PRIVATE]) ETFileWrite($DstSubId,ETFileRead($SrcSubId)) ETFileClose($SrcSubId) ETFileClose($DstSubId) WEnd ETFilesEnumClose($EnumId) EndFunc Func TokenCopy() Local $Src=GUICtrlRead($SrcCtrl) Local $Dst=GUICtrlRead($DstCtrl) If $Src=='' Or $Dst=='' Then MsgBox(0x10,$Title,' ') Return False EndIf ; $Src=StringMid($Src,StringLen($Src)-8,8) $Dst=StringMid($Dst,StringLen($Dst)-8,8) If $Src==$Dst Then MsgBox(0x10,$Title,' ') Return False EndIf ; Local $SrcBindId=False,$DstBindId=False Local $EnumId=ETReadersEnumOpen() While 1 Local $Reader=ETReadersEnumNext($EnumId) If @error Then ExitLoop If Not $Reader[$ET_READER_ETOKEN] Then ContinueLoop Local $BindId=ETTokenBind($Reader[$ET_READER_NAME]) If ETTokenIDGet($BindId)==$Src Then $SrcBindId=$BindId ElseIf ETTokenIDGet($BindId)==$Dst Then $DstBindId=$BindId Else ETTokenUnbind($BindId) EndIf WEnd ETReadersEnumClose($EnumId) If Not ETTokenLogin($SrcBindId) Then MsgBox(0x10,$Title,' -') Return False EndIf If Not ETTokenLogin($DstBindId) Then MsgBox(0x10,$Title,' -') Return False EndIf ; TokenCopyDir(ETRootDirOpen($SrcBindId),ETRootDirOpen($DstBindId)) ETTokenUnbind($SrcBindId) ETTokenUnbind($DstBindId) MsgBox(0x40,$Title,' ') EndFunc Func GetTokenList() Local $Reader, $BindId, $Result='' Local $EnumId=ETReadersEnumOpen() While 1 $Reader=ETReadersEnumNext($EnumId) If @error Then ExitLoop If Not $Reader[$ET_READER_ETOKEN] Then ContinueLoop $BindId=ETTokenBind($Reader[$ET_READER_NAME]) $Result&=@LF&ETTokenLabelGet($BindId)&' ('&ETTokenIDGet($BindId)&')' ETTokenUnbind($BindId) WEnd ETReadersEnumClose($EnumId) Return $Result EndFunc Func UpdateTokenList() Local $Tokens=GetTokenList() GUICtrlSetData($SrcCtrl,$Tokens,GUICtrlRead($SrcCtrl)) GUICtrlSetData($DstCtrl,$Tokens,GUICtrlRead($DstCtrl)) EndFunc Func onClose() Exit EndFunc Func GUIInit() GUICreate($Title,$GUISize[0],$GUISize[1],(@DesktopWidth-$GUISize[0])/2,(@DesktopHeight-$GUISize[1])/2) GUISetOnEvent($GUI_EVENT_CLOSE,'onClose') GUICtrlCreateLabel(':',8,8,64,-1,$SS_RIGHT) GUICtrlCreateLabel(':',8,32,64,-1,$SS_RIGHT) $SrcCtrl=GUICtrlCreateCombo('',76,6,$GUISize[0]-84,-1) $DstCtrl=GUICtrlCreateCombo('',76,30,$GUISize[0]-84,-1) GUICtrlCreateButton('',8,54,$GUISize[0]-16,$GUISize[1]-62) GUICtrlSetOnEvent(-1,'TokenCopy') GUISetState(@SW_SHOW) EndFunc GUIInit() UpdateTokenList() $ListTimer=TimerInit() While 1 ; 3 If TimerDiff($ListTimer)>3000 Then UpdateTokenList() $ListTimer=TimerInit() EndIf Sleep(100) WEnd

Crypto-ComãCrypto-ProãMessage-ProãSignatureãããã«ã¯Willowãªã©ãå°éå¯èœãªãã¹ãŠã®æå·æ å ±ä¿è·ããŒã«ãè©ŠããŸããããããã®ããŒã¯ãã¹ãŠæ£åžžã«ã³ããŒãããæ©èœããŸããã
ããããã©ã®ããã«ïŒããŒã¯ããŒã¯ã³ããå埩å¯èœã§ããã¹ãã§ã¯ãããŸãããïŒçãã¯eTokenä»æ§ã«ãããŸããå®éã«ã¯ãååŸã§ããªãããŒãå®éã«ååšããŸãããRSAã¢ã«ãŽãªãºã ã䜿çšããæå·å€æã«ã®ã¿åœ¹ç«ã¡ãŸããã©ã®CPSSãèæ ®ãããŠããŸãã...ãããããã®ããã«ïŒãã·ã¢é£éŠã®é åã§äœ¿çšããããã«FSBã«ãã£ãŠæ¿èªãããCPSSã¯ã©ããRSAã䜿çšããŠãããããã¹ãŠGOST- *ã«åºã¥ããæå·å€æã䜿çšããŠãããããeTokenã¯ãã©ãã·ã¥ãã©ã€ãã«ãããŸãããã¹ã¯ãŒããšè€éãªã€ã³ã¿ãŒãã§ãŒã¹ã