首页
社区
课程
招聘
[旧帖] [原创]Exeinfo PE在虚拟机中的运行问题 0.00雪花
2012-6-4 17:05 3470

[旧帖] [原创]Exeinfo PE在虚拟机中的运行问题 0.00雪花

2012-6-4 17:05
3470
前言
  多年来已经习惯了虚拟机(此虚拟机非VMP的虚拟机)的环境,安全、清爽且灵活。不用装360,也从不用QQ,他们那些愚蠢的行为,就好比俄国人和日本人为了自己的利益在我们的土地上干仗,让人无法接受。
  Exeinfo PE在虚拟机中运行时,没有任何提示信息就退出了。虽有PEiD和Protection ID等可用,但始终困扰着,直到有一天,决定一探究竟,看看是什么个情况。
  站在别人的肩膀上总是好的。当时人肉的结果就是下面参考资料中的1)和2)。
  得知Exeinfo PE的大致信息:用Borland Delphi写的,加壳时区段被合并了,UPX壳。UPX解开后,当然无法运行,自查一下去壳后的文件:A.S.L Packer/Crypter/Protector ( Generic signature ),hint: no idea :-)。应该是作者自己整的。
  写这篇文章是因为最近在学习VMProtect的知识,为方便下载资料和教程,刚注册,发出来指望骗点分分:)。
  高手们的文章总是点到为止,新人呐就希望过程越详细越好。这里把以前的记录摘要点贴出来,有的东西就不细说了,恐误导于人;谬误之处,恳请指正。

『目标软件』
  Exeinfo PE v0.0.3.0 617 sign 2011.07.29
  http://www.exeinfo.xwp.pl
  http://users.cjb.net/exeinfope/exeinfope.zip
『调试器』
  OD - 原版OllyDbg 1.10
『调试器插件』
  StrongOD 0.4.6.816 by 海风月影
  OllyDump 3.00.110 by Gigapede
『其他工具』
  UIF - Universal Import Fixer v1.2
  ImpREC - Import REConstructor v1.7F
  RB - Resource Binder v3.1.5
『参考资料』
  1) ExeInfo PE ver. 0.0.2.4 正式版 脱壳+资源优化+去自校验 by cxx17
  2) 脱壳版 ExeinfoPE v0.0.2.3 508 sign 2009.05.20 by RegKiller
  3) Exeinfo PE v0.0.3.0 617 sign 2011.07.29 UnPacKeD & CrAcKeD by RegKiller
  4) Exeinfo PE v0.0.2.9 598 sign 2011.02.26 UnPacKeD & CrAcKeD by RegKiller

一.寻找OEP
  虚拟机的操作系统是Windows XP Professional SP3简体中文版。OD插件一个是StrongOD,这个版本会自动Patch原版OD,让调试过程省去很多麻烦;用OllyDump图个方便。
  OD的设置:





  StrongOD的设置:


  1. OD载入目标程序后停在这里:
05BCF7D0 > 60               PUSHAD
05BCF7D1   BE 00D0B005      MOV ESI,exeinfop.05B0D000
05BCF7D6   8DBE 00408FFA    LEA EDI,DWORD PTR DS:[ESI+FA8F4000]
05BCF7DC   57               PUSH EDI
05BCF7DD   89E5             MOV EBP,ESP
05BCF7DF   8D9C24 80C1FFFF  LEA EBX,DWORD PTR SS:[ESP-3E80]
05BCF7E6   31C0             XOR EAX,EAX
05BCF7E8   50               PUSH EAX
05BCF7E9   39DC             CMP ESP,EBX
05BCF7EB  ^75 FB            JNZ SHORT exeinfop.05BCF7E8


  2. F7,HR ESP(传说中的ESP定律),F9后:
05BD034D   8D4424 80        LEA EAX,DWORD PTR SS:[ESP-80]
05BD0351   6A 00            PUSH 0
05BD0353   39C4             CMP ESP,EAX
05BD0355  ^75 FA            JNZ SHORT exeinfop.05BD0351
05BD0357   83EC 80          SUB ESP,-80
05BD035A  ^E9 A1ACFFFF      JMP exeinfop.05BCB000
05BD035F   0078 03          ADD BYTE PTR DS:[EAX+3],BH
05BD0362   BD 05AC03BD      MOV EBP,BD03AC05
05BD0367   05 B0075400      ADD EAX,exeinfop.005407B0
05BD036C   0000             ADD BYTE PTR DS:[EAX],AL
...

  看看05BCB000:
