飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 13476|回复: 25

[原创] PhotoFiltre Studio X 10.8.0版 注册算法分析及VB版KG源码

[复制链接]
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    发表于 2014-1-27 19:38:39 | 显示全部楼层 |阅读模式
    本帖最后由 GGLHY 于 2014-1-27 19:40 编辑

                                     PhotoFiltre Studio X 10.8.0版 注册算法分析及VB版KG源码
    官网:
    http://www.photofiltre.com/

    软件简介:
           “PhotoFiltre Studio is a complete image retouching program. It allows you to do simple or advanced adjustments to an image and apply a vast range of filters on it. It is simple and intuitive to use, and has an easy learning curve. The toolbar, giving you access to the standard filters with just a few clicks, gives PhotoFiltre Studio a robust look. PhotoFiltre Studio also has layer manager (with Alpha channel), advanced brushes, nozzles (or tubes), red eye corrector, batch module and lot of other powerful tools.”
                                                                                                                                                                ——摘自其官网介绍



            KO这个软件,是因为我在远景上看到有人说这软件很好用,于是好奇去官网down了下。安装完毕扔进OD,顺手看了下它的算法,很简单,断点嘛,有一点点小难,也只是一点点小难而已。
       

    直入主题:
           输入完用户名和注册信息,注册框里的OK按钮仍然是灰色的。很显然,这又是个实时验证类型的软件。注册信息在输入的时候,程序已经在偷偷的搞小动作了。当输入完毕的时候,程序也就验证完了注册信息的合法性了。注册信息通不过合法校验,OK按钮是不会发出胜利的光芒的~~~
        (目前该软件可用的断点有好几种,不过有效率高下之分。
    因为其还在群里作为考题的原因,具体的断点找法我在视频里详细讲一下,这里就不做讨论了。大家要是有兴趣,可以自己试试,看看能找出几种来?)




    好吧,我们直接来看算法验证是如何实现的:
    1. 005CB8FC  /.  55              PUSH EBP                           ;  局部调用来自 005CB9CC, 005CBA5D
    2. 005CB8FD  |.  8BEC            MOV EBP,ESP
    3. 005CB8FF  |.  33C9            XOR ECX,ECX
    4. 005CB901  |.  51              PUSH ECX
    5. 005CB902  |.  51              PUSH ECX
    6. 005CB903  |.  51              PUSH ECX
    7. 005CB904  |.  51              PUSH ECX
    8. 005CB905  |.  51              PUSH ECX
    9. 005CB906  |.  53              PUSH EBX
    10. 005CB907  |.  8BD8            MOV EBX,EAX
    11. 005CB909  |.  33C0            XOR EAX,EAX
    12. 005CB90B  |.  55              PUSH EBP
    13. 005CB90C  |.  68 C0B95C00     PUSH pfstudio.005CB9C0
    14. 005CB911  |.  64:FF30         PUSH DWORD PTR FS:[EAX]
    15. 005CB914  |.  64:8920         MOV DWORD PTR FS:[EAX],ESP
    16. 005CB917  |.  8D55 FC         LEA EDX,DWORD PTR SS:[EBP-4]
    17. 005CB91A  |.  8BC3            MOV EAX,EBX
    18. 005CB91C  |.  E8 27FEFFFF     CALL pfstudio.005CB748             ;  读取我们输入的用户名(ASCII "GGLHY")
    19. 005CB921  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
    20. 005CB924  |.  E8 973CFBFF     CALL pfstudio.0057F5C0             ;  对用户名长度的检测!
    21. 005CB929  |.  84C0            TEST AL,AL
    22. 005CB92B  |.  74 4A           JE SHORT pfstudio.005CB977         ;  一失足成千古恨~~谁让你乱跳的?
    23. 005CB92D  |.  8D55 F8         LEA EDX,DWORD PTR SS:[EBP-8]
    24. 005CB930  |.  8BC3            MOV EAX,EBX
    25. 005CB932  |.  E8 01FFFFFF     CALL pfstudio.005CB838               ;  算法核心之处就在这里面哦
    26. 005CB937  |.  8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]         ;  注册码运算的结果
    27. 005CB93A  |.  50              PUSH EAX
    28. 005CB93B  |.  8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]
    29. 005CB93E  |.  8BC3            MOV EAX,EBX
    30. 005CB940  |.  E8 03FEFFFF     CALL pfstudio.005CB748
    31. 005CB945  |.  8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]       ;  用户名(ASCII "GGLHY")
    32. 005CB948  |.  5A              POP EDX
    33. 005CB949  |.  E8 F63CFBFF     CALL pfstudio.0057F644             ; 进去吧,好好看看
    34. 005CB94E  |.  84C0            TEST AL,AL
    35. 005CB950  |.  75 29           JNZ SHORT pfstudio.005CB97B        ;  跳上黑木崖,勇闯光明顶!
    36. (省略部分代码)
    37. 005CB965  |.  E8 32FEFFFF     CALL pfstudio.005CB79C
    38. 005CB96A  |.  8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]      ;  转小写的用户名!
    39. 005CB96D  |.  5A              POP EDX
    40. 005CB96E  |.  E8 D13CFBFF     CALL pfstudio.0057F644             ;  用户名转小写的验证
    41. 005CB973  |.  84C0            TEST AL,AL
    42. 005CB975  |.  75 04           JNZ SHORT pfstudio.005CB97B        ;  跳跳更健康,OK更闪亮~
    43. 005CB977  |>  33D2            XOR EDX,EDX                        ;  不跳就用强,上C4!
    44. 005CB979  |.  EB 02           JMP SHORT pfstudio.005CB97D
    45. 005CB97B  |>  B2 01           MOV DL,1                           ;  千年等“1”回!
    46. 005CB97D  |>  8B83 1C030000   MOV EAX,DWORD PTR DS:[EBX+31C]
    47. 005CB983  |.  8B08            MOV ECX,DWORD PTR DS:[EAX]
    48. (省略部分代码)
    49. 005CB9A5  |>  33C0            XOR EAX,EAX
    50. 005CB9A7  |.  5A              POP EDX
    51. 005CB9A8  |.  59              POP ECX
    52. 005CB9A9  |.  59              POP ECX
    53. 005CB9AA  |.  64:8910         MOV DWORD PTR FS:[EAX],EDX
    54. 005CB9AD  |.  68 C7B95C00     PUSH pfstudio.005CB9C7
    55. 005CB9B2  |>  8D45 EC         LEA EAX,DWORD PTR SS:[EBP-14]
    56. 005CB9B5  |.  BA 05000000     MOV EDX,5
    57. 005CB9BA  |.  E8 4D90E3FF     CALL pfstudio.00404A0C
    58. 005CB9BF  \.  C3              RETN
    59. 005CB9C0   .^ E9 8389E3FF     JMP pfstudio.00404348
    60. 005CB9C5   .^ EB EB           JMP SHORT pfstudio.005CB9B2
    61. 005CB9C7   .  5B              POP EBX
    62. 005CB9C8   .  8BE5            MOV ESP,EBP
    63. 005CB9CA   .  5D              POP EBP
    64. 005CB9CB   .  C3              RETN
    65. 005CB9CC   .  E8 2BFFFFFF     CALL pfstudio.005CB8FC
    66. 005CB9D1   .  C3              RETN
    复制代码



    好吧,咱先简化下。上面这一大段,咱其实可以把它变成这样:
    1. A.
    2. 005CB924  |.  E8 973CFBFF     CALL pfstudio.0057F5C0             ;  对用户名长度的检测!
    3. 005CB929  |.  84C0            TEST AL,AL
    4. 005CB92B  |.  74 4A           JE SHORT pfstudio.005CB977         ;  一失足成千古恨~~谁让你乱跳的?
    5. (省略部分代码)
    6. B.
    7. 005CB932  |.  E8 01FFFFFF     CALL pfstudio.005CB838               ;  算法核心之处就在这里面哦
    8. 005CB937  |.  8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]         ;  注册码运算的结果
    9. (省略部分代码)
    10. C.
    11. 005CB945  |.  8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]         ;  用户名(ASCII "GGLHY")
    12. 005CB948  |.  5A              POP EDX                              ;  数据窗口,看看庐山真面目吧
    13. 005CB949  |.  E8 F63CFBFF     CALL pfstudio.0057F644
    14. 005CB94E  |.  84C0            TEST AL,AL
    15. 005CB950  |.  75 29           JNZ SHORT pfstudio.005CB97B          ;  跳上黑木崖,勇闯光明顶!
    16. (省略部分代码)
    17. D.
    18. 005CB96E  |.  E8 D13CFBFF     CALL pfstudio.0057F644             ;  用户名转小写的验证
    19. 005CB973  |.  84C0            TEST AL,AL
    20. 005CB975  |.  75 04           JNZ SHORT pfstudio.005CB97B        ;  跳跳更健康,OK更闪亮~
    21. 005CB977  |>  33D2            XOR EDX,EDX                        ;  不跳就用强,上C4!
    22. 005CB979  |.  EB 02           JMP SHORT pfstudio.005CB97D
    23. 005CB97B  |>  B2 01           MOV DL,1                           ;  千年等“1”回!
    复制代码


    换言之,一个JE不能实现,且2个JNZ必须有一处实现。算法的核心更不能就轻易放过哈
        用户名转小写的注册验证流程与用户名未转小写的一样,为节约篇幅我就略去了。同时为保证大家对算法核心的理解,我会把它发在最后边。
        现在,我们分别来看看:

                                                                                           一、对用户名的检测
    1. 0057F5C0  /.  55              PUSH EBP
    2. 0057F5C1  |.  8BEC            MOV EBP,ESP
    3. 0057F5C3  |.  83C4 F8         ADD ESP,-8
    4. (省略部分代码)
    5. 0057F5E2  |.  8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]       ;  输入的用户名(ASCII "GGLHY")
    6. 0057F5E5  |.  E8 BE56E8FF     CALL pfstudio.00404CA8
    7. 0057F5EA  |.  8945 FC         MOV DWORD PTR SS:[EBP-4],EAX       ;  得到用户名的长度!
    8. 0057F5ED  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
    9. 0057F5F0  |.  83C0 FB         ADD EAX,-5                         ;  长度值 -5
    10. 0057F5F3  |.  83E8 1C         SUB EAX,1C                         ;  再减32
    11. 0057F5F6  |.  0F92C3          SETB BL                            ;  我的爱对你说,真爱才是爱
    12. 0057F5F9  |.  84DB            TEST BL,BL
    13. 0057F5FB  |.  74 21           JE SHORT pfstudio.0057F61E         ;  跳来跳去不是好孩子哦~
    14. 0057F5FD  |.  8B7D FC         MOV EDI,DWORD PTR SS:[EBP-4]       ;  用户名的长度!
    15. 0057F600  |.  85FF            TEST EDI,EDI
    16. 0057F602  |.  7E 1A           JLE SHORT pfstudio.0057F61E
    17. 0057F604  |.  BE 01000000     MOV ESI,1
    18. 0057F609  |>  55              /PUSH EBP                          ; /Arg1
    19. 0057F60A  |.  8BC6            |MOV EAX,ESI                       ; |
    20. 0057F60C  |.  E8 7FFFFFFF     |CALL pfstudio.0057F590            ; \pfstudio.0057F590
    21. 0057F611  |.  59              |POP ECX
    22. 0057F612  |.  84C0            |TEST AL,AL
    23. 0057F614  |.  75 04           |JNZ SHORT pfstudio.0057F61A
    24. 0057F616  |.  33DB            |XOR EBX,EBX
    25. 0057F618  |.  EB 04           |JMP SHORT pfstudio.0057F61E
    26. 0057F61A  |>  46              |INC ESI
    27. 0057F61B  |.  4F              |DEC EDI
    28. 0057F61C  |.^ 75 EB           \JNZ SHORT pfstudio.0057F609
    29. (省略部分代码)
    30. 0057F63B   .  8BC3            MOV EAX,EBX                         ;EBX,爱要怎么说出口?
    31. 0057F63D   .  5F              POP EDI
    32. 0057F63E   .  5E              POP ESI
    33. 0057F63F   .  5B              POP EBX
    34. 0057F640   .  59              POP ECX
    35. 0057F641   .  59              POP ECX
    36. 0057F642   .  5D              POP EBP
    37. 0057F643   .  C3              RETN
    复制代码
         嗯,聪明的你一定马上就发现了程序对用户名的长度做了限制:不得小于5。
         是的,你真的很聪明~~
         但是,但是,但是.....我真的不想说这个“但是”,但是,我还是要说:但是,对用户名的限制真的就只有这么一条吗?
    让我们在程序中输入用户名试试,看看会发生什么,随便按下键盘上的神马字母啊、数字啊、标点符号键不松,你会在不久的将来听见不断的“咚咚”声,而用户名框里却再也没有变化了。
         好吧,皇上,还记得大明湖畔的夏雨荷吗?oh,no,错了。是大家还记得0057F5F3处的 SUB EAX,1C 吗?
    “1C”啊,你是电,你是光,你是唯一的神话~~~

    小结:用户名长度大于4而小于33。



                                                                 二、用户名与注册码前半部分的恩怨情仇

    1. 005CB949  |.  E8 F63CFBFF     CALL pfstudio.0057F644             ; 进去吧,好好看看
    2. 005CB94E  |.  84C0            TEST AL,AL
    3. 005CB950  |.  75 29           JNZ SHORT pfstudio.005CB97B        ;  跳上黑木崖,勇闯光明顶!
    复制代码

    F7进入:
    1. 0057F644  /.  55              PUSH EBP
    2. 0057F645  |.  8BEC            MOV EBP,ESP
    3. 0057F647  |.  33C9            XOR ECX,ECX
    4. (省略部分代码)
    5. 0057F674  |.  8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]
    6. 0057F677  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]       ;  用户名(ASCII "GGLHY")
    7. 0057F67A  |.  E8 29FEFFFF     CALL pfstudio.0057F4A8             ;  用户名的运算得到的字符串。本例“36405”
    8. 0057F67F  |.  8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]
    9. 0057F682  |.  E8 2156E8FF     CALL pfstudio.00404CA8
    10. (省略部分代码)
    11. 0057F6AD  |.  E8 5A9FE8FF     CALL pfstudio.0040960C               ;  !!!
    12. 0057F6B2  |.  8BF0            MOV ESI,EAX
    13. 0057F6B4  |.  8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
    14. 0057F6B7  |.  E8 EC55E8FF     CALL pfstudio.00404CA8
    15. 0057F6BC  |.  8D53 05         LEA EDX,DWORD PTR DS:[EBX+5]
    16. 0057F6BF  |.  3BC2            CMP EAX,EDX
    17. 0057F6C1  |.  75 30           JNZ SHORT pfstudio.0057F6F3
    18. 0057F6C3  |.  8D45 EC         LEA EAX,DWORD PTR SS:[EBP-14]
    19. 0057F6C6  |.  50              PUSH EAX
    20. 0057F6C7  |.  8BCB            MOV ECX,EBX
    21. 0057F6C9  |.  BA 01000000     MOV EDX,1
    22. 0057F6CE  |.  8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
    23. 0057F6D1  |.  E8 3258E8FF     CALL pfstudio.00404F08
    24. 0057F6D6  |.  8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]      ;  注意这里,数据窗口的内容
    25. 0057F6D9  |.  8B55 F4         MOV EDX,DWORD PTR SS:[EBP-C]       ;  用户名的运算得到的字符串。本例“36405”
    26. 0057F6DC  |.  E8 1357E8FF     CALL pfstudio.00404DF4             ;  我不说,你能猜到它要干嘛了吗?
    27. 0057F6E1  |.  75 10           JNZ SHORT pfstudio.0057F6F3
    28. 0057F6E3  |.  81FE D2040000   CMP ESI,4D2                        ;  注意这常数
    29. 0057F6E9  |.  74 0C           JE SHORT pfstudio.0057F6F7
    30. 0057F6EB  |.  81FE D1040000   CMP ESI,4D1                        ;  还有这个常数
    31. 0057F6F1  |.  74 04           JE SHORT pfstudio.0057F6F7
    32. 0057F6F3  |>  33C0            XOR EAX,EAX                        ;  出卖我的爱,让0跑回来,最后知道**的我,眼泪掉下来
    33. 0057F6F5  |.  EB 02           JMP SHORT pfstudio.0057F6F9
    34. 0057F6F7  |>  B0 01           MOV AL,1                           ;  在爱与不爱间 来回千万遍!
    35. 0057F6F9  |> \8BD8            MOV EBX,EAX                        ;  是爱心传递使者还是冷血连环杀手?
    36. (省略部分代码)
    37. 0057F71B   .^ EB EB           JMP SHORT pfstudio.0057F708
    38. 0057F71D   .  8BC3            MOV EAX,EBX                          ;  EBX,你亦真亦幻~~是正是邪?
    39. 0057F71F   .  5E              POP ESI
    40. 0057F720   .  5B              POP EBX
    41. 0057F721   .  8BE5            MOV ESP,EBP
    42. 0057F723   .  5D              POP EBP
    43. 0057F724   .  C3              RETN
    复制代码

    恩,我们先停下按F8的手,端起一杯清茶或香浓的咖啡,整理下思绪:
        用户名运算后,得到了一个5位数的字符串“36405”,路要一步一步走,饭要一口一口的吃。我们必须弄清楚这个5位数的字符串是何方神圣。我们先看下它的来历:
    1. 0057F674  |.  8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]
    2. 0057F677  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]         ;  用户名(ASCII "GGLHY")
    3. 0057F67A  |.  E8 29FEFFFF     CALL pfstudio.0057F4A8               ;  用户名的运算结果“36405”
    4. 0057F67F  |.  8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]         ;  用户名的运算得到的字符串。本例“36405”
    复制代码

    F7进入:
    1. 0057F4B7  |.  8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
    2. 0057F4BA  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]         ;  用户名(ASCII "GGLHY")
    3. 0057F4BD  |.  E8 D659E8FF     CALL pfstudio.00404E98
    4. 0057F4C2  |.  33C0            XOR EAX,EAX
    5. 0057F4C4  |.  55              PUSH EBP
    6. 0057F4C5  |.  68 63F55700     PUSH pfstudio.0057F563
    7. 0057F4CA  |.  64:FF30         PUSH DWORD PTR FS:[EAX]
    8. 0057F4CD  |.  64:8920         MOV DWORD PTR FS:[EAX],ESP
    9. 0057F4D0  |.  33DB            XOR EBX,EBX
    10. 0057F4D2  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
    11. 0057F4D5  |.  E8 CE57E8FF     CALL pfstudio.00404CA8
    12. 0057F4DA  |.  83F8 01         CMP EAX,1                            ;  用户名长度,本例=5
    13. 0057F4DD  |.  7C 11           JL SHORT pfstudio.0057F4F0
    14. 0057F4DF  |>  8B55 FC         /MOV EDX,DWORD PTR SS:[EBP-4]        ; 用户名(ASCII "GGLHY")
    15. 0057F4E2  |.  0FB65402 FF     |MOVZX EDX,BYTE PTR DS:[EDX+EAX-1]   ;  依次倒取用户名每一位ASC
    16. 0057F4E7  |.  03DA            |ADD EBX,EDX                         ;  累加(EBX初始=0)
    17. 0057F4E9  |.  2BD8            |SUB EBX,EAX                         ;  累加和 - 该字符在用户名中的位置值!
    18. 0057F4EB  |.  48              |DEC EAX
    19. 0057F4EC  |.  85C0            |TEST EAX,EAX
    20. 0057F4EE  |.^ 75 EF           \JNZ SHORT pfstudio.0057F4DF         ;  用户名运算完毕,结果保存到EBX
    21. 0057F4F0  |>  56              PUSH ESI                             ; /Arg1
    22. 0057F4F1  |.  8BC3            MOV EAX,EBX                          ; |用户名运算的结果,本例=16C
    23. 0057F4F3  |.  B9 E8030000     MOV ECX,3E8                          ; |
    24. 0057F4F8  |.  99              CDQ                                  ; |
    25. 0057F4F9  |.  F7F9            IDIV ECX                             ; |mod 3E8H(1000)
    26. 0057F4FB  |.  8955 F4         MOV DWORD PTR SS:[EBP-C],EDX         ; |
    27. 0057F4FE  |.  C645 F8 00      MOV BYTE PTR SS:[EBP-8],0            ; |
    28. 0057F502  |.  8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]         ; |
    29. 0057F505  |.  33C9            XOR ECX,ECX                          ; |
    30. 0057F507  |.  B8 78F55700     MOV EAX,pfstudio.0057F578            ; |ASCII "%.3d"
    31. 0057F50C  |.  E8 EFB1E8FF     CALL pfstudio.0040A700               ; \pfstudio.0040A700
    32. 0057F511  |.  8D45 F0         LEA EAX,DWORD PTR SS:[EBP-10]        ;  余数转化为3位数的字符形式,本例=“364”
    33. 0057F514  |.  50              PUSH EAX
    34. 0057F515  |.  8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]         ;  用户名(ASCII "GGLHY")
    35. 0057F518  |.  E8 8B57E8FF     CALL pfstudio.00404CA8               ;  取用户名长度,准备进行计算
    36. 0057F51D  |.  B9 64000000     MOV ECX,64                           ; |
    37. 0057F522  |.  99              CDQ                                  ; |
    38. 0057F523  |.  F7F9            IDIV ECX                             ; |mod 64H(100)
    39. 0057F525  |.  8955 F4         MOV DWORD PTR SS:[EBP-C],EDX         ; |
    40. 0057F528  |.  C645 F8 00      MOV BYTE PTR SS:[EBP-8],0            ; |
    41. 0057F52C  |.  8D55 F4         LEA EDX,DWORD PTR SS:[EBP-C]         ; |
    42. 0057F52F  |.  33C9            XOR ECX,ECX                          ; |
    43. 0057F531  |.  B8 88F55700     MOV EAX,pfstudio.0057F588            ; |ASCII "%.2d"
    44. 0057F536  |.  E8 C5B1E8FF     CALL pfstudio.0040A700               ; \pfstudio.0040A700
    45. 0057F53B  |.  8B55 F0         MOV EDX,DWORD PTR SS:[EBP-10]        ;  余数转为2位数的字符形式,本例=“05”
    46. 0057F53E  |.  8BC6            MOV EAX,ESI
    47. 0057F540  |.  E8 6B57E8FF     CALL pfstudio.00404CB0
    48. 0057F545  |.  33C0            XOR EAX,EAX
    复制代码
          大致看下流程,我们就知道了,这个5位数分别是个3位数和一个2位数相连的结果。
    详情如下:
    3位数的来历:
           用户名每一位的ASC 减去 该位在用户名中的位置 的差值 累加起来,然后再MOD 3E8(1000),余数转换成3位数的形式。
           比如用户名123,则是(31 -1) + (32-2) + (33 -3) = 90H
           90H =144
          144 mod 1000(3E8) =144 从而得到一个3位数的字符串“144”(不足3位则前面补0)
    2位数的来历:
            很简单,用户名的长度 mod 100 ,余数转为2位数的字符串形式。(不足2位前面补0)

          OK,我们解开了字符串“36405”的身世之谜,接下来就是用户名运算得到字符串“36405”,与某个地址的值进行比较,不一样就挂了。所以嘛,那个地址里不是蒙面佐罗就是侠盗罗宾汉吗?我们得去找找他从哪里来。
        很显然,在我们看到所有注册码都联合起来后一路F8下来,我们是不是忽略了什么东西呢?
        好吧,回到罪案现场,咱去调查下:
    1. (省略部分代码)
    2. 005CB8AA  |.  8B06            MOV EAX,DWORD PTR DS:[ESI]           ;  全世界无产者,联合起来!(ASCII "12345678901357924680")
    3. 005CB8AC  |.  E8 9B53EEFF     CALL pfstudio.004B0C4C
    4. 005CB8B1  |.  8B45 E8         MOV EAX,DWORD PTR SS:[EBP-18]
    5. 005CB8B4  |.  8D55 EC         LEA EDX,DWORD PTR SS:[EBP-14]
    6. 005CB8B7  |.  E8 E836FBFF     CALL pfstudio.0057EFA4               ; 打 倒日本帝国主义!还我们真xiang
    7. 005CB8BC  |.  8B55 EC         MOV EDX,DWORD PTR SS:[EBP-14]        ; “西经”已出现,悟空来取吧
    8. 005CB8BF  |.  8BC6            MOV EAX,ESI
    9. 005CB8C1  |.  E8 7691E3FF     CALL pfstudio.00404A3C
    10. (省略部分代码)
    复制代码
    看看数据窗口:
    1. 00ED47A0  5F B2 18 1B D5 AF 2C DF  _?寨,
    2. 00ED47A8  C0 CE                    牢.
    复制代码

    整理下:
    1. 5F B2 18 1B D5 AF 2C DF C0 CE  
    复制代码

        哈哈,一二三四五,快来数一数。正好20位!如果您的大脑在劳累之余还能想得起注册码的总长20位的话,我要恭喜你一下了。不过不是“You win”,而是“你已经很接近真xiang了”。
    让我们把视线拉回到这里来:
    1. 0057F6D6  |.  8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]      ;  注意这里,数据窗口的内容
    2. 0057F6D9  |.  8B55 F4         MOV EDX,DWORD PTR SS:[EBP-C]       ;  用户名的运算得到的字符串。本例“36405”
    3. 0057F6DC  |.  E8 1357E8FF     CALL pfstudio.00404DF4             ;  我不说,你能猜到它要干嘛了吗?
    4. 0057F6E1  |.  75 10           JNZ SHORT pfstudio.0057F6F3
    复制代码

        在程序运行到0057F6D6 处的时候,我们偷偷看下数据窗口,你看到了什么?啥~~~看透了爱情看透了你?哦,我听错了,你说看到的是这里:
    1. 5F B2 18 1B D5
    复制代码

        哈哈,显然,用户名运算得到的字符串与“36405”与上面这5组(10)对应的5位字符相比较,如果不对就会“挥一挥衣袖,不带走一片西天的云彩”~~
        明白这一点就好办了,咱去看看这5组“数值”的来历(PS:不是李连杰演的新少林五祖啦,哈哈)。
        让我们紧跟全世界无产者的脚步,看看他们是如何利用批判的武器来解释“新少林五祖”的出身的?



                                                                               三.如梦亦如幻,应作如是观

        让我们拿起摄像机,和无产者们一起来见证这奇迹的时刻吧!(Sorry,阿狸先生,借用了你的“见证奇迹的时刻”这一词,你不要找我要版权哦)
    1. 005CB8B7  |.  E8 E836FBFF     CALL pfstudio.0057EFA4               ;  打 倒日本帝国主义!还我们真xiang
    2. 005CB8BC  |.  8B55 EC         MOV EDX,DWORD PTR SS:[EBP-14]        ; “西经”已出现,悟空来取吧
    复制代码

    F7进入:
    游客,如果您要查看本帖隐藏内容请回复

    让我们把目光紧紧盯着它:

    1. 0057EFF3  |.  8A82 C4FA6700   |MOV AL,BYTE PTR DS:[EDX+67FAC4]     ;  查表~~~
    复制代码

    右键跟随到数据窗口,看到如下内容:
    1. 0067FABD                       7B         {
    2. 0067FAC5  4D 86 4E 63 45 BC 90 5F  M哊cE紣_
    3. 0067FACD  8D 40                    岪.
    复制代码

    好,咱看看看看10次循环完毕后,表中分别取得是哪些内容:
    1. 4D 86 4E 63 45 BC 7B 4D 86 4E
    复制代码

    很明显不一样哈,显然
    1. 0057EFEB  |.  B9 07000000     |MOV ECX,7                           ;  注意参数7
    2. 0057EFF0  |.  99              |CDQ
    3. 0057EFF1  |.  F7F9            |IDIV ECX
    4. 0057EFF3  |.  8A82 C4FA6700   |MOV AL,BYTE PTR DS:[EDX+67FAC4]     ;  查表~~~
    复制代码

    这里是导致取值不同的原因~~~
    恩,别告诉我你没看懂啊~~~~

    很好,看明白这个循环,我们基本上可以说是离成功只有一步之遥了~~
    注册码20位,每2位为一组作为数值,分别与查表的数值 XO人头马,我擦,错了,是XOR,得到的结果就保存在:
    1. 005CB8BC  |.  8B55 EC         MOV EDX,DWORD PTR SS:[EBP-14]        ; “西经”已出现,悟空来取吧
    复制代码


    大家可以去OD里实地考察一下,看看我们的神秘人的真面目。
    1. 00EC8284  5F B2 18 1B D5 AF 2C DF  _?寨,
    2. 00EC828C  C0 CE                    牢.
    复制代码

    眼熟吧,这不就是我们前面第二部分里看到的那一张张熟悉的面孔?

    所以,用户名运算的结果生成的字符串“36405”,每一位的ASC码,必须是注册码前10位(5组)分别与表中前5组XOR的结果相等。
    举例如下:
    1.   ( 3   6   4   0   5 )            <------  字符串
    2.     33  36  34  30  35            <------  对应的ASC码
    3. XOR
    4.     4D  86  4E  63  45            <------  所查的表
    5. ---------------------------------
    6.     7E  B0  7A  53  70            <------  结果
    复制代码

           将结果连接起来,就是注册码的前10位了。
           大家去这里看看:
    1. 0057F6D6  |.  8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]      ;  与下面的一样了吗?哈哈
    2. 0057F6D9  |.  8B55 F4         MOV EDX,DWORD PTR SS:[EBP-C]       ;  用户名的运算得到的字符串。本例“36405”
    复制代码

    很好!

            你说啥?
            还有后面10位?
            问得好,这证明了你是个头脑很清醒的人,没有被眼前的胜利冲昏头脑,还记得有潜藏的特务~~~
            不过,我要告诉大家的是,这个软件,我们只要记住前10位注册码(少林5组)分别与表中的前5组来XOR就行了,因为,注册码的后10位,其实是可以有固定的。对,你没听错,也没看错,后10位真的可以是有固定的~~~(当然,前提是你和我一样想简单点的话)


                                                                                               四、不是尾声的尾声

    不相信?好吧,尊驾请移步,看看这再也明白不过的内容吧:
    1. 0057F6E3  |.  81FE D2040000   CMP ESI,4D2                        ;  注意这常数
    2. 0057F6E9  |.  74 0C           JE SHORT pfstudio.0057F6F7
    3. 0057F6EB  |.  81FE D1040000   CMP ESI,4D1                        ;  还有这个常数
    4. 0057F6F1  |.  74 04           JE SHORT pfstudio.0057F6F7
    5. 0057F6F3  |>  33C0            XOR EAX,EAX                        ;  出卖我的爱,让0跑回来,最后知道真 相的我,眼泪掉下来
    6. 0057F6F5  |.  EB 02           JMP SHORT pfstudio.0057F6F9
    7. 0057F6F7  |>  B0 01           MOV AL,1                           ;  在爱与不爱间 来回千万遍!
    复制代码


            我们现在将疑犯锁定在ESI上,如果ESI的值=4D1或4D2,那么他就是我党成功打入敌特内部的优秀特工“深海”,否则他就是潜伏在我党内的特务“佛龛”。。。Got it?
           我让们看看ESI的来历,在这里:
    1. 0057F6AD  |.  E8 5A9FE8FF     CALL pfstudio.0040960C               ;  !!!
    2. 0057F6B2  |.  8BF0            MOV ESI,EAX
    复制代码

           谁说不想进去?学大禹治水三过家门而不入?
           兄弟,我只能说“I服了U”。

    F7进去后:
    1. 0040960C  /.  53              PUSH EBX
    2. 0040960D  |.  51              PUSH ECX
    3. 0040960E  |.  8BDA            MOV EBX,EDX
    4. 00409610  |.  8BD4            MOV EDX,ESP
    5. 00409612  |.  E8 559FFFFF     CALL pfstudio.0040356C               ;  再F7
    6. 00409617  |.  833C24 00       CMP DWORD PTR SS:[ESP],0
    7. 0040961B  |.  74 02           JE SHORT pfstudio.0040961F
    8. 0040961D  |.  8BC3            MOV EAX,EBX
    9. 0040961F  |>  5A              POP EDX
    10. 00409620  |.  5B              POP EBX
    11. 00409621  \.  C3              RETN
    复制代码

    再F7进入:
    1. 0040356C  /.  53              PUSH EBX
    2. 0040356D  |.  56              PUSH ESI
    3. 0040356E  |.  57              PUSH EDI
    4. 0040356F  |.  89C6            MOV ESI,EAX
    5. 00403571  |.  50              PUSH EAX
    6. 00403572  |.  85C0            TEST EAX,EAX
    7. 00403574  |.  74 6C           JE SHORT pfstudio.004035E2
    8. 00403576  |.  31C0            XOR EAX,EAX
    9. 00403578  |.  31DB            XOR EBX,EBX
    10. 0040357A  |.  BF CCCCCC0C     MOV EDI,0CCCCCCC
    11. 0040357F  |>  8A1E            /MOV BL,BYTE PTR DS:[ESI]              ; 注册码查表XOR后10位,每2位1组
    12. 00403581  |.  46              |INC ESI
    13. 00403582  |.  80FB 20         |CMP BL,20
    14. 00403585  |.^ 74 F8           \JE SHORT pfstudio.0040357F
    15. 00403587  |.  B5 00           MOV CH,0
    16. 00403589  |.  80FB 2D         CMP BL,2D                               ; 开始检测!下同
    17. 0040358C  |.  74 62           JE SHORT pfstudio.004035F0
    18. 0040358E  |.  80FB 2B         CMP BL,2B
    19. 00403591  |.  74 5F           JE SHORT pfstudio.004035F2
    20. 00403593  |>  80FB 24         CMP BL,24
    21. 00403596  |.  74 5F           JE SHORT pfstudio.004035F7
    22. 00403598  |.  80FB 78         CMP BL,78
    23. 0040359B  |.  74 5A           JE SHORT pfstudio.004035F7
    24. 0040359D  |.  80FB 58         CMP BL,58
    25. 004035A0  |.  74 55           JE SHORT pfstudio.004035F7
    26. 004035A2  |.  80FB 30         CMP BL,30
    27. 004035A5  |.  75 13           JNZ SHORT pfstudio.004035BA
    28. 004035A7  |.  8A1E            MOV BL,BYTE PTR DS:[ESI]
    29. 004035A9  |.  46              INC ESI
    30. 004035AA  |.  80FB 78         CMP BL,78
    31. 004035AD  |.  74 48           JE SHORT pfstudio.004035F7
    32. 004035AF  |.  80FB 58         CMP BL,58
    33. 004035B2  |.  74 43           JE SHORT pfstudio.004035F7
    34. 004035B4  |.  84DB            TEST BL,BL
    35. 004035B6  |.  74 20           JE SHORT pfstudio.004035D8
    36. 004035B8  |.  EB 04           JMP SHORT pfstudio.004035BE
    37. 004035BA  |>  84DB            TEST BL,BL
    38. 004035BC  |.  74 2D           JE SHORT pfstudio.004035EB
    39. 004035BE  |>  80EB 30         /SUB BL,30
    40. 004035C1  |.  80FB 09         |CMP BL,9
    41. 004035C4  |.  77 25           |JA SHORT pfstudio.004035EB                 ; 后5组只能是数字哦!
    42. 004035C6  |.  39F8            |CMP EAX,EDI
    43. 004035C8  |.  77 21           |JA SHORT pfstudio.004035EB
    44. 004035CA  |.  8D0480          |LEA EAX,DWORD PTR DS:[EAX+EAX*4]           ; 看懂了这循环的作用了吗
    45. 004035CD  |.  01C0            |ADD EAX,EAX
    46. 004035CF  |.  01D8            |ADD EAX,EBX
    47. 004035D1  |.  8A1E            |MOV BL,BYTE PTR DS:[ESI]
    48. 004035D3  |.  46              |INC ESI
    49. 004035D4  |.  84DB            |TEST BL,BL
    50. 004035D6  |.^ 75 E6           \JNZ SHORT pfstudio.004035BE
    51. 004035D8  |>  FECD            DEC CH
    52. 004035DA  |.  74 09           JE SHORT pfstudio.004035E5
    53. 004035DC  |.  85C0            TEST EAX,EAX
    54. 004035DE  |.  7D 54           JGE SHORT pfstudio.00403634
    55. 004035E0  |.  EB 09           JMP SHORT pfstudio.004035EB
    56. 004035E2  |>  46              INC ESI
    57. 004035E3  |.  EB 06           JMP SHORT pfstudio.004035EB
    58. 004035E5  |>  F7D8            NEG EAX
    59. 004035E7  |.  7E 4B           JLE SHORT pfstudio.00403634
    60. 004035E9  |.  78 49           JS SHORT pfstudio.00403634
    61. 004035EB  |>  5B              POP EBX                              ;  Default case of switch 0040360B
    62. 004035EC  |.  29DE            SUB ESI,EBX
    63. 004035EE  |.  EB 47           JMP SHORT pfstudio.00403637
    64. 004035F0  |>  FEC5            INC CH
    65. 004035F2  |>  8A1E            MOV BL,BYTE PTR DS:[ESI]
    66. 004035F4  |.  46              INC ESI
    67. 004035F5  |.^ EB 9C           JMP SHORT pfstudio.00403593
    68. 004035F7  |>  BF FFFFFF0F     MOV EDI,0FFFFFFF
    69. 004035FC  |.  8A1E            MOV BL,BYTE PTR DS:[ESI]
    70. 004035FE  |.  46              INC ESI
    71. 004035FF  |.  84DB            TEST BL,BL
    72. 00403601  |.^ 74 DF           JE SHORT pfstudio.004035E2
    73. 00403603  |>  80FB 61         /CMP BL,61
    74. 00403606  |.  72 03           |JB SHORT pfstudio.0040360B
    75. 00403608  |.  80EB 20         |SUB BL,20
    76. 0040360B  |>  80EB 30         |SUB BL,30                           ;  Switch (cases 30..46)
    77. 0040360E  |.  80FB 09         |CMP BL,9
    78. 00403611  |.  76 0B           |JBE SHORT pfstudio.0040361E
    79. 00403613  |.  80EB 11         |SUB BL,11
    80. 00403616  |.  80FB 05         |CMP BL,5
    81. 00403619  |.^ 77 D0           |JA SHORT pfstudio.004035EB
    82. 0040361B  |.  80C3 0A         |ADD BL,0A                           ;  Cases 41 ('A'),42 ('B'),43 ('C'),44 ('D'),45 ('E'),46 ('F') of switch 0040360B
    83. 0040361E  |>  39F8            |CMP EAX,EDI                         ;  Cases 30 ('0'),31 ('1'),32 ('2'),33 ('3'),34 ('4'),35 ('5'),36 ('6'),37 ('7'),38 ('8'),39 ('9') of switch 0040360B
    84. 00403620  |.^ 77 C9           |JA SHORT pfstudio.004035EB
    85. 00403622  |.  C1E0 04         |SHL EAX,4
    86. 00403625  |.  01D8            |ADD EAX,EBX
    87. 00403627  |.  8A1E            |MOV BL,BYTE PTR DS:[ESI]
    88. 00403629  |.  46              |INC ESI
    89. 0040362A  |.  84DB            |TEST BL,BL
    90. 0040362C  |.^ 75 D5           \JNZ SHORT pfstudio.00403603
    91. 0040362E  |.  FECD            DEC CH
    92. 00403630  |.  75 02           JNZ SHORT pfstudio.00403634
    93. 00403632  |.  F7D8            NEG EAX
    94. 00403634  |>  59              POP ECX
    95. 00403635  |.  31F6            XOR ESI,ESI
    96. 00403637  |>  8932            MOV DWORD PTR DS:[EDX],ESI
    97. 00403639  |.  5F              POP EDI
    98. 0040363A  |.  5E              POP ESI
    99. 0040363B  |.  5B              POP EBX
    100. 0040363C  \.  C3              RETN
    复制代码

             Oh my God!这多分支,好吓人哈~~
             不过,大家稍微有点信心好不好。我前面说了,如果我们想简单的话,那我们看把注册码最后10位是固定的情形,这里面的大部分内容都是纸老虎~~
             其实真正有用的,有这里(情形一):
    1. 004035BE  |>  80EB 30         /SUB BL,30
    2. 004035C1  |.  80FB 09         |CMP BL,9
    3. 004035C4  |.  77 25           |JA SHORT pfstudio.004035EB                 ; 后5组只能是数字哦!
    4. 004035C6  |.  39F8            |CMP EAX,EDI
    5. 004035C8  |.  77 21           |JA SHORT pfstudio.004035EB
    6. 004035CA  |.  8D0480          |LEA EAX,DWORD PTR DS:[EAX+EAX*4]           ; 看懂了这循环的作用了吗
    7. 004035CD  |.  01C0            |ADD EAX,EAX
    8. 004035CF  |.  01D8            |ADD EAX,EBX
    9. 004035D1  |.  8A1E            |MOV BL,BYTE PTR DS:[ESI]
    10. 004035D3  |.  46              |INC ESI
    11. 004035D4  |.  84DB            |TEST BL,BL
    12. 004035D6  |.^ 75 E6           \JNZ SHORT pfstudio.004035BE
    复制代码

    换句话说,我们就看最简单的情形,也就是这5组全是数字的话,则 条件一:
           输入的注册码后10位查表XOR的结果,(也是5组),每组作为ASC,只能不小于30且不大于39(换句话说,只能为数字)。
           不满足该条件,则ESI的值为FFFFFFFF。
                    条件二:
           这5组,每组作为的ASC - 30 后 的数值作如下运算:

    假设这5组分别是:

    1. 33 34 35 36 37
    2. 则  (33-30)* 10000
    3.     (34-30)* 1000
    4.     (35-30)* 100
    5.     (36-30)* 10
    6.     (37-30)* 1
    复制代码

         然后把这5个积加起来,其实就是一个简单的5位数而已~~,这里就是34567。


    复杂一点的情形二,就是注册码后10位查表XOR得到的5组结果中不仅有数字,还有字母。这就是下面那长长的循环中含有的N多分支的情形。在这里会将每组数值进行对应的运算,比如
    1. 00403608  |.  80EB 20         |SUB BL,20
    2. 0040360B  |>  80EB 30         |SUB BL,30                           ;  Switch (cases 30..46)
    3. 0040360E  |.  80FB 09         |CMP BL,9
    4. 00403611  |.  76 0B           |JBE SHORT pfstudio.0040361E
    5. 00403613  |.  80EB 11         |SUB BL,11
    6. 00403616  |.  80FB 05         |CMP BL,5
    复制代码

    这里的情况复杂了些,大家有兴趣可以自己跟踪一下。我嘛,呵呵,稍微偷下懒啊哈!



    好吧,既然这里的主要内容都搞清楚了,那我们看看,ESI的值应该是多少?
    请出这2个常数:4D1、4D2
    4D1 =1233
    4D2 =1234
               OK,这2个数怎么那么符合前面内容的要求呢?既是纯数字,又可看做各个乘积的累加和~~~
    不会这么巧吧?

           让我们简单化点,就看看情形一这种纯数字的条件下,注册码最后10位是什么。

           你说啥?1233或1234才4位,注册码要5组,配不上?
    我的大哥啊,从某种意义上来说,1234 是等价于 01234的啊!
    好吧,我们假设ESI的值=4D2=1234  =》01234,那么注册码后10位(5组)可以看做:

    1. ( 0   1   2   3   4 )               <----- ESI的值对应的10进制字符形式
    2.   30  31  32  33  34                 <----- 对应的ASC值
    3. XOR
    4.   BC  7B  4D  86  4E                 <---- 查表的后5组 !(还记得有个参数7吗?)
    5. -----------------------------
    6.   8C  4A  7F  B5  7A
    复制代码

    那么,ESI要等于固定数值4D2(1234),则注册码后10位必须为:8C4A7FB57A
    同理,ESI要等于固定数值4D1(1233),则注册码后10位必须为:8C4A7FB57D

       好了。我们重新组合下前10位和后10位,可理解成前10位链接后面的固定字符串要“8C4A7FB57A”(或“8C4A7FB57D”)
    现在,我们在注册信息框中输入:
    User:GGLHY
    Reg key:7EB07A53708C4A7FB57D
    看看,OK是不是已经 OK 了啊?{:4_307:}






    怎么样,算法也是个战5渣吧


    哎,写了好几个小时,累死了!破它比写破文简单多了~~~~
    附上没优化、没美化又没说话的很烂的VB源码,有助于大家对该软件注册算法的理解:

    游客,如果您要查看本帖隐藏内容请回复




    这里是不太重要的内容,大家可以略过了~~~
    下面是用户名与注册码前10位运算的结果不匹配的话,程序会将用户名转小写再次运算来验证。
    因为流程一样,这里就不写了,列出用户名“乔装”的证据:


    1. 005CB7F0  |.  E8 F3D7E3FF     CALL pfstudio.00408FE8             ;  用户名大写转小写
    2. 005CB7F5  |.  33C0            XOR EAX,EAX
    3. 005CB7F7  |.  5A              POP EDX
    复制代码

    f7进入:
    1. 00408FEF  |.  8BC6            MOV EAX,ESI
    2. 00408FF1  |.  E8 B2BCFFFF     CALL pfstudio.00404CA8
    3. 00408FF6  |.  8BD8            MOV EBX,EAX                        ;  用户名长度
    4. 00408FF8  |.  8BC7            MOV EAX,EDI
    5. 00408FFA  |.  8BD3            MOV EDX,EBX
    6. 00408FFC  |.  E8 33C0FFFF     CALL pfstudio.00405034
    7. 00409001  |.  8BD6            MOV EDX,ESI                        ;  用户名(ASCII "GGLHY")
    8. 00409003  |.  8B37            MOV ESI,DWORD PTR DS:[EDI]
    9. 00409005  |.  85DB            TEST EBX,EBX
    10. 00409007  |.  74 15           JE SHORT pfstudio.0040901E
    11. 00409009  |>  8A02            /MOV AL,BYTE PTR DS:[EDX]          ;  用户名(ASCII "GGLHY")每一位
    12. 0040900B  |.  3C 41           |CMP AL,41
    13. 0040900D  |.  72 06           |JB SHORT pfstudio.00409015
    14. 0040900F  |.  3C 5A           |CMP AL,5A
    15. 00409011  |.  77 02           |JA SHORT pfstudio.00409015
    16. 00409013  |.  04 20           |ADD AL,20                             ; 证据在此,休得抵赖~~~~
    17. 00409015  |>  8806            |MOV BYTE PTR DS:[ESI],AL
    18. 00409017  |.  42              |INC EDX
    19. 00409018  |.  46              |INC ESI
    20. 00409019  |.  4B              |DEC EBX
    21. 0040901A  |.  85DB            |TEST EBX,EBX
    22. 0040901C  |.^ 75 EB           \JNZ SHORT pfstudio.00409009       ;  大写转小写~~~
    23. 0040901E  |>  5F              POP EDI
    24. 0040901F  |.  5E              POP ESI
    25. 00409020  |.  5B              POP EBX
    26. 00409021  \.  C3              RETN
    复制代码





    评分

    参与人数 3威望 +12 飘云币 +16 收起 理由
    阳光宅男 + 4 + 4 PYG有你更精彩!
    cjteam + 8 辛苦 努力
    飞天 + 8 + 4 赞一个!

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-5-12 21:54
  • 签到天数: 39 天

    [LV.5]常住居民I

    发表于 2014-3-6 20:43:38 | 显示全部楼层
    瞅瞅算法分析过程。
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2025-1-14 16:50
  • 签到天数: 1592 天

    [LV.Master]伴坛终老

    发表于 2014-3-8 19:08:53 | 显示全部楼层
    看看,学习一下。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-4-10 00:28
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    发表于 2014-3-9 10:42:30 | 显示全部楼层
    继续翻旧帖学习
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-11-19 11:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-9-2 19:17:22 | 显示全部楼层

    点评

    果然~~~ 一字不落的复制、粘贴的。。。 这叫人情何以堪~~~ 谢谢兄弟了~~~  详情 回复 发表于 2014-9-2 20:32
    谢谢版主兄弟的提醒!俺瞅瞅去~  发表于 2014-9-2 20:26

    评分

    参与人数 1飘云币 +20 收起 理由
    GGLHY + 20 热心人~~

    查看全部评分

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2015-8-23 23:49
  • 签到天数: 27 天

    [LV.4]偶尔看看III

     楼主| 发表于 2014-9-2 20:32:31 | 显示全部楼层
    DaShanRen 发表于 2014-9-2 19:17
    被文抄:
    http://www.52pojie.cn/forum.php?mod=viewthread&tid=287191&extra=page%3D1%26filter%3Dlastpo ...

    果然~~~

    一字不落的复制、粘贴的。。。

    这叫人情何以堪~~~




    谢谢兄弟了~~~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2025-1-14 16:07
  • 签到天数: 1093 天

    [LV.10]以坛为家III

    发表于 2014-9-4 21:16:21 | 显示全部楼层
    大神依然是大神,支持!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2014-11-7 02:53:03 | 显示全部楼层
    支持下,非常不错的文
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2025-1-12 21:13
  • 签到天数: 2485 天

    [LV.Master]伴坛终老

    发表于 2014-11-13 22:40:01 | 显示全部楼层
    看看先哈哈
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表