飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 8923|回复: 9

[原创] 《办公室收文登记 1.0》算法分析

[复制链接]
  • TA的每日心情
    开心
    2023-2-21 15:52
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2007-3-21 14:22:13 | 显示全部楼层 |阅读模式
    【文章标题】: 《办公室收文登记 1.0》算法分析
    【文章作者】: 水中花
    【软件名称】: 办公室收文登记
    【下载地址】: 自己搜索下载
    【加壳方式】: UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo
    【编写语言】: Delphi
    【使用工具】: OD
    【操作平台】: xp+sp2
    【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
    --------------------------------------------------------------------------------
    【详细过程】
      一、用UPX加的壳,手动脱壳,用PEiD查看,是Delphi编写,请出DeDe,找到注册模块。
      二、下断在此处
      0057142C  /.  55            push    ebp
      0057142D  |.  8BEC          mov     ebp, esp
      0057142F  |.  33C9          xor     ecx, ecx
      00571431  |.  51            push    ecx
      00571432  |.  51            push    ecx
      00571433  |.  51            push    ecx
      00571434  |.  51            push    ecx
      00571435  |.  51            push    ecx
      00571436  |.  53            push    ebx
      00571437  |.  8BD8          mov     ebx, eax
      00571439  |.  33C0          xor     eax, eax
      0057143B  |.  55            push    ebp
      0057143C  |.  68 BE155700   push    swdj_Unp.005715BE
      00571441  |.  64:FF30       push    dword ptr fs:[eax]
      00571444  |.  64:8920       mov     dword ptr fs:[eax], esp
      00571447  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
      0057144A  |.  8B83 DC020000 mov     eax, dword ptr [ebx+2DC]
      00571450  |.  E8 E78BECFF   call    swdj_Unp.0043A03C
      00571455  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ;  输入的假码
      00571458  |.  50            push    eax
      00571459  |.  8D55 F4       lea     edx, dword ptr [ebp-C]
      0057145C  |.  8B83 D8020000 mov     eax, dword ptr [ebx+2D8]
      00571462  |.  E8 D58BECFF   call    swdj_Unp.0043A03C
      00571467  |.  8B45 F4       mov     eax, dword ptr [ebp-C]           ;  机器码
      0057146A  |.  8D4D F8       lea     ecx, dword ptr [ebp-8]
      0057146D  |.  BA FF748200   mov     edx, 8274FF                      ;  固定值8274FF
      00571472  |.  E8 6D28FFFF   call    swdj_Unp.00563CE4                ;  算法关键处
      00571477  |.  8B55 F8       mov     edx, dword ptr [ebp-8]           ;  出现真码
      0057147A  |.  58            pop     eax
      0057147B  |.  E8 F82CE9FF   call    swdj_Unp.00404178                ;  真假注册码比较
      00571480  |.  74 22         je      short swdj_Unp.005714A4          ;  关键跳
      00571482  |.  BA D4155700   mov     edx, swdj_Unp.005715D4
      00571487  |.  B8 E4155700   mov     eax, swdj_Unp.005715E4
      0057148C  |.  E8 672CFFFF   call    swdj_Unp.005640F8
      00571491  |.  8B83 DC020000 mov     eax, dword ptr [ebx+2DC]
      00571497  |.  8B10          mov     edx, dword ptr [eax]
      00571499  |.  FF92 B0000000 call    dword ptr [edx+B0]
      0057149F  |.  E9 EF000000   jmp     swdj_Unp.00571593
      005714A4  |>  BA 14165700   mov     edx, swdj_Unp.00571614
      005714A9  |.  B8 24165700   mov     eax, swdj_Unp.00571624
      005714AE  |.  E8 452CFFFF   call    swdj_Unp.005640F8
      005714B3  |.  BA 48165700   mov     edx, swdj_Unp.00571648
      005714B8  |.  8BC3          mov     eax, ebx
      005714BA  |.  E8 AD8BECFF   call    swdj_Unp.0043A06C
      
      跟进算法0057147B  |.  E8 F82CE9FF   call    swdj_Unp.00404178  处
      00563CE4  /$  55            push    ebp
      00563CE5  |.  8BEC          mov     ebp, esp
      00563CE7  |.  6A 00         push    0
      00563CE9  |.  6A 00         push    0
      00563CEB  |.  6A 00         push    0
      00563CED  |.  6A 00         push    0
      00563CEF  |.  6A 00         push    0
      00563CF1  |.  53            push    ebx
      00563CF2  |.  56            push    esi
      00563CF3  |.  57            push    edi
      00563CF4  |.  8BF9          mov     edi, ecx
      00563CF6  |.  8BDA          mov     ebx, edx
      00563CF8  |.  8BF0          mov     esi, eax                         ;  机器码存入esi中
      00563CFA  |.  33C0          xor     eax, eax                         ;  清零
      00563CFC  |.  55            push    ebp
      00563CFD  |.  68 F83D5600   push    swdj_Unp.00563DF8
      00563D02  |.  64:FF30       push    dword ptr fs:[eax]
      00563D05  |.  64:8920       mov     dword ptr fs:[eax], esp
      00563D08  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
      00563D0B  |.  8BD6          mov     edx, esi
      00563D0D  |.  E8 6E01EAFF   call    swdj_Unp.00403E80
      00563D12  |.  895D F8       mov     dword ptr [ebp-8], ebx
      00563D15  |.  8BC7          mov     eax, edi
      00563D17  |.  8B55 F4       mov     edx, dword ptr [ebp-C]           ;  机器码
      00563D1A  |.  E8 1D01EAFF   call    swdj_Unp.00403E3C
      00563D1F  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
      00563D22  |.  E8 4103EAFF   call    swdj_Unp.00404068                ;  取机器码的长度
      00563D27  |.  8BF0          mov     esi, eax
      00563D29  |.  85F6          test    esi, esi
      00563D2B  |.  7E 3B         jle     short swdj_Unp.00563D68
      00563D2D  |.  BB 01000000   mov     ebx, 1
      00563D32  |>  8BC7          /mov     eax, edi                        ;  机器码存入eax
      00563D34  |.  E8 FF04EAFF   |call    swdj_Unp.00404238
      00563D39  |.  8B55 F4       |mov     edx, dword ptr [ebp-C]          ;  机器码
      00563D3C  |.  8A541A FF     |mov     dl, byte ptr [edx+ebx-1]        ;  依次取机器码
      00563D40  |.  8B4D F8       |mov     ecx, dword ptr [ebp-8]          ;  初值为8274FF
      00563D43  |.  C1E9 08       |shr     ecx, 8                          ;  逻辑右移8位
      00563D46  |.  32D1          |xor     dl, cl                          ;  低位异或
      00563D48  |.  885418 FF     |mov     byte ptr [eax+ebx-1], dl        ;  低位存入[eax+ebx-1]中
      00563D4C  |.  8B07          |mov     eax, dword ptr [edi]            ;  变形后的机器码
      00563D4E  |.  0FB64418 FF   |movzx   eax, byte ptr [eax+ebx-1]
      00563D53  |.  0345 F8       |add     eax, dword ptr [ebp-8]          ;  低位异或后 add [ebp-8](初值为8274FF)
      00563D56  |.  69C0 D5DD0000 |imul    eax, eax, 0DDD5                 ;  乘以固定串“0DDD5”
      00563D5C  |.  05 8BD50000   |add     eax, 0D58B                      ;  加上固定串“0D58B”
      00563D61  |.  8945 F8       |mov     dword ptr [ebp-8], eax          ;  存入[ebp-8]
      00563D64  |.  43            |inc     ebx                             ;  计数器加1
      00563D65  |.  4E            |dec     esi
      00563D66  |.^ 75 CA         \jnz     short swdj_Unp.00563D32
      00563D68  |>  8D45 F4       lea     eax, dword ptr [ebp-C]           ;  机器码
      00563D6B  |.  8B17          mov     edx, dword ptr [edi]
      00563D6D  |.  E8 0E01EAFF   call    swdj_Unp.00403E80
      00563D72  |.  8BC7          mov     eax, edi
      00563D74  |.  E8 6F00EAFF   call    swdj_Unp.00403DE8
      00563D79  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
      00563D7C  |.  E8 E702EAFF   call    swdj_Unp.00404068
      00563D81  |.  8BF0          mov     esi, eax
      00563D83  |.  85F6          test    esi, esi
      00563D85  |.  7E 56         jle     short swdj_Unp.00563DDD
      00563D87  |.  BB 01000000   mov     ebx, 1
      00563D8C  |>  8B45 F4       /mov     eax, dword ptr [ebp-C]          ;  变形后的机器码地址
      00563D8F  |.  0FB64418 FF   |movzx   eax, byte ptr [eax+ebx-1]       ;  依次取变形后的机器码
      00563D94  |.  8945 FC       |mov     dword ptr [ebp-4], eax     存入[ebp-4]中
      00563D97  |.  FF37          |push    dword ptr [edi]
      00563D99  |.  8B45 FC       |mov     eax, dword ptr [ebp-4]
      00563D9C  |.  B9 1A000000   |mov     ecx, 1A                         ;  1A为固定值
      00563DA1  |.  99            |cdq                                     ;  符号扩展
      00563DA2  |.  F7F9          |idiv    ecx                             ;  带符号数除法
      00563DA4  |.  8BD0          |mov     edx, eax                        ;  商值赋给edx
      00563DA6  |.  80C2 41       |add     dl, 41                          ;  商转换为大写字母
      00563DA9  |.  8D45 F0       |lea     eax, dword ptr [ebp-10]
      00563DAC  |.  E8 DF01EAFF   |call    swdj_Unp.00403F90
      00563DB1  |.  FF75 F0       |push    dword ptr [ebp-10]
      00563DB4  |.  8B45 FC       |mov     eax, dword ptr [ebp-4]
      00563DB7  |.  B9 1A000000   |mov     ecx, 1A
      00563DBC  |.  99            |cdq
      00563DBD  |.  F7F9          |idiv    ecx                             ;  带符号数除法
      00563DBF  |.  80C2 41       |add     dl, 41                          ;  余数转换为大写字母
      00563DC2  |.  8D45 EC       |lea     eax, dword ptr [ebp-14]
      00563DC5  |.  E8 C601EAFF   |call    swdj_Unp.00403F90
      00563DCA  |.  FF75 EC       |push    dword ptr [ebp-14]
      00563DCD  |.  8BC7          |mov     eax, edi
      00563DCF  |.  BA 03000000   |mov     edx, 3
      00563DD4  |.  E8 4F03EAFF   |call    swdj_Unp.00404128
      00563DD9  |.  43            |inc     ebx
      00563DDA  |.  4E            |dec     esi
      00563DDB  |.^ 75 AF         \jnz     short swdj_Unp.00563D8C     循环操作
      00563DDD  |>  33C0          xor     eax, eax
      00563DDF  |.  5A            pop     edx
      00563DE0  |.  59            pop     ecx
      00563DE1  |.  59            pop     ecx
      00563DE2  |.  64:8910       mov     dword ptr fs:[eax], edx
      00563DE5  |.  68 FF3D5600   push    swdj_Unp.00563DFF
      00563DEA  |>  8D45 EC       lea     eax, dword ptr [ebp-14]
      00563DED  |.  BA 03000000   mov     edx, 3
      00563DF2  |.  E8 1500EAFF   call    swdj_Unp.00403E0C
      00563DF7  \.  C3            retn
      00563DF8   .- E9 67FAE9FF   jmp     swdj_Unp.00403864
      00563DFD   .^ EB EB         jmp     short swdj_Unp.00563DEA
      00563DFF   .  5F            pop     edi
      00563E00   .  5E            pop     esi
      00563E01   .  5B            pop     ebx
      00563E02   .  8BE5          mov     esp, ebp
      00563E04   .  5D            pop     ebp
      00563E05   .  C3            retn
      
      
    --------------------------------------------------------------------------------
    【经验总结】
    该软件的注册算法大致如下:
      1、将机器码依次与一数据进行异或
      2、将变形后的机器码依次与1A相除,分别取商和余数,并将两数化为大写字母
      3、将以上所得的字母相连即为注册码
      
      以上是菜鸟的分析,如果不对地方请大家多多指教!
      
    --------------------------------------------------------------------------------
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-3-21 17:56:41 | 显示全部楼层
    学习了/:12 /:12 /:12 /:12
    PYG19周年生日快乐!
  • TA的每日心情

    2021-9-20 23:20
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2007-3-21 22:34:22 | 显示全部楼层
    学习了/:02
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    6 天前
  • 签到天数: 114 天

    [LV.6]常住居民II

    发表于 2007-3-22 08:24:09 | 显示全部楼层
    学习加收藏了
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-8-31 14:43
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2007-3-22 09:26:46 | 显示全部楼层
    我等菜鸟学习的好材料。。。
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2019-3-25 06:30
  • 签到天数: 1096 天

    [LV.10]以坛为家III

    发表于 2007-3-22 09:30:14 | 显示全部楼层
    文章分析的不错,是很好的学习教程。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-4-17 07:08:04 | 显示全部楼层
    认真学习了!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-25 19:03:25 | 显示全部楼层
    学习中,算法还是不太懂
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-27 05:23:46 | 显示全部楼层
    什么时候我也可以分析个算法?/:002
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2008-9-23 08:19:18 | 显示全部楼层
    好好学习,不懂则要问,虽看看不懂,问的也太多了,先顶一个吧。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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