【文章标题】: 重启验证算法分析之我的第一篇破文
【文章作者】: 河边渔者
【作者邮箱】: JWCHLJ.8256@163.COM
【软件名称】: 超级通讯录1.2
【软件大小】: 946KB
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12
【保护方式】: 注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: Peid OllDbg
【操作平台】: WinXP
【软件介绍】: ……功能强大的地址本通讯录软件……
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一、写得比较啰唆(主要是自己整理整理思路,总结一下),算法又简单,高手飞过
二、试运行,是注册码保护的,随便输入,出现“谢谢您的注册,下次启动生效”字样,再看安装的文件夹内有个pim.ini
文件,打开瞧瞧,发现最下面有这个[ECC] REGSN= REGUSER=,综合来看是典型的重启文件验证
看帮助文件说“未注册的用户,会弹出注册提示框.”正确注册后,帮助菜单中的“注册”就没有了
(未深入实验,不知没注册时有没有功能方面的限制,且不管它了)
三、Peid查是ASPack 2.12,用aspack脱壳器(坛子里有)完美秒脱(看别人说秒脱,咱也说秒脱,可能是脱得快的意思。
喂……看哪儿,说的就是你,干嘛这么快脱衣服,小心冻着),后来用OD插件OllDump也很容易地就脱光了,大约有3.51M
再用Peid查是Borland Delphi 6.0 - 7.0
四、OD载入,先超级字符串查找,有用内容如下:
00644A8E MOV EDX,_UnPacke.00645040 pim.ini ;第一次出现
00644AB0 MOV ECX,_UnPacke.00644CD0 address
00644AB5 MOV EDX,_UnPacke.00645050 pim
00644AD7 MOV EDX,_UnPacke.0064505C ^
00644B20 MOV EDX,_UnPacke.00645068 ~
006450F1 MOV EDX,_UnPacke.00645130 100
00645582 MOV EDX,_UnPacke.0064587C 性别
0064558E MOV EDX,_UnPacke.0064587C 性别
……
0064583B MOV EDX,_UnPacke.00645920 150
0064585C MOV EDX,_UnPacke.00645994 msn
00645B4C MOV EDX,_UnPacke.00645E50 pim.ini
00645BA9 PUSH _UnPacke.00645E60 ~
00645BE1 PUSH _UnPacke.00645E60 ~
00645C1C PUSH _UnPacke.00645E60 ~
00645C49 MOV EDX,_UnPacke.00645E6C ^
00645C7D MOV ECX,_UnPacke.00645E78 address
00645C82 MOV EDX,_UnPacke.00645E88 pim
00645CFA MOV ECX,_UnPacke.00645E94 fontcolor
00645CFF MOV EDX,_UnPacke.00645E88 pim
00645D14 MOV ECX,_UnPacke.00645EA8 fontsize
00645D19 MOV EDX,_UnPacke.00645E88 pim
00645D2E MOV ECX,_UnPacke.00645EBC fontname
00645D33 MOV EDX,_UnPacke.00645E88 pim
00645D48 MOV ECX,_UnPacke.00645ED0 fontcharset
00645D4D MOV EDX,_UnPacke.00645E88 pim
00645D8F MOV ECX,_UnPacke.00645EE4 contact_treecolor
00645D94 MOV EDX,_UnPacke.00645E88 pim
00645DD6 MOV ECX,_UnPacke.00645F00 contact_gridcolor
00645DDB MOV EDX,_UnPacke.00645E88 pim
00645F79 PUSH _UnPacke.00645FEC
……
0064E512 PUSH _UnPacke.0064E59C gif image
0064E555 MOV EDX,_UnPacke.0064E5B0 gif
0064E863 MOV EDX,_UnPacke.0064E8F4 超级通讯录(正式版) ver
0064E888 MOV EDX,_UnPacke.0064E914 超级通讯录(试用版) ver
0064E932 PUSH _UnPacke.0064E950 http://www.dailypim.com
0064E937 PUSH _UnPacke.0064E968 open
0064E976 PUSH _UnPacke.0064E994 mailto:dailypim@hotmail.com
0064E97B PUSH _UnPacke.0064E9B0 open
0064EC94 MOV EAX,_UnPacke.0064ECFC 请输入注册码!
0064ECBB MOV EAX,_UnPacke.0064ED14 谢谢您的注册,下次启动生效!
0064ED42 PUSH _UnPacke.0064ED60 http://www.softreg.com.cn/shareware_view.asp?id=/53e6f19c-a129-4aee-a9b1-f157f0b7f9d3/
……
00650E7C MOV EDX,_UnPacke.00651570 超级通讯录
00650EE5 MOV ECX,_UnPacke.00651584 pim.ini ;关键位置,断点
00650F06 MOV ECX,_UnPacke.00651584 pim.ini
00650F3A MOV EAX,_UnPacke.00651594 yyyymmdd
00650F47 PUSH _UnPacke.006515A8 .ctt
00650F66 MOV ECX,_UnPacke.00651584 pim.ini
00650F81 PUSH _UnPacke.006515B8 data.ctt
00650F8A MOV ECX,_UnPacke.006515CC file
00650F8F MOV EDX,_UnPacke.006515DC pim
00650FA9 MOV ECX,_UnPacke.006515E8 sts
00650FAE MOV EDX,_UnPacke.006515F4 contact
00650FBF MOV ECX,_UnPacke.00651604 left
00650FC4 MOV EDX,_UnPacke.006515F4 contact
00650FD5 MOV ECX,_UnPacke.00651614 top
00650FDA MOV EDX,_UnPacke.006515F4 contact
00650FEE MOV ECX,_UnPacke.00651620 height
00650FF3 MOV EDX,_UnPacke.006515F4 contact
00651007 MOV ECX,_UnPacke.00651630 width
0065100C MOV EDX,_UnPacke.006515F4 contact
00651020 MOV ECX,_UnPacke.00651640 leftbar_width
00651025 MOV EDX,_UnPacke.006515F4 contact
00651054 PUSH _UnPacke.00651658 宋体
0065105D MOV ECX,_UnPacke.00651668 fontname
00651062 MOV EDX,_UnPacke.006515DC pim
0065107C MOV ECX,_UnPacke.0065167C fontcolor
00651081 MOV EDX,_UnPacke.006515DC pim
00651097 MOV ECX,_UnPacke.00651690 fontsize
0065109C MOV EDX,_UnPacke.006515DC pim
006510B5 MOV ECX,_UnPacke.006516A4 fontcharset
006510BA MOV EDX,_UnPacke.006515DC pim
006510D3 MOV ECX,_UnPacke.006516B8 contact_treecolor
006510D8 MOV EDX,_UnPacke.006515DC pim
006510F1 MOV ECX,_UnPacke.006516D4 contact_gridcolor
006510F6 MOV EDX,_UnPacke.006515DC pim
00651128 MOV ECX,_UnPacke.006516F0 regsn
0065112D MOV EDX,_UnPacke.00651700 ecc
0065114B MOV ECX,_UnPacke.0065170C reguser
00651150 MOV EDX,_UnPacke.00651700 ecc
006511BB MOV ECX,_UnPacke.006515B8 data.ctt
……
006527FE PUSH _UnPacke.0065289C open
00652915 MOV EDX,_UnPacke.00652974 xm
00652A6F MOV EDX,_UnPacke.00652C88 pim.ini
00652A91 MOV ECX,_UnPacke.00652C98 address
00652A96 MOV EDX,_UnPacke.00652CA8 pim
00652AF5 MOV EDX,_UnPacke.00652CB4 ^
00652B3E MOV EDX,_UnPacke.00652CC0 ~
00652BEB PUSH _UnPacke.00652CCC
00652BF0 PUSH _UnPacke.00652CC0 ~
00652D39 MOV EAX,_UnPacke.00652DF8 ~
00652E4F MOV ECX,_UnPacke.00652F70 pim.ini
00652E75 MOV ECX,_UnPacke.00652F80 sts
00652E7A MOV EDX,_UnPacke.00652F8C contact
00652E8A MOV ECX,_UnPacke.00652F80 sts
00652E8F MOV EDX,_UnPacke.00652F8C contact
00652E9F MOV ECX,_UnPacke.00652F9C left
00652EA4 MOV EDX,_UnPacke.00652F8C contact
00652EB4 MOV ECX,_UnPacke.00652FAC top
00652EB9 MOV EDX,_UnPacke.00652F8C contact
00652EC9 MOV ECX,_UnPacke.00652FB8 height
00652ECE MOV EDX,_UnPacke.00652F8C contact
00652EDE MOV ECX,_UnPacke.00652FC8 width
00652EE3 MOV EDX,_UnPacke.00652F8C contact
00652EF9 MOV ECX,_UnPacke.00652FD8 leftbar_width
00652EFE MOV EDX,_UnPacke.00652F8C contact
00652F12 MOV ECX,_UnPacke.00652FF0 regsn
00652F17 MOV EDX,_UnPacke.00653000 ecc
00652F2B MOV ECX,_UnPacke.0065300C reguser
00652F30 MOV EDX,_UnPacke.00653000 ecc
00653118 MOV ECX,_UnPacke.00653198 操作手册.chm
0065313F MOV ECX,_UnPacke.00653198 操作手册.chm
其中很多行的pim.ini是读取该文件初始设置的,在00650EE5上双击,来到
00650EE5 |. B9 84156500 MOV ECX,_UnPacke.00651584 ; pim.ini 在这儿下断点
00650EEA |. E8 453CDBFF CALL _UnPacke.00404B34
00650EEF |. 8B45 D8 MOV EAX,DWORD PTR SS:[EBP-28]
00650EF2 |. E8 998BDBFF CALL _UnPacke.00409A90
00650EF7 |. 84C0 TEST AL,AL
00650EF9 |. 75 60 JNZ SHORT _UnPacke.00650F5B
00650EFB |. 8B15 00666600 MOV EDX,DWORD PTR DS:[666600] ; _UnPacke.00667F5C
00650F01 |. 8B12 MOV EDX,DWORD PTR DS:[EDX]
00650F03 |. 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
00650F06 |. B9 84156500 MOV ECX,_UnPacke.00651584 ; pim.ini
00650F0B |. E8 243CDBFF CALL _UnPacke.00404B34
00650F10 |. 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C]
00650F13 |. 8B83 24050000 MOV EAX,DWORD PTR DS:[EBX+524]
00650F19 |. 8B80 20020000 MOV EAX,DWORD PTR DS:[EAX+220]
00650F1F |. 8B08 MOV ECX,DWORD PTR DS:[EAX]
00650F21 |. FF51 74 CALL DWORD PTR DS:[ECX+74]
00650F24 |. A1 00666600 MOV EAX,DWORD PTR DS:[666600]
00650F29 |. FF30 PUSH DWORD PTR DS:[EAX]
00650F2B |. E8 50AADBFF CALL _UnPacke.0040B980
00650F30 |. 83C4 F8 ADD ESP,-8 ; /
00650F33 |. DD1C24 FSTP QWORD PTR SS:[ESP] ; |Arg1 (8 字节)
00650F36 |. 9B WAIT ; |
00650F37 |. 8D55 D0 LEA EDX,DWORD PTR SS:[EBP-30] ; |
00650F3A |. B8 94156500 MOV EAX,_UnPacke.00651594 ; |yyyymmdd
00650F3F |. E8 7CB7DBFF CALL _UnPacke.0040C6C0 ; \_UnPacke.0040C6C0
从00650EE5上下断点试试(为什么在这儿试,因为其他的都试了不行),F9运行,成功断下,F8一路下行走过很多读取设置
的地方,最后到这儿
00651132 |. 8BC6 MOV EAX,ESI
00651134 |. 8B38 MOV EDI,DWORD PTR DS:[EAX]
00651136 |. FF17 CALL DWORD PTR DS:[EDI] ; 呼出假码
00651138 |. 8B55 C0 MOV EDX,DWORD PTR SS:[EBP-40]
0065113B |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
00651140 |. E8 2F37DBFF CALL _UnPacke.00404874
00651145 |. 6A 00 PUSH 0
00651147 |. 8D45 BC LEA EAX,DWORD PTR SS:[EBP-44]
……
00651351 |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
00651356 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00651358 |. E8 8B37DBFF CALL _UnPacke.00404AE8
0065135D |. 83F8 13 CMP EAX,13 ; 检验注册码是否为19位
00651360 |. 74 0E JE SHORT _UnPacke.00651370 ; 不是19位就跳
00651362 |. A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
00651367 |. 33D2 XOR EDX,EDX
00651369 |. 8910 MOV DWORD PTR DS:[EAX],EDX
0065136B |. E9 8A010000 JMP _UnPacke.006514FA ; 失败长跳
00651370 |> 8D45 AC LEA EAX,DWORD PTR SS:[EBP-54]
00651373 |. 50 PUSH EAX
00651374 |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
重新在0065135D处下断,输入19位假码giutowqurkajfashvsu,再F9
00651379 |. 8B00 MOV EAX,DWORD PTR DS:[EAX] ; 简单转换
0065137B |. B9 04000000 MOV ECX,4
00651380 |. BA 10000000 MOV EDX,10
00651385 |. E8 B639DBFF CALL _UnPacke.00404D40 ; 从第16位起取后4位假码
0065138A |. 8B45 AC MOV EAX,DWORD PTR SS:[EBP-54]
0065138D |. BA EC176500 MOV EDX,_UnPacke.006517EC ; d168
00651392 |. E8 9538DBFF CALL _UnPacke.00404C2C ; 后4位假码与d168比较
00651397 |. 74 0E JE SHORT _UnPacke.006513A7 ; 不等则跳向失败
00651399 |. A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
0065139E |. 33D2 XOR EDX,EDX ; 往下都差不多情况
006513A0 |. 8910 MOV DWORD PTR DS:[EAX],EDX
006513A2 |. E9 53010000 JMP _UnPacke.006514FA
006513A7 |> 8D45 A8 LEA EAX,DWORD PTR SS:[EBP-58]
006513AA |. 50 PUSH EAX
006513AB |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
006513B0 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
006513B2 |. B9 04000000 MOV ECX,4
006513B7 |. BA 06000000 MOV EDX,6
006513BC |. E8 7F39DBFF CALL _UnPacke.00404D40 ; 从第6位起取4位假码
006513C1 |. 8B45 A8 MOV EAX,DWORD PTR SS:[EBP-58]
006513C4 |. BA FC176500 MOV EDX,_UnPacke.006517FC ; b229
006513C9 |. E8 5E38DBFF CALL _UnPacke.00404C2C ; 与b229比较
006513CE |. 74 0E JE SHORT _UnPacke.006513DE
006513D0 |. A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
006513D5 |. 33D2 XOR EDX,EDX
006513D7 |. 8910 MOV DWORD PTR DS:[EAX],EDX
006513D9 |. E9 1C010000 JMP _UnPacke.006514FA
006513DE |> 8D45 A4 LEA EAX,DWORD PTR SS:[EBP-5C]
006513E1 |. 50 PUSH EAX
006513E2 |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
006513E7 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
006513E9 |. B9 04000000 MOV ECX,4
006513EE |. BA 01000000 MOV EDX,1
006513F3 |. E8 4839DBFF CALL _UnPacke.00404D40 ; 取前4位假码
006513F8 |. 8B45 A4 MOV EAX,DWORD PTR SS:[EBP-5C]
006513FB |. BA 0C186500 MOV EDX,_UnPacke.0065180C ; a333
00651400 |. E8 2738DBFF CALL _UnPacke.00404C2C ; 与a333比较
00651405 |. 74 0E JE SHORT _UnPacke.00651415
00651407 |. A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
0065140C |. 33D2 XOR EDX,EDX
0065140E |. 8910 MOV DWORD PTR DS:[EAX],EDX
00651410 |. E9 E5000000 JMP _UnPacke.006514FA
00651415 |> 8D45 A0 LEA EAX,DWORD PTR SS:[EBP-60]
00651418 |. 50 PUSH EAX
00651419 |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
0065141E |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00651420 |. B9 04000000 MOV ECX,4
00651425 |. BA 0B000000 MOV EDX,0B
0065142A |. E8 1139DBFF CALL _UnPacke.00404D40 ; 从第11位起取4位假码
0065142F |. 8B45 A0 MOV EAX,DWORD PTR SS:[EBP-60]
00651432 |. BA 1C186500 MOV EDX,_UnPacke.0065181C ; c230
00651437 |. E8 F037DBFF CALL _UnPacke.00404C2C ; 与c230比较
0065143C |. 74 0E JE SHORT _UnPacke.0065144C
0065143E |. A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
00651443 |. 33D2 XOR EDX,EDX
00651445 |. 8910 MOV DWORD PTR DS:[EAX],EDX
00651447 |. E9 AE000000 JMP _UnPacke.006514FA
0065144C |> 8D45 9C LEA EAX,DWORD PTR SS:[EBP-64]
0065144F |. 50 PUSH EAX
00651450 |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
00651455 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00651457 |. B9 01000000 MOV ECX,1
0065145C |. BA 05000000 MOV EDX,5
00651461 |. E8 DA38DBFF CALL _UnPacke.00404D40
00651466 |. 8B45 9C MOV EAX,DWORD PTR SS:[EBP-64]
00651469 |. BA 2C186500 MOV EDX,_UnPacke.0065182C ; -
0065146E |. E8 B937DBFF CALL _UnPacke.00404C2C ; 从第5位取1位与“-”比较
00651473 |. 74 0B JE SHORT _UnPacke.00651480
00651475 |. A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
0065147A |. 33D2 XOR EDX,EDX
0065147C |. 8910 MOV DWORD PTR DS:[EAX],EDX
0065147E |. EB 7A JMP SHORT _UnPacke.006514FA ; 若不是则继续跳向失败
00651480 |> 8D45 98 LEA EAX,DWORD PTR SS:[EBP-68]
00651483 |. 50 PUSH EAX
00651484 |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
00651489 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0065148B |. B9 01000000 MOV ECX,1
00651490 |. BA 0A000000 MOV EDX,0A
00651495 |. E8 A638DBFF CALL _UnPacke.00404D40
0065149A |. 8B45 98 MOV EAX,DWORD PTR SS:[EBP-68]
0065149D |. BA 2C186500 MOV EDX,_UnPacke.0065182C ; -
006514A2 |. E8 8537DBFF CALL _UnPacke.00404C2C ; 从第10位取1位与“-”比较
006514A7 |. 74 0B JE SHORT _UnPacke.006514B4
006514A9 |. A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
006514AE |. 33D2 XOR EDX,EDX
006514B0 |. 8910 MOV DWORD PTR DS:[EAX],EDX
006514B2 |. EB 46 JMP SHORT _UnPacke.006514FA
006514B4 |> 8D45 94 LEA EAX,DWORD PTR SS:[EBP-6C]
006514B7 |. 50 PUSH EAX
006514B8 |. A1 AC626600 MOV EAX,DWORD PTR DS:[6662AC]
006514BD |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
006514BF |. B9 01000000 MOV ECX,1
006514C4 |. BA 0F000000 MOV EDX,0F
006514C9 |. E8 7238DBFF CALL _UnPacke.00404D40
006514CE |. 8B45 94 MOV EAX,DWORD PTR SS:[EBP-6C]
006514D1 |. BA 2C186500 MOV EDX,_UnPacke.0065182C ; -
006514D6 |. E8 5137DBFF CALL _UnPacke.00404C2C ; 从第15位取1位与“-”比较
006514DB |. 74 0B JE SHORT _UnPacke.006514E8 ; 转向正式版,大功告成
006514DD |. A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
006514E2 |. 33D2 XOR EDX,EDX
006514E4 |. 8910 MOV DWORD PTR DS:[EAX],EDX
006514E6 |. EB 12 JMP SHORT _UnPacke.006514FA
006514E8 |> A1 AC636600 MOV EAX,DWORD PTR DS:[6663AC]
--------------------------------------------------------------------------------
【经验总结】
终于完成了,感觉就俩字,麻烦!拿到程序,一会儿就找到注册码了,但弄出这篇破文却用了两个晚上,由此不禁深深
为论坛上众多高手的高风亮节所折服,虽然他们的文章还有很多像我等的菜民看不明白的地方,但他们还是孜孜不倦而为之
地长篇大论,真正起到了引领和解惑的作用,功不可没,我对你们的敬仰犹如黄河之水……(此处省略2000字),咦?砖头 !我闪!
注册机还没考虑(太晚了),但早晚会做的!
这次是弄个中文的,毕竟中文咱熟,但愿没有拂了爱国者们的意愿,以后会慢慢转向E文的,最后干那又小又软的家伙……
旁边有人哼哼“为什么天上一片黑,因为牛在天上飞;为什么牛在天上飞,因为……”喂,说谁呢?你才从地上吹呢!
疑惑:注册后在pim.ini文件中还有个REGUSER=空着,看样子应该是注册名,难道是bug?
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年04月30日 22:21:31
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课