05BCB000   41               INC ECX
05BCB001   2E:53            PUSH EBX       ; Superfluous prefix
05BCB003   2E:4C            DEC ESP        ; Superfluous prefix
05BCB005   F8               CLC
05BCB006   43               INC EBX
05BCB007   72 79            JB SHORT exeinfop.05BCB082

  目标用upx -d解开后的入口就是这里。

  3. 清除硬件断点,在Memory map窗口中地址00401000起始的段,下内存访问断点,F9后(此段为作者自己的解码部分):
05BCB07B   C10B 17          ROR DWORD PTR DS:[EBX],17
05BCB07E   83C3 04          ADD EBX,4
05BCB081  ^E2 F8            LOOPD SHORT exeinfop.05BCB07B
05BCB083   83F8 00          CMP EAX,0
05BCB086   74 2A            JE SHORT exeinfop.05BCB0B2
05BCB088   BB 00104000      MOV EBX,exeinfop.00401000
05BCB08D   B9 80F70400      MOV ECX,4F780
05BCB092   C103 17          ROL DWORD PTR DS:[EBX],17
05BCB095   83C3 04          ADD EBX,4
05BCB098  ^E2 F8            LOOPD SHORT exeinfop.05BCB092
05BCB09A   83F8 02          CMP EAX,2
05BCB09D   74 13            JE SHORT exeinfop.05BCB0B2
05BCB09F   58               POP EAX
05BCB0A0   5A               POP EDX
05BCB0A1   C3               RETN
...
05BCB0B2   90               NOP
05BCB0B3   90               NOP
05BCB0B4   90               NOP
05BCB0B5   90               NOP
05BCB0B6   B8 17FB5300      MOV EAX,exeinfop.0053FB17
05BCB0BB   5B               POP EBX
05BCB0BC   5B               POP EBX
05BCB0BD   50               PUSH EAX
05BCB0BE   31C0             XOR EAX,EAX
05BCB0C0   E9 02000000      JMP exeinfop.05BCB0C7
...
05BCB0C7   C3               RETN


  4. 清除内存访问断点,在05BCB0A1和05BCB0C7处各下一个F2断点,F9后停在05BCB0C7。清除两个F2断点,F7来到:
0053FB17   71 00            JNO SHORT exeinfop.0053FB19
0053FB19   31C9             XOR ECX,ECX
0053FB1B   55               PUSH EBP
0053FB1C   76 00            JBE SHORT exeinfop.0053FB1E
0053FB1E   54               PUSH ESP
0053FB1F   72 00            JB SHORT exeinfop.0053FB21
0053FB21   5D               POP EBP
0053FB22   41               INC ECX
0053FB23  -E2 FE            LOOPD SHORT exeinfop.0053FB23
0053FB25   83C4 E0          ADD ESP,-20
0053FB28   67:E3 01         JCXZ SHORT exeinfop.0053FB2C
...
0053FB2C  ^EB A6            JMP SHORT exeinfop.0053FAD4
...


  5. 在0053FAD4处下硬件执行断点,F9停下来:
0053FAD4   D9D0             FNOP
0053FAD6   31C0             XOR EAX,EAX
0053FAD8   D9D0             FNOP
0053FADA   53               PUSH EBX
0053FADB   56               PUSH ESI
0053FADC   57               PUSH EDI
0053FADD   33C0             XOR EAX,EAX
0053FADF   8945 E4          MOV DWORD PTR SS:[EBP-1C],EAX
0053FAE2   8945 E0          MOV DWORD PTR SS:[EBP-20],EAX
0053FAE5   8945 EC          MOV DWORD PTR SS:[EBP-14],EAX
0053FAE8   8945 E8          MOV DWORD PTR SS:[EBP-18],EAX
0053FAEB   B8 44EA5300      MOV EAX,exeinfop.0053EA44
0053FAF0   E8 C77AECFF      CALL exeinfop.004075BC

  这段代码比较眼熟。先看看004075BC:
