本帖最后由 zaas 于 2010-2-22 19:49 编辑
【破文标题】用软件本身做注册机--图像缩放大师1.0破解笔记
【破文作者】zaas[PYG][FCT]
【破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【软件名称】图像缩放大师 1.0
【更新时间】2010-2-21
【软件类别】国产软件/图片压缩
【软件语言】简体中文
【应用平台】WinXP/2000/2003/Vista
【软件性质】共享(收费)软件
【软件大小】312KB
【原版下载】http://www.onlinedown.net/soft/99782.htm
【保护方式】注册码
【软件简介】图像缩放大师是一款专业的,支持批量修改图片大小软件,支持多种图片格式,如JPG, PNG, GIF, BMP, TIFF等;并且可以自由设置修改后的宽度、高度、是否保留纵横比等; 支持图片格式转换;操作简单,转换速度极快。
功能列表
1. 支持多种图片格式:JPG, PNG, GIF, BMP, TIFF
2. 不需要另外安装 .net 环境,支持在Win2000/XP/2003 下直接运行
3. 支持保留 EXIF 图像信息
4. 支持批量操作
5. 自定义文件输出尺寸大小:按比例、自定尺寸等等
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
**************************************************************
用PEiD查壳,Microsoft Visual C++ 7.0 [Debug]易的吧。。。
**************************************************************
输入错误的注册码,有字符串提示,直接找到关键call。
本来是打算研究下算法,看看能不能写注册机的,可没想到算法部分不难但是臭长,懒得分析了。本打算放弃的。转念一想,索性拿来练习下SMC。。。
输入序列号和假码,来到注册验证部分。00406594 . C68424 600300>mov byte ptr [esp+360], 1
0040659C . E8 86070200 call 00426D27 ; 序列号
004065A1 . 8D4C24 08 lea ecx, dword ptr [esp+8]
004065A5 . 51 push ecx
004065A6 . 8D8E C0000000 lea ecx, dword ptr [esi+C0]
004065AC . E8 76070200 call 00426D27 ; 假码
004065B1 . 8B4424 08 mov eax, dword ptr [esp+8]
004065B5 . 51 push ecx
004065B6 . 83C0 F0 add eax, -10
004065B9 . 896424 14 mov dword ptr [esp+14], esp
004065BD . 8BFC mov edi, esp
004065BF . 50 push eax
004065C0 . E8 9BB7FFFF call 00401D60
004065C5 . 83C0 10 add eax, 10
004065C8 . 8907 mov dword ptr [edi], eax
004065CA . 8B4424 14 mov eax, dword ptr [esp+14]
004065CE . 83C0 F0 add eax, -10
004065D1 . 896424 1C mov dword ptr [esp+1C], esp
004065D5 . 8BFC mov edi, esp
004065D7 . 50 push eax
004065D8 . C68424 680300>mov byte ptr [esp+368], 2
004065E0 . E8 7BB7FFFF call 00401D60
004065E5 . 83C0 10 add eax, 10
004065E8 . 83C4 04 add esp, 4
004065EB . 8BCE mov ecx, esi
004065ED . 8907 mov dword ptr [edi], eax
004065EF . C68424 640300>mov byte ptr [esp+364], 1
004065F7 . E8 44FDFFFF call 00406340 ; 关键call
004065FC . 85C0 test eax, eax
004065FE . 75 34 jnz short 00406634
00406600 . 6A 40 push 40
00406602 . 68 5C314300 push 0043315C ; errormessage!
00406607 . 68 40314300 push 00433140 ; invalIDAte license info!
跟进关键call,明白了注册码是根据序列号通过一系列附加字符串MD5得来的,可惜最后出现明码。具体过程不再多说。直接来到比较call附近:00406490 . FF52 04 call dword ptr [edx+4]
00406493 > 8B7424 28 mov esi, dword ptr [esp+28] ; 假码
00406497 . 8B4424 0C mov eax, dword ptr [esp+C] ; 真码
0040649B ? 56 push esi
0040649C 50 push eax
0040649D E8 39F40000 call 004158DB ; 比较call
软件在判断注册成功会会把注册码序列号写入注册表的software\flyingstudio\imageresizer:00406645 . 68 D0304300 push 004330D0 ; software\flyingstudio\imageresizer
0040664A . 68 01000080 push 80000001
0040664F . 8D8C24 380300>lea ecx, dword ptr [esp+338]
00406656 . C68424 680300>mov byte ptr [esp+368], 3
0040665E . E8 AD2B0000 call 00409210
00406663 . 8B4424 0C mov eax, dword ptr [esp+C]
00406667 . 50 push eax
00406668 . 68 C0304300 push 004330C0 ; license name
0040666D . 8D8C24 340300>lea ecx, dword ptr [esp+334]
00406674 . E8 C72A0000 call 00409140
00406679 . 8B4C24 08 mov ecx, dword ptr [esp+8]
0040667D . 51 push ecx
0040667E . 68 B0304300 push 004330B0 ; license code
00406683 . 8D8C24 340300>lea ecx, dword ptr [esp+334]
0040668A . E8 B12A0000 call 00409140
0040668F . 8D8C24 2C0300>lea ecx, dword ptr [esp+32C]
00406696 . E8 852A0000 call 00409120
0040669B . 6A 40 push 40
0040669D . 68 30314300 push 00433130 ; congratulation!
004066A2 . 68 F4304300 push 004330F4 ; registration success!\n\nthank you for register our software!
既然有明码,嘿嘿。。。让我们输入假码后把真码写入注册表吧~~~这样,下次不用破解版也可以直接使用了哈。。。再说这个软件这么小,完全可以当一个keygen来用了,hohohoho。。。
找到一段空白00431b00,让它在比较之前跳过来,用真码替换掉假码00406490 |. FF52 04 call dword ptr [edx+4]
00406493 |> 8B7424 28 mov esi, dword ptr [esp+28]
00406497 |. E9 64B60200 jmp 00431B00 ; 跳到我想去的地方
0040649C |. 50 push eax
0040649D |. E8 39F40000 call 004158DB
嘿,用一段简短的汇编代码。。。。替换吧~~00431B00 > \8B4424 0C mov eax, dword ptr [esp+C] ; 刚刚覆盖掉的地方
00431B04 . 50 push eax ; 保存现场
00431B05 . 56 push esi
00431B06 . 51 push ecx
00431B07 > 66:0FB608 movzx cx, byte ptr [eax] ; 取真码字符
00431B0B . 40 inc eax
00431B0C . 880E mov byte ptr [esi], cl ; 替换假码
00431B0E . 46 inc esi
00431B0F . 84C9 test cl, cl
00431B11 .^ 75 F4 jnz short 00431B07 ; 全部换完结束
00431B13 . 59 pop ecx
00431B14 . 5E pop esi
00431B15 . 58 pop eax ; 回复现场
00431B16 . 56 push esi ; 刚刚覆盖掉的地方
替换完了则是真码和真码比较,当然注册成功了~~~~
软件很乖的把真码写进注册表了,看看去吧
[HKEY_CURRENT_USER\Software\FlyingStudio\ImageResizer]
"License Name"="zaas[PYG][FCT]"
"License Code"="312D8294DA7055AD3D6D6879D3B6B9F4ADD084A2EED273B92E63EB8F20F67107768CAA1A73A529599E249821D5634D754C3C83F851E8C5182D4C7224"
删掉这些又可以用别的序列号注册了,就象注册机一样。。。
输入假码的时候需多输入点,否则会因为开辟的内存空间不足产生一些问题。。。
【破解总结】
破解极度简单,属于秒杀型。SMC一下练练手兼练习下汇编。。。
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
【后记】根据Tianxj大侠的提示,该软件的算法描述如下(VB): A = sha1(Text1.Text & "yafzVFCr4PxLI9MX8Hbv")
B = sha1(A & "XNtKZV5Tqci0WYO8dmS9")
Text2.Text = A & B & sha1(A & B & "MNJXx4ZYgGLtPmpS0k27")
|