飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 8774|回复: 16

[原创] 一种比较麻烦的注册方式

[复制链接]

该用户从未签到

发表于 2006-7-13 19:29:44 | 显示全部楼层 |阅读模式
【文章标题】: 一种比较麻烦的注册方式
【文章作者】: jjdg
【软件名称】: 光影魔术手 V0.21 简体中文版
【软件大小】: 1650k
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【使用工具】: OD PEID ASPACKDIE
【操作平台】: XP
【软件介绍】: “nEO iMAGING”〖光影魔术手〗是一个对数码照片画
【作者声明】: 只是感兴趣,没有其他目的。水平有限,失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  这个软件的注册方式个人感觉比较麻烦,而且,它对注册名和注册码的处理没看懂,所以,基本上没有追到注册码,不过,发现在注册成功以后,程序会自动产生一个lic文件,
  用记事本打开,可以看见,里面的内容均为乱码,估计是程序对注册码做了处理以后保存在lic文件里面,在程序启动的时候检测其内容,如果正确就不出现“未注册”等
  提示,下面就开始生成lic的过程吧!
  
  安装后找到该程序,用Peid查看,ASPack 2.12 -> Alexey Solodovnikov,ok,用AspackDie1.41搞定它,脱壳完成。
  
  直接用OD1.10打开,cpu窗口右击,超级字符串参考-->ASCII,找到关键处,如下:
  0058D757  PUSH Unpacked.0058D934     错误:〖注册姓名〗\n
  0058D767  PUSH Unpacked.0058D95C     长度太短,无法注册!
  0058D7BD  PUSH Unpacked.0058D980     错误:〖注册码〗\n
  0058D7CD  PUSH Unpacked.0058D99C     长度不符,无法注册!
  0058D8B5  MOV EAX,Unpacked.0058D9BC  成功注册!感谢您的支持!
  0058D8CC  MOV EAX,Unpacked.0058D9E0  注册失败:注册码无效!
  
  好,依次看看:
  0058D750  |.  83F8 04       CMP EAX,4                     <--这里应该是对注册名的长度做个比较| 可见,只要输入的注册名多于4个字符即可!
  0058D753  |.  7D 3A         JGE SHORT Unpacked.0058D78F   <--大于等于就跳过下面这个错误对话框|
  0058D755  |.  6A 00         PUSH 0
  0058D757  |.  68 34D95800   PUSH Unpacked.0058D934                   ;  错误:〖注册姓名〗\n
  0058D75C  |.  FFB3 2C030000 PUSH DWORD PTR DS:[EBX+32C]
  0058D762  |.  68 50D95800   PUSH Unpacked.0058D950                   ;  \n
  0058D767  |.  68 5CD95800   PUSH Unpacked.0058D95C                   ;  长度太短,无法注册!
  0058D76C  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
  0058D76F  |.  BA 04000000   MOV EDX,4
  0058D774  |.  E8 8378E7FF   CALL Unpacked.00404FFC
  0058D779  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ; |
  0058D77C  |.  66:8B0D 74D95>MOV CX,WORD PTR DS:[58D974]              ; |
  0058D783  |.  B2 01         MOV DL,1                                 ; |
  0058D785  |.  E8 D292EAFF   CALL Unpacked.00436A5C                   ; \Unpacked.00436A5C
  0058D78A  |.  E9 47010000   JMP Unpacked.0058D8D6                       跳就挂
  
  
  然后来看下面
  0058D78F  |> \8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
  0058D792  |.  8B83 10030000 MOV EAX,DWORD PTR DS:[EBX+310]            
  0058D798  |.  E8 2386EEFF   CALL Unpacked.00475DC0
  0058D79D  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
  0058D7A0  |.  8D83 30030000 LEA EAX,DWORD PTR DS:[EBX+330]
  0058D7A6  |.  E8 2575E7FF   CALL Unpacked.00404CD0
  0058D7AB  |.  8B83 30030000 MOV EAX,DWORD PTR DS:[EBX+330]
  0058D7B1  |.  E8 8677E7FF   CALL Unpacked.00404F3C
  0058D7B6  |.  83F8 16       CMP EAX,16                                 |这里和上面一样也是做比较,应该是对注册码的长度做的,应该不小于22个字符
  0058D7B9      74 3A         JE SHORT Unpacked.0058D7F5                 |如果注册码长度正确就跳过下面的错误对话框!
  0058D7BB  |.  6A 00         PUSH 0
  0058D7BD  |.  68 80D95800   PUSH Unpacked.0058D980                   ;  错误:〖注册码〗\n
  0058D7C2  |.  FFB3 30030000 PUSH DWORD PTR DS:[EBX+330]
  0058D7C8  |.  68 50D95800   PUSH Unpacked.0058D950                   ;  \n
  0058D7CD  |.  68 9CD95800   PUSH Unpacked.0058D99C                   ;  长度不符,无法注册!
  0058D7D2  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
  0058D7D5  |.  BA 04000000   MOV EDX,4
  0058D7DA  |.  E8 1D78E7FF   CALL Unpacked.00404FFC
  0058D7DF  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]            ; |
  0058D7E2  |.  66:8B0D 74D95>MOV CX,WORD PTR DS:[58D974]              ; |
  0058D7E9  |.  B2 01         MOV DL,1                                 ; |
  0058D7EB  |.  E8 6C92EAFF   CALL Unpacked.00436A5C                   ; \Unpacked.00436A5C
  0058D7F0  |. /E9 E1000000   JMP Unpacked.0058D8D6                       跳就挂
  0058D7F5  |> |8BC3          MOV EAX,EBX                                 | 下断点!
  0058D7F7  |. |E8 FCFCFFFF   CALL Unpacked.0058D4F8                   ;  | 可见,这个call里面就是注册码的校验部分了!
  0058D7FC  |. |84C0          TEST AL,AL                                  | 实际上,对同一个AL做test到底什么意思,我也不是很明白,有知道的请赐教!
  0058D7FE     |0F84 BD000000 JE Unpacked.0058D8C1                     ;  | 跳到注册失败
  0058D804  |. |8BC3          MOV EAX,EBX
  0058D806  |. |E8 E9FBFFFF   CALL Unpacked.0058D3F4
  0058D80B  |. |33F6          XOR ESI,ESI
  0058D80D  |> |8D85 E4FEFFFF /LEA EAX,DWORD PTR SS:[EBP-11C]
  
  
  再看看后面的:
  0058D8A1  |.  B2 01         MOV DL,1
  0058D8A3  |.  8BC3          MOV EAX,EBX
  0058D8A5  |.  E8 3EF9FFFF   CALL Unpacked.0058D1E8
  0058D8AA  |.  6A 00         PUSH 0                                   ; /Arg1 = 00000000
  0058D8AC  |.  66:8B0D 74D95>MOV CX,WORD PTR DS:[58D974]              ; |
  0058D8B3  |.  B2 02         MOV DL,2                                 ; |
  0058D8B5  |.  B8 BCD95800   MOV EAX,Unpacked.0058D9BC                ; |成功注册!感谢您的支持!
  0058D8BA  |.  E8 9D91EAFF   CALL Unpacked.00436A5C                   ; \Unpacked.00436A5C    |这个call应该是调用一个对话框来显示上面的消息的,不用管!
  0058D8BF  |.  EB 15         JMP SHORT Unpacked.0058D8D6
  0058D8C1  |>  6A 00         PUSH 0                                   ; /Arg1 = 00000000  |注意啊:这个跳转来自 0058D7FE
  0058D8C3  |.  66:8B0D 74D95>MOV CX,WORD PTR DS:[58D974]              ; |
  0058D8CA  |.  B2 01         MOV DL,1                                 ; |
  0058D8CC  |.  B8 E0D95800   MOV EAX,Unpacked.0058D9E0                ; |注册失败:注册码无效!
  0058D8D1  |.  E8 8691EAFF   CALL Unpacked.00436A5C                   ; \Unpacked.00436A5C
  0058D8D6  |>  33C0          XOR EAX,EAX
  
  好了,代码就看到这里!开始f9了
  
  在注册处填入:jjdg  1234567891234567891234(凑够22位即可)
  
  先用f8走一下看看流程如何,
  程序停在   0058D7F5  |> \8BC3          MOV EAX,EBX
  按一下f8,寄存器和堆栈都没有什么变化,
  f8到
  0058D7FE     /0F84 BD000000 JE Unpacked.0058D8C1        ;
  的时候,堆栈显示:跳转已实现
  0058D8C1=Unpacked.0058D8C1,
  
  看来,前面那个call里面有名堂,进去看看,
  重来,
  f7跟进0058D7F7  |.  E8 FCFCFFFF   CALL Unpacked.0058D4F8       ;  
  
  f8来到0058D51A  |.  E8 1D7AE7FF   CALL Unpacked.00404F3C,可以看见,寄存器里面EAX 010164BC  ASCII"jjdg"哦
  这个call的作用是对EAX中注册姓名取长度,然后将长度值放到EAX里面,
  
  0058D51A  |.  E8 1D7AE7FF   CALL Unpacked.00404F3C                    |这个call的作用就是取字符串的长度
  0058D51F  |.  83F8 04       CMP EAX,4                                ;  比较注册姓名长度
  0058D522  |.  7C 10         JL SHORT Unpacked.0058D534                |如果不足4位就跳走挂掉
  0058D524  |.  8B83 30030000 MOV EAX,DWORD PTR DS:[EBX+330]           ;  把输入的注册码放到EAX里面
  0058D52A  |.  E8 0D7AE7FF   CALL Unpacked.00404F3C
  0058D52F  |.  83F8 16       CMP EAX,16                               ;  比较注册码长度
  0058D532  |.  74 07         JE SHORT Unpacked.0058D53B                |注册码长度正确就跳到验证处
  0058D534  |>  33C0          XOR EAX,EAX
  0058D536  |.  E9 A2000000   JMP Unpacked.0058D5DD                     |跳到挂掉处
  
  f8来到下面:
  0058D546  |.  8B83 2C030000 MOV EAX,DWORD PTR DS:[EBX+32C]           ;  
  发现,寄存器里面的EDX的值发生了变化,
  EDX 00FD4428 ASCII "55661-640-0059266-23171",这个是不是就是真正的注册码呢?带进程序试试,不是!我尝试了几个不同的用户名都跟到了这个值,估计有名堂在里面!
  继续往下,
  0058D54C  |.  E8 7B15F7FF   CALL Unpacked.004FEACC
  0058D551  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
  0058D554  |.  50            PUSH EAX
  0058D555  |.  8B83 30030000 MOV EAX,DWORD PTR DS:[EBX+330]
  0058D55B  |.  B9 04000000   MOV ECX,4
  0058D560  |.  BA 13000000   MOV EDX,13
  经过上面这段代码,jjdg变成了ooba
  
  一路f8来到,
  0058D7FE     /0F84 BD000000 JE Unpacked.0058D8C1                     ;  跳到失败
  改je为jne,
  然后,f8来到
  0058D8BA  |.  E8 9D91EAFF   CALL Unpacked.00436A5C                   ; \Unpacked.00436A5C
  程序弹出对话框,显示注册成功!
  打开C:\Program Files\nEO iMAGING,
  你会发现,多了一个名为Unpacked.lic的文件,用记事本打开查看,内容如下:
  [LIC]
  SN=ooba                                             | 这个就是jjdg经过处理后的注册名
  SC=47524;1<9<231<41>43123       | 这个就是正确的注册码处理后的样子,同样是22位哦!但是,直接用它注册还是不行哦!关于程序是如何处理的那段代码,不好意思,  看不懂,所以就不理它,只好改跳转了!
  
  可见,一旦注册成功,程序会生成一个和程序同名的lic文件。
  这样,把Unpacked.lic改名为nEOiMAGING.lic不就可以了吗?
  
  这个软件没有追出注册码,也没有看懂其对注册名和注册码的算法实在是遗憾!
  
  如果有高手可以看看给我这样的菜鸟讲讲的话就太好了!
  
  不过,菜鸟也可以都来试试!
  
                                                       2006年07月13日 18:27:14
PYG19周年生日快乐!

该用户从未签到

发表于 2006-7-13 21:14:02 | 显示全部楼层
分析得不错!
PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2016-1-14 00:02
  • 签到天数: 138 天

    [LV.7]常住居民III

    发表于 2006-7-13 22:18:05 | 显示全部楼层
    虽然提示注册成功.但还是没有注册成功!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-16 02:24:43 | 显示全部楼层
    给我的感觉好象有什么暗桩!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-18 02:24:12 | 显示全部楼层
    不错,学习了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-26 23:22:29 | 显示全部楼层
    8错
    8错
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-4-10 17:02
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2006-7-27 14:28:34 | 显示全部楼层
    其实是明码来的!!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-27 14:28:38 | 显示全部楼层
    TEST AL,AL   应该是标专位的比较
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-3 16:57:42 | 显示全部楼层
    这个软件玩过
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-4 12:26:23 | 显示全部楼层
    分析得不错!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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