004075BC   53               PUSH EBX
004075BD   8BD8             MOV EBX,EAX
004075BF   33C0             XOR EAX,EAX
004075C1   A3 B0075400      MOV DWORD PTR DS:[5407B0],EAX
004075C6   6A 00            PUSH 0
004075C8   E8 2BFFFFFF      CALL exeinfop.004074F8                   ; JMP to kernel32.GetModuleHandleA

  再看看004074F8:
004074F8  -FF25 04CAB505    JMP DWORD PTR DS:[5B5CA04]               ; kernel32.GetModuleHandleA
004074FE   8BC0             MOV EAX,EAX
00407500  -FF25 00CAB505    JMP DWORD PTR DS:[5B5CA00]               ; kernel32.LocalAlloc
00407506   8BC0             MOV EAX,EAX
00407508  -FF25 FCC9B505    JMP DWORD PTR DS:[5B5C9FC]               ; kernel32.TlsGetValue
0040750E   8BC0             MOV EAX,EAX
00407510  -FF25 F8C9B505    JMP DWORD PTR DS:[5B5C9F8]               ; kernel32.TlsSetValue

  浏览一下5B5CA04附近的指针,找到头和尾,发现比较乱:
05B5C908  00000000
05B5C90C  00000000
05B5C910  00000000
05B5C914  770F4880  oleaut32.SysFreeString
05B5C918  770FA3EC  oleaut32.SysReAllocStringLen
05B5C91C  770F4B39  oleaut32.SysAllocStringLen
05B5C920  00000000
05B5C924  77DA7ABB  advapi32.RegQueryValueExA
05B5C928  77DA7852  advapi32.RegOpenKeyExA
...
05B5C9EC  7C801A28  kernel32.CreateFileA
05B5C9F0  7C809BE7  kernel32.CloseHandle
05B5C9F4  00000000
05B5C9F8  7C809C65  kernel32.TlsSetValue
05B5C9FC  7C8097E0  kernel32.TlsGetValue
05B5CA00  7C809A2D  kernel32.LocalAlloc
05B5CA04  7C80B741  kernel32.GetModuleHandleA
05B5CA08  00000000
05B5CA0C  77D2E4A9  user32.CreateWindowExA
05B5CA10  77D66783  user32.keybd_event
05B5CA14  77D29766  user32.WindowFromPoint
05B5CA18  77D1940C  user32.WaitMessage
...
05B5D074  00000000
05B5D078  7632309F  comdlg32.GetOpenFileNameA
05B5D07C  00000000
05B5D080  77D2CE12  user32.SetLayeredWindowAttributes
05B5D084  77D22156  user32.AnimateWindow
05B5D088  00000000
05B5D08C  7C92D7FE  ntdll.ZwQueryInformationProcess
05B5D090  7C92DCAE  ntdll.ZwSetInformationThread
05B5D094  00000000
05B5D098  00000000
05B5D09C  00000000
...

  看来我们已经找到IAT了,地址0053FAD4应该就是OEP了,清掉硬件断点。
  对比一下Exeinfo PE v0.0.2.9 598 sign 2011.01.27的OEP:
0053BAD4 > 55               PUSH EBP
0053BAD5   54               PUSH ESP
0053BAD6   5D               POP EBP
0053BAD7   83C4 E0          ADD ESP,-20
0053BADA   53               PUSH EBX
0053BADB   56               PUSH ESI
0053BADC   57               PUSH EDI
0053BADD   33C0             XOR EAX,EAX
0053BADF   8945 E4          MOV DWORD PTR SS:[EBP-1C],EAX
0053BAE2   8945 E0          MOV DWORD PTR SS:[EBP-20],EAX
0053BAE5   8945 EC          MOV DWORD PTR SS:[EBP-14],EAX
0053BAE8   8945 E8          MOV DWORD PTR SS:[EBP-18],EAX
0053BAEB   B8 8CA85300      MOV EAX,exeinfop.0053A88C
0053BAF0   E8 6FBAECFF      CALL exeinfop.00407564
...


二.重建IAT
  运行UIF。UIF需要Process ID,从OD的Log data窗口找到目标载入时的值:00000C40,填入UIF后,点'Start'


  重用原来的IAT起始位置,在'New IAT VA:'内填入05B5C914,点'Start'


  注意05B5CFEC这个值,就是IAT的尾。退出UIF。在OD里选中从05B5CFEC开始到05B5D094的内存区域,用右键->'Binary'->'Fill with 00's'清理掉残存的指针,省去后面在ImpREC里的麻烦。

