- UID
- 16062
注册时间2006-6-19
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
【文章标题】: 一种比较麻烦的注册方式
【文章作者】: 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 |
|