首页
社区
课程
招聘
[旧帖] [原创]S-demo2.0注册流程分析(easy) 0.00雪花
2008-4-22 20:20 3603

[旧帖] [原创]S-demo2.0注册流程分析(easy) 0.00雪花

2008-4-22 20:20
3603
【文章标题】: S-demo2.0注册流程分析
【文章作者】: noNaMe-mOnk
【软件名称】: S-demo2.0
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: c++
【使用工具】: od修改版
【操作平台】: xp
【软件介绍】: 经典的录像必备工具,不用多说了吧
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  at first,拿到手里的已经是破解版了,爆破的
  手发痒,呵呵,把爆破点修复
  用UltraEdit或winhex打开S-Recorder.exe,修改偏移量为0x7FD1处的代码75 1B为74 1B。
  双击运行,首先一个要求注册的对话框,说试用时间over了,
  输入注册名:noNaMe-mOnk
  注册码:9876543210
  点确定,Register Failure!
  peid无壳
  od载入
  搜索字符参考
  搜索Register Failure!下断
  再次注册断下在
  0040372D   . 8D8D 3C0F0000  LEA ECX,DWORD PTR SS:[EBP+F3C]
  00403733   . 8985 F00D0000  MOV DWORD PTR SS:[EBP+DF0],EAX
  00403739   . E8 52A80000    CALL S-Record.0040DF90
  0040373E   . 85C0           TEST EAX,EAX
  00403740   . 75 2B          JNZ SHORT S-Record.0040376D
  00403742   . 6A FF          PUSH -1                                  ; /status = FFFFFFFF (-1.)
  00403744   . FF15 E4934100  CALL DWORD PTR DS:[<&MSVCRT.exit>]       ; \exit
  0040374A   > 6A 00          PUSH 0
  0040374C   . 68 9CD24100    PUSH S-Record.0041D29C                   ;  ASCII "Register Failure!"*****这里
  00403751   . 8BCD           MOV ECX,EBP
  
  向上看:
  00403664   . 8BC8           MOV ECX,EAX
  00403666   . 83E1 03        AND ECX,3
  00403669   . F3:A4          REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
  0040366B   . 8D8C24 0401000>LEA ECX,DWORD PTR SS:[ESP+104]
  00403672   . 51             PUSH ECX                                 ; /Arg2
  00403673   . 52             PUSH EDX                                 ; |Arg1
  00403674   . B9 C0E74200    MOV ECX,S-Record.0042E7C0                ; |
  00403679   . E8 D24C0000    CALL S-Record.00408350                   ; \S-Record.00408350*****关键call,跟进
  0040367E   . 85C0           TEST EAX,EAX
  00403680   . 6A 00          PUSH 0
  00403682   . 0F84 C2000000  JE S-Record.0040374A
  00403688   . 8D8C24 A800000>LEA ECX,DWORD PTR SS:[ESP+A8]
  0040368F   . E8 1C520000    CALL S-Record.004088B0
  
  00408350  /$ 81EC 34010000  SUB ESP,134
  00408356  |. 53             PUSH EBX
  00408357  |. 55             PUSH EBP
  00408358  |. 56             PUSH ESI
  00408359  |. 8BF1           MOV ESI,ECX
  0040835B  |. 57             PUSH EDI
  0040835C  |. 897424 10      MOV DWORD PTR SS:[ESP+10],ESI
  00408360  |. E8 A9960000    CALL <JMP.&MFC42.#1168>
  00408365  |. 8B8C24 4801000>MOV ECX,DWORD PTR SS:[ESP+148]
  0040836C  |. 8B40 04        MOV EAX,DWORD PTR DS:[EAX+4]
  0040836F  |. 8B2D C0934100  MOV EBP,DWORD PTR DS:[<&MSVCRT.sprintf>] ;  msvcrt.sprintf
  00408375  |. 81C6 D4000000  ADD ESI,0D4
  0040837B  |. 56             PUSH ESI                                 ; /<%s>
  0040837C  |. 51             PUSH ECX                                 ; |<%s>
  0040837D  |. 8D9424 8400000>LEA EDX,DWORD PTR SS:[ESP+84]            ; |
  00408384  |. 68 C0D44100    PUSH S-Record.0041D4C0                   ; |format = "%s%s"
  00408389  |. 52             PUSH EDX                                 ; |s
  0040838A  |. 894424 24      MOV DWORD PTR SS:[ESP+24],EAX            ; |
  0040838E  |. FFD5           CALL EBP                                 ; \连接name和机器码
  00408390  |. 8B9C24 5C01000>MOV EBX,DWORD PTR SS:[ESP+15C]
  00408397  |. 83C9 FF        OR ECX,FFFFFFFF
  0040839A  |. 8BFB           MOV EDI,EBX
  0040839C  |. 33C0           XOR EAX,EAX
  0040839E  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
  004083A0  |. F7D1           NOT ECX                                  ;  注册码+1
  004083A2  |. 2BF9           SUB EDI,ECX                              ;  edi指向注册码
  004083A4  |. 8D5424 28      LEA EDX,DWORD PTR SS:[ESP+28]            ;  空指针
  004083A8  |. 8BC1           MOV EAX,ECX                              ;  注册码+1到eax
  004083AA  |. 8BF7           MOV ESI,EDI                              ;  esi指向注册码
  004083AC  |. 8BFA           MOV EDI,EDX                              ;  edi指向空指针
  004083AE  |. C1E9 02        SHR ECX,2                                ;  ecx右移两位:d到3
  004083B1  |. F3:A5          REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>;  移动注册码到esp+28
  004083B3  |. 8BC8           MOV ECX,EAX                              ;  注册码+1到eax
  004083B5  |. 83E1 03        AND ECX,3                                ;  
  004083B8  |. F3:A4          REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
  004083BA  |. 8D8C24 8C00000>LEA ECX,DWORD PTR SS:[ESP+8C]
  004083C1  |. 51             PUSH ECX
  004083C2  |. 53             PUSH EBX
  004083C3  |. E8 48FCFFFF    CALL S-Record.00408010                     这里跟进
  004083C8  |. 83C4 18        ADD ESP,18
  004083CB  |. BF D0D14100    MOV EDI,S-Record.0041D1D0                ;  ASCII "Clayman"  这个很有意思,呵呵
  004083D0  |. 8BF3           MOV ESI,EBX
  004083D2  |> 8A16           /MOV DL,BYTE PTR DS:[ESI]
  004083D4  |. 8A0F           |MOV CL,BYTE PTR DS:[EDI]
  004083D6  |. 8AC2           |MOV AL,DL
  004083D8  |. 3AD1           |CMP DL,CL
  004083DA  |. 75 1E          |JNZ SHORT S-Record.004083FA
  004083DC  |. 84C0           |TEST AL,AL
  004083DE  |. 74 16          |JE SHORT S-Record.004083F6
  004083E0  |. 8A4E 01        |MOV CL,BYTE PTR DS:[ESI+1]
  004083E3  |. 8A57 01        |MOV DL,BYTE PTR DS:[EDI+1]
  004083E6  |. 8AC1           |MOV AL,CL
  004083E8  |. 3ACA           |CMP CL,DL
  004083EA  |. 75 0E          |JNZ SHORT S-Record.004083FA
  004083EC  |. 83C6 02        |ADD ESI,2
  004083EF  |. 83C7 02        |ADD EDI,2
  004083F2  |. 84C0           |TEST AL,AL
  004083F4  |.^75 DC          \JNZ SHORT S-Record.004083D2
  004083F6  |> 33C0           XOR EAX,EAX
  004083F8  |. EB 05          JMP SHORT S-Record.004083FF
  004083FA  |> 1BC0           SBB EAX,EAX
  004083FC  |. 83D8 FF        SBB EAX,-1
  004083FF  |> 85C0           TEST EAX,EAX
  00408401  |. 74 74          JE SHORT S-Record.00408477
  00408403  |. 8B9424 4801000>MOV EDX,DWORD PTR SS:[ESP+148]
  0040840A  |. 68 08D54100    PUSH S-Record.0041D508                   ;  ASCII "29843710000"
  0040840F  |. 52             PUSH EDX
  00408410  |. 8D8424 8400000>LEA EAX,DWORD PTR SS:[ESP+84]
  00408417  |. 68 C0D44100    PUSH S-Record.0041D4C0                   ;  ASCII "%s%s"
  0040841C  |. 50             PUSH EAX
  0040841D  |. FFD5           CALL EBP
  0040841F  |. 8D8C24 8C00000>LEA ECX,DWORD PTR SS:[ESP+8C]
  
  ************************************************************
  004083C3  |. E8 48FCFFFF    CALL S-Record.00408010   
  
  00408041  |. 83E1 03        AND ECX,3
  00408044  |. F3:A4          REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[>
  00408046  |. 8D7C24 14      LEA EDI,DWORD PTR SS:[ESP+14]
  0040804A  |. 83C9 FF        OR ECX,FFFFFFFF
  0040804D  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
  0040804F  |. F7D1           NOT ECX
  00408051  |. 49             DEC ECX                                  ;  注册码数
  00408052  |. 8BF1           MOV ESI,ECX
  00408054  |. 8A4C24 14      MOV CL,BYTE PTR SS:[ESP+14]              ;  第一位到cl
  00408058  |. 897424 10      MOV DWORD PTR SS:[ESP+10],ESI            ;  保存注册码位数
  0040805C  |> 3888 28D54100  /CMP BYTE PTR DS:[EAX+41D528],CL         ;  查表找第一位在表中的位置,注意这里的查表
  00408062  |. 74 33          |JE SHORT S-Record.00408097              ;  eax中保存第一位注册码在表中位置,第一位选F,跳
  00408064  |. 40             |INC EAX
  00408065  |. 83F8 10        |CMP EAX,10
  00408068  |.^7C F2          \JL SHORT S-Record.0040805C
  0040806A  |> BF 68D54100    MOV EDI,S-Record.0041D568                ;  ASCII "!@#@#SDFG^*&"
  0040806F  |. 83C9 FF        OR ECX,FFFFFFFF
  00408072  |. 33C0           XOR EAX,EAX
  00408074  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
  00408076  |. F7D1           NOT ECX
  00408078  |. 2BF9           SUB EDI,ECX
  0040807A  |. 8BC1           MOV EAX,ECX
  0040807C  |. 8BF7           MOV ESI,EDI
  
  
  0041D528  46 5A 52 48 4B 30 31 57  FZRHK01W    这里就是字母表  按顺序记为:0~f
  0041D530  47 54 50 51 53 41 56 43  GTPQSAVC
  
  我的试验码首位选的是F
  
  跳到这里:
  00408097  |> 83F8 10        CMP EAX,10
  0040809A  |.^7D CE          JGE SHORT S-Record.0040806A
  0040809C  |. 8B9C24 E400000>MOV EBX,DWORD PTR SS:[ESP+E4]            ;  用户名+机器码到ebx
  004080A3  |. BD 0F000000    MOV EBP,0F
  004080A8  |. 2BE8           SUB EBP,EAX                              ;  15-位置数,注意:ebp最后用到
  004080AA  |. 8BFB           MOV EDI,EBX
  004080AC  |. 83C9 FF        OR ECX,FFFFFFFF                          ;  ecx=-1
  004080AF  |. 33C0           XOR EAX,EAX
  004080B1  |. F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
  004080B3  |. F7D1           NOT ECX
  004080B5  |. 49             DEC ECX                                  ;  用户名+机器码位数
  004080B6  |. 33D2           XOR EDX,EDX
  004080B8  |. 8BC1           MOV EAX,ECX
  004080BA  |. B9 07000000    MOV ECX,7
  004080BF  |. F7F1           DIV ECX                                  ;  用户名+机器码数除7
  004080C1  |. 8BCA           MOV ECX,EDX
  004080C3  |. 85C9           TEST ECX,ECX
  004080C5  |. 75 2B          JNZ SHORT S-Record.004080F2              ;  余数不为0,则跳
  
  跳到这里:
  004080F2  |> 8BC5           MOV EAX,EBP
  004080F4  |. 99             CDQ
  004080F5  |. F7F9           IDIV ECX
  004080F7  |. 0FBE041A       MOVSX EAX,BYTE PTR DS:[EDX+EBX]          ;  用户名第一位
  004080FB  |. 25 0F000080    AND EAX,8000000F                         ;  第一位 and 8000000f
  00408100  |. 79 05          JNS SHORT S-Record.00408107
  00408102  |. 48             DEC EAX
  00408103  |. 83C8 F0        OR EAX,FFFFFFF0
  00408106  |. 40             INC EAX
  00408107  |> 8A88 28D54100  MOV CL,BYTE PTR DS:[EAX+41D528]          ;  根据结果查表,
  0040810D  |. 8A4424 15      MOV AL,BYTE PTR SS:[ESP+15]              ;  注册码第二位,结果为V
  00408111  |. 3AC8           CMP CL,AL
  00408113  |. 74 0A          JE SHORT S-Record.0040811F                 
  00408115  |. BF 5CD54100    MOV EDI,S-Record.0041D55C                ;  ASCII "99#SDFG^*&"
  0040811A  |. E9 C5000000    JMP S-Record.004081E4
  0040811F  |> 8D46 FD        LEA EAX,DWORD PTR DS:[ESI-3]             ;  注册码数-3到eax
  00408122  |. 33FF           XOR EDI,EDI
  00408124  |. 99             CDQ
  00408125  |. 2BC2           SUB EAX,EDX
  00408127  |. D1F8           SAR EAX,1                                ;  sar?右移一位(除2)
  00408129  |. 85C0           TEST EAX,EAX
  0040812B  |. 0F8E 8F000000  JLE S-Record.004081C0
  00408131  |. 8D7424 16      LEA ESI,DWORD PTR SS:[ESP+16]            ;  取注册码第三位开始的地址
  00408135  |> 8A56 01        /MOV DL,BYTE PTR DS:[ESI+1]              ;  取第4位 6 8
  00408138  |. 33C9           |XOR ECX,ECX
  0040813A  |> 3891 28D54100  |/CMP BYTE PTR DS:[ECX+41D528],DL        ;  查表
  00408140  |. 74 1C          ||JE SHORT S-Record.0040815E
  00408142  |. 41             ||INC ECX
  00408143  |. 83F9 10        ||CMP ECX,10
  00408146  |.^7C F2          |\JL SHORT S-Record.0040813A
  00408148  |> 32D2           |XOR DL,DL
  0040814A  |> 8A1E           |MOV BL,BYTE PTR DS:[ESI]                ;  取第3位 5 7
  0040814C  |. 33C9           |XOR ECX,ECX
  0040814E  |> 3899 28D54100  |/CMP BYTE PTR DS:[ECX+41D528],BL        ;  查表
  00408154  |. 74 26          ||JE SHORT S-Record.0040817C
  00408156  |. 41             ||INC ECX
  00408157  |. 83F9 10        ||CMP ECX,10
  0040815A  |.^7C F2          |\JL SHORT S-Record.0040814E
  0040815C  |. EB 3A          |JMP SHORT S-Record.00408198
  0040815E  |> 83F9 10        |CMP ECX,10                                 根据第4 6 8 。。。位注册码的查表位置
  00408161  |.^7D E5          |JGE SHORT S-Record.00408148                计算转换后字母ASCII码低位
  00408163  |. 2BCD           |SUB ECX,EBP                             ;  ebp=f 13 19 1f 26 2c 32 38
  00408165  |. 81C1 803E0000  |ADD ECX,3E80                              
  0040816B  |. 8BD1           |MOV EDX,ECX
  0040816D  |. 81E2 0F000080  |AND EDX,8000000F                          跟踪几遍后发现注册码经过这里的转换与跟进前看见的
  00408173  |.^79 D5          |JNS SHORT S-Record.0040814A               ASCII "Clayman" 比较,也就是注册码转换后为Clayman
                                                                         此处edx中计算字母的,注册码至少要有17位
  00408175  |. 4A             |DEC EDX
  00408176  |. 83CA F0        |OR EDX,FFFFFFF0
  00408179  |. 42             |INC EDX
  0040817A  |.^EB CE          |JMP SHORT S-Record.0040814A
  0040817C  |> 83F9 10        |CMP ECX,10                                根据第3 5 7 。。。位注册码的查表位置
  0040817F  |. 7D 17          |JGE SHORT S-Record.00408198                计算转换后字母ASCII码高位
  00408181  |. 2BCD           |SUB ECX,EBP
  00408183  |. 81C1 803E0000  |ADD ECX,3E80
  00408189  |. 81E1 0F000080  |AND ECX,8000000F
  0040818F  |. 79 09          |JNS SHORT S-Record.0040819A               
  00408191  |. 49             |DEC ECX
  00408192  |. 83C9 F0        |OR ECX,FFFFFFF0
  00408195  |. 41             |INC ECX
  00408196  |. EB 02          |JMP SHORT S-Record.0040819A
  00408198  |> 32C9           |XOR CL,CL
  0040819A  |> 8AD9           |MOV BL,CL
  0040819C  |. 83C6 02        |ADD ESI,2                               ;  指针+2
  0040819F  |. C0E3 04        |SHL BL,4
  004081A2  |. 02DA           |ADD BL,DL                               ;  bl+dl=Ascii
  004081A4  |. 8B9424 E000000>|MOV EDX,DWORD PTR SS:[ESP+E0]           ;  取注册码
  004081AB  |. 0FBEC9         |MOVSX ECX,CL
  004081AE  |. 881C17         |MOV BYTE PTR DS:[EDI+EDX],BL            ;  保存结果,应为:Clayman(43 6C 61 79 6d 61 6e)
  004081B1  |. 03E9           |ADD EBP,ECX                             ;  ebp+前一个字母的高位,4 6 6 7 6 6 6
  004081B3  |. 47             |INC EDI
  004081B4  |. 3BF8           |CMP EDI,EAX                                与eax比较
  004081B6  |.^0F8C 79FFFFFF  \JL S-Record.00408135
  004081BC  |. 8B7424 10      MOV ESI,DWORD PTR SS:[ESP+10]
  004081C0  |> 8D542E FD      LEA EDX,DWORD PTR DS:[ESI+EBP-3]            取最后一位注册码
  004081C4  |. 81E2 0F000080  AND EDX,8000000F
  004081CA  |. 79 05          JNS SHORT S-Record.004081D1
  004081CC  |. 4A             DEC EDX
  004081CD  |. 83CA F0        OR EDX,FFFFFFF0
  004081D0  |. 42             INC EDX
  004081D1  |> 8A4C34 13      MOV CL,BYTE PTR SS:[ESP+ESI+13]             计算结果
  004081D5  |. 8A9A 28D54100  MOV BL,BYTE PTR DS:[EDX+41D528]             查表,为1
  004081DB  |. 3ACB           CMP CL,BL
  004081DD  |. 74 32          JE SHORT S-Record.00408211
  
  
  基本搞定了,总结一下:
  首先,注册码必须为字母表中的字母组成
  查表计算第一位的位置,与ebp相减作为后续转换的因子
  注册名第一位与8000000f and 后查表得第二位
  第三位到第十六位每两位组合计算出一个ascii值,结果应为43 6C 61 79 6d 61 6e,
  ebp=f 13 19 1f 26 2c 32 38
  每一位的计算过程:位置-ebp 后+ 3e80 and 8000000f,此处只要相减后低位为对应的正确结果就可以了,因为相当于 xxxx and 000f,只    有低位不变。
  每转换一个字母后转换因子与ascii高位相加计算下一个ascii值
  最后一位注册码与8000000f and 后查表应与注册码本身相同。
  
  用户名:noNaMe-mOnk   注册码:FVHRTCCP1GSHRAGF1         
  
--------------------------------------------------------------------------------
【经验总结】
  呵呵,很久没动刀了,只是工作忙,静不下心来,今天下雨,闲来无事,让大虾们见笑了。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年04月21日 23:39:02

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

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 2576
活跃值: (447)
能力值: ( LV2,RANK:85 )
在线值:
发帖
回帖
粉丝
wyfe 2008-4-22 22:29
2
0
精彩!
现在国产软件好像不设精华了
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
小子贼野 10 2008-4-22 23:29
3
0
不错,不错,学习了
游客
登录 | 注册 方可回帖
返回