三.Dump目标进程
  OD里菜单'Plugins'->'OllyDump'->'Dump debugged process',去掉'Rebuild Import'前面的勾选,检查'Entry Point:'由57CF7D0修改为13FAD4,点'Dump'为exeinfope_dumped.exe:


四.修复Dump的文件
  运行ImpREC。选中目标进程,先去Options里面,将勾选全清掉:


  'IAT Infos Needed'的OEP内填入13FAD4,然后点'AutoSearch',在跳出的'Found something!'对话框点'确定',再点'Get Imports'。
  去掉'New Import Infos'下'Add New Section'前的勾选,RAV内填入0575CFF0。这里不新建区段,直接使用IAT后面的空间。
  注:0575CFF0 = IAT尾05B5CFEC -> 圆整为05B5CFF0 -> 减去基址00400000。点'Fix Dump',保存为exeinfope_dumped_.exe:


  退出ImpREC和OD。
  到这里,exeinfope_dumped_.exe就能运行了。由于是在虚拟机里,直接就退出了。在物理机上运行,提示:


  意味着有自校验。后面再说怎么过,先“减肥”。由于第一个区段的Virtual Size比较大0570C000,直接导致dump文件在磁盘上的大小为87.8MB。用Resource Binder比较方便,'Action'下面就用第一个选项:


  处理后的文件大小为2.03MB。

五.在虚拟机中不能运行的原因
  OD载入exeinfope_dumped_.exe,停在入口0053FAD4。由于有花指令,慢慢看,就在下面不远:
0053FB4C   0F31                  RDTSC
0053FB4E   43                    INC EBX
0053FB4F   91                    XCHG EAX,ECX
0053FB50   4B                    DEC EBX
0053FB51   0F31                  RDTSC
0053FB53   29C8                  SUB EAX,ECX
0053FB55   3D 98030000           CMP EAX,398
0053FB5A   A3 6CB1B505           MOV DWORD PTR DS:[5B5B16C],EAX
0053FB5F   77 06                 JA SHORT exeinfop.0053FB67
0053FB61   87C9                  XCHG ECX,ECX
0053FB63   EB 09                 JMP SHORT exeinfop.0053FB6E
0053FB65   87C9                  XCHG ECX,ECX
0053FB67   C605 69B1B505 01      MOV BYTE PTR DS:[5B5B169],1
0053FB6E   91                    XCHG EAX,ECX
0053FB6F   803D 69B1B505 01      CMP BYTE PTR DS:[5B5B169],1
0053FB76   75 0A                 JNZ SHORT exeinfop.0053FB82
0053FB78   B8 01DE0000           MOV EAX,0DE01
0053FB7D   E8 C258ECFF           CALL exeinfop.00405444
0053FB82   833D 6CB1B505 05      CMP DWORD PTR DS:[5B5B16C],5
0053FB89   73 0A                 JNB SHORT exeinfop.0053FB95
0053FB8B   B8 05DE0000           MOV EAX,0DE05
0053FB90   E8 AF58ECFF           CALL exeinfop.00405444
0053FB95   33C0                  XOR EAX,EAX
0053FB97   55                    PUSH EBP
0053FB98   68 CCFB5300           PUSH exeinfop.0053FBCC
0053FB9D   64:FF30               PUSH DWORD PTR FS:[EAX]
0053FBA0   64:8920               MOV DWORD PTR FS:[EAX],ESP
0053FBA3   F8                    CLC
0053FBA4   87C9                  XCHG ECX,ECX

  哈哈,RDTSC!
  抄段理论:从Intel Pentium开始的x86处理器都有一个叫时间戳计数器(Time Stamp Counter)的64位寄存器,保存处理器自复位以来的时钟周期数。指令RDTSC返回TSC寄存器的值在EDX:EAX中;在x86-64模式下,RDTSC指令还回清除RAX的高32位。
  在这里F9,程序直接就结束了。注意到退出码为0DE01。上面两处00405444调用即结束进程,EAX含Exit Code。跟进去最后来到这里:
00405422   A1 00005400          MOV EAX,DWORD PTR DS:[540000]
00405427   50                   PUSH EAX
00405428   E8 57BEFFFF          CALL <JMP.&kernel32.ExitProcess>

  两个RDTSC指令只用了TSC寄存器低32位的差值,应该在5~398之间,否则程序就终止。在我的虚拟机中,差值已经大于398,程序必定退出。所以,只需要修改一个字节,将398改为0FF98,程序就可以继续执行了,和在物理机里跑的情况一样,显示“Virus Detected”。
  注:参考资料3)里RegKiller的Crack不能在虚拟机里运行,只改这里就可以了。

六.自校验分析及处理

  1. 程序在这里将自己前400h字节读到地址05B5AD3C处:
00523A48   6A 00                 PUSH 0
00523A4A   BA 3CADB505           MOV EDX,exeinfop.05B5AD3C
00523A4F   B9 00040000           MOV ECX,400
00523A54   B8 38745500           MOV EAX,exeinfop.00557438
00523A59   E8 E2FCEDFF           CALL exeinfop.00403740
00523A5E   B8 38745500           MOV EAX,exeinfop.00557438
00523A63   E8 18FDEDFF           CALL exeinfop.00403780

  调用00403740读文件:
00403740   55                    PUSH EBP
00403741   8BEC                  MOV EBP,ESP
00403743   53                    PUSH EBX
00403744   8B5D 08               MOV EBX,DWORD PTR SS:[EBP+8]
00403747   53                    PUSH EBX
00403748   68 B1D70000           PUSH 0D7B1
0040374D   68 A0364000           PUSH <JMP.&kernel32.ReadFile>
00403752   6A 64                 PUSH 64
00403754   E8 57FFFFFF           CALL exeinfop.004036B0
00403759   5B                    POP EBX
0040375A   5D                    POP EBP
0040375B   C2 0400               RETN 4


  2. 自校验代码部分
  稍微编辑了一下,消除花指令的影响以增强可读性:
00523A6B   8B05 64AEB505         MOV EAX,DWORD PTR DS:[5B5AE64]    ; 5B5AE64 - 05B5AD3C = 128
00523A71   8B1D 94AEB505         MOV EBX,DWORD PTR DS:[5B5AE94]    ; 5B5AE94 - 05B5AD3C = 158
00523A77   F8                    CLC
00523A78   41                    INC ECX
00523A79   73 03                 JNB SHORT exeinfop.00523A7E
00523A7B   F7 0D F7
00523A7E   39D8                  CMP EAX,EBX                       ; 校验程序入口点
00523A80  ^0F85 F2FCFFFF         JNZ exeinfop.00523778
00523A86   B3 02                 MOV BL,2
00523A88   43                    INC EBX
00523A89   A1 30745500           MOV EAX,DWORD PTR DS:[557430]
00523A8E   8B80 60030000         MOV EAX,DWORD PTR DS:[EAX+360]
00523A94   33D2                  XOR EDX,EDX
00523A96   E8 6D05F2FF           CALL exeinfop.00444008
00523A9B   EB 02                 JMP SHORT exeinfop.00523A9F
00523A9D   A1 A1
00523A9F   3A1D 42AEB505         CMP BL,BYTE PTR DS:[5B5AE42]      ; 5B5AE42 - 05B5AD3C = 106, 校验区段数
00523AA5   75 14                 JNZ SHORT exeinfop.00523ABB
00523AA7   A1 30745500           MOV EAX,DWORD PTR DS:[557430]
00523AAC   8B80 60030000         MOV EAX,DWORD PTR DS:[EAX+360]
00523AB2   B2 01                 MOV DL,1
00523AB4   E8 4F05F2FF           CALL exeinfop.00444008
00523AB9   EB 1A                 JMP SHORT exeinfop.00523AD5
00523ABB   E8 58FCFFFF           CALL exeinfop.00523718
00523AC0   A1 30745500           MOV EAX,DWORD PTR DS:[557430]
00523AC5   8B80 A4030000         MOV EAX,DWORD PTR DS:[EAX+3A4]
00523ACB   33D2                  XOR EDX,EDX
00523ACD   E8 3605F2FF           CALL exeinfop.00444008
00523AD2   EB 01                 JMP SHORT exeinfop.00523AD5
00523AD4   E9
00523AD5   803D C0AEB505 C8      CMP BYTE PTR DS:[5B5AEC0],0C8     ; 5B5AEC0 - 05B5AD3C = 184, 校验输入表大小
00523ADC   74 0A                 JE SHORT exeinfop.00523AE8
00523ADE   B8 F1000000           MOV EAX,0F1
00523AE3   E8 5C19EEFF           CALL exeinfop.00405444
00523AE8   803D C1AEB505 02      CMP BYTE PTR DS:[5B5AEC1],2       ; 5B5AEC1 - 05B5AD3C = 185
00523AEF   74 0A                 JE SHORT exeinfop.00523AFB
00523AF1   B8 F2000000           MOV EAX,0F2
00523AF6   E8 4919EEFF           CALL exeinfop.00405444
00523AFB   33C0                  XOR EAX,EAX
00523AFD   5A                    POP EDX
00523AFE   59                    POP ECX
00523AFF   59                    POP ECX
00523B00   64:8910               MOV DWORD PTR FS:[EAX],EDX
00523B03   68 1D3B5200           PUSH exeinfop.00523B1D
00523B08   8D45 F0               LEA EAX,DWORD PTR SS:[EBP-10]
00523B0B   BA 03000000           MOV EDX,3
00523B10   E8 8B19EEFF           CALL exeinfop.004054A0
00523B15   C3                    RETN

  可以看出校验了三个东西:程序入口点、区段数和输入表大小。
  a) 程序入口点
  偏移128处(DWORD)为IMAGE_OPTIONAL_HEADER里的AddressOfEntryPoint;偏移158处(DWORD)为CheckSum,但并非真正的校验和,是EP的副本。
  b) 区段数
  偏移106处(WORD)为IMAGE_FILE_HEADER里NumberOfSections。
  c) 输入表大小
  偏移184处(DWORD)为IMAGE_DATA_DIRECTORY里IMAGE_DIRECTORY_ENTRY_IMPORT的Size。
  当然,我们在这里再次看到了结束进程调用00405444的身影。
  另外,偏移208处(DWORD),即第一个区段IMAGE_SECTION_HEADER里的SizeOfRawData,作者把这个字段清零了。较早的Exeinfo PE v0.0.2.9 598 sign 2011.01.27版本会校验它,但不知为什么这个版本去掉了校验该字段。

  3. 去自校验处理
  exeinfope.exe的PE Header:


  exeinfope_dumped_.exe的PE Header:


  a) 程序入口点
  对比发现,原文件的Entry Point和CheckSum均为057CF7D0,而脱壳后的文件已改为OEP:0013FAD4,所以需要处理。这里只修改两个字节,将:
00523A79   73 03                 JNB SHORT exeinfop.00523A7E

  简单地改为:
00523A79   EB 0B                 JMP SHORT exeinfop.00523A86

  b) 区段数
  由于我们修复Dump时,没有新增区段,区段数为3,没有变化,不需处理。如果你的区段数有变化,可修改这里:
00523A86   B3 02                 MOV BL,2

  将2改为你的区段数减1。
  c) 输入表大小
  修复后,输入表的RVA由057D5114变为0575CFF0,Size由000002C8变为000000DC。需要处理,这里只修改2个字节,将:
00523AD5   803D C0AEB505 C8      CMP BYTE PTR DS:[5B5AEC0],0C8

  改为:
00523AD5   803D C0AEB505 DC      CMP BYTE PTR DS:[5B5AEC0],0DC

  将:
00523AE8   803D C1AEB505 02      CMP BYTE PTR DS:[5B5AEC1],2

  改为:
00523AE8   803D C1AEB505 00      CMP BYTE PTR DS:[5B5AEC1],0

  就好了!

  附件为最后的结果。
  文件名:exeinfope_dumped_.7z,MD5:E3CD81C3CEDDE6244EA07C04B29BE610
  解开后文件名:exeinfope_dumped_.exe,MD5:E9508BFFABC33D12E59118B04A7BF73E

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (2)
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
loongzyd 10 2012-6-4 17:31
2
0
记录了,谢谢楼主的分享。晚些时候注意查看悄悄话哈
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qwsk 2012-8-17 13:31
3
0
谢谢楼主的分享

拜读了!
游客
登录 | 注册 方可回帖
返回