黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 软件破解 >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[推荐]寻找程序中的软肋
      ★★★★

寻找程序中的软肋

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-8-3 8:54:59
首发于《黑客防线》杂志骗钱,高手略过。

    终于拿到了黑防的杂志,里面有一款“SQL格式化工具”,居然要花50RMB注册,虽然可以试用,但还是觉得很不爽,于是继续我的作风,支持盗版.

  先查壳,Borland Delphi 6.0 - 7.0 编写。建议初学的话用Dede3.5 分析Delphi 程序。先看程序,随便输入KEY,就会提示说“非法注册号”,一般我们根据他的错误提示,用OD就可以找到他的错误信息,在出错附近就可以找到他的关键跳,也就是常说的“暴点”.
0062AC30 |. E8 57C6FFFF   CALL sqlpp.0062728C
0062AC35 |. 84C0       TEST AL,AL             //比较
0062AC37 |. 74 0A       JE SHORT sqlpp.0062AC43
0062AC39 |. C783 4C020000>MOV DWORD PTR DS:[EBX+24C],1
0062AC43 |> 83BB 4C020000>CMP DWORD PTR DS:[EBX+24C],1
0062AC4A |. 75 17       JNZ SHORT sqlpp.0062AC63   //关键跳
0062AC4C |. 6A 00       PUSH 0         ; /Arg1 = 00000000
0062AC4E |. 66:8B0D C0AC6>MOV CX,WORD PTR DS:[62ACC0]         ; |
0062AC55 |. B2 02       MOV DL,2                       ; |
0062AC57 |. B8 CCAC6200   MOV EAX,sqlpp.0062ACCC     ; |感谢您的注册!
0062AC5C |. E8 27C6E0FF   CALL sqlpp.00437288   ; \sqlpp.00437288
0062AC61 |. EB 15       JMP SHORT sqlpp.0062AC78
0062AC63 |> 6A 00       PUSH 0         ; /Arg1 = 00000000
0062AC65 |. 66:8B0D C0AC6>MOV CX,WORD PTR DS:[62ACC0]         ; |
0062AC6C |. 33D2       XOR EDX,EDX                     ; |
0062AC6E |. B8 E4AC6200   MOV EAX,sqlpp.0062ACE4     ; |非法注册号!
0062AC73 |. E8 10C6E0FF   CALL sqlpp.00437288               ; \sqlpp.00437288

我们可以看到在0062AC4A 处的地方JNZ SHORT sqlpp.0062AC63 如果不相等就跳到0062AC63 提示“非法注册号”,有一点破解经验的朋友应该可以想到,改JNZ 为 JZ 就可以了。

虽然是弹出了注册成功的窗口,但是你也别高兴的太早.程序还是和适用版一样.也就是说,我们破解是很失败的.因为这个程序判断是否注册至少有三到四个地方判断,甚至更多.

1 程序刚启动的时候
2 点注册的时候
3 使用非注册功能的时候
4.暗桩

虽然你可以一个一个的找到,然后都给暴破,但是,这样很麻烦,也很难找,以前破过一个飞翔企业名录搜索王,判断注册和限制功能居然有10多个地方,虽然最后一个一个的把限制都找出来了。但是,回想起来,仍然觉得是败笔.

我们还得仔细分析.
0062AC24 |. E8 3BC3FFFF   CALL sqlpp.00626F64
0062AC29 |. 84C0       TEST AL,AL
0062AC2B |. 74 16       JE SHORT sqlpp.0062AC43
0062AC2D |. 8B45 FC     MOV EAX,DWORD PTR SS:[EBP-4]
0062AC30 |. E8 57C6FFFF   CALL sqlpp.0062728C
0062AC35 |. 84C0       TEST AL,AL
0062AC37 |. 74 0A       JE SHORT sqlpp.0062AC43

这里有2个比较,第一个比较是试用比较,程序不是有30次的试用功能吗?这个比较就是判断你是否使用次数满30次,如果满了,就提示注册。

采用的是保存注册表的形式,你可以在这个键值下找到他的试用判断,如果试用过期了你把里面的内容改成零,又可以使用了。HKEY_LOCAL_MACHINE\SOFTWARE\gudusoft\easypp
接着,我们来跟入第2个call,
0062AC30 |. E8 57C6FFFF   CALL sqlpp.0062728C
这里应该就是算法了.
0062728C /$ 55         PUSH EBP       //算法入口
0062728D |. 8BEC       MOV EBP,ESP
0062728F |. 83C4 A8     ADD ESP,-58
00627292 |. 53         PUSH EBX
……省略部分
006272DB |. E8 3C25DEFF   CALL sqlpp.0040981C
006272E0 |. 8B45 F8     MOV EAX,DWORD PTR SS:[EBP-8]
006272E3 |. E8 00DADDFF   CALL sqlpp.00404CE8
006272E8 |. 83F8 13     CMP EAX,13     //判断注册的长度
006272EB |. 0F85 19010000 JNZ sqlpp.0062740A
…..省略部分
006273C5 |. 3B1A       ||CMP EBX,DWORD PTR DS:[EDX]
006273C7 |. 74 04       ||JE SHORT sqlpp.006273CD
006273C9 |. 33C0       ||XOR EAX,EAX
我们看这一句
006272E8 |. 83F8 13   CMP EAX,13 判断注册的长度是否为19位,不相等就跳到 006273C9 |. 33C0   ||XOR EAX,EAX 清零.
那注册码很有可能是这样的格式0000-0000-0000-0000
来看算法部分,暴难,向老K求救就给了我几句.我是从头到尾都没有看懂。
MOVZX EAX,BYTE PTR DS:[EAX]       //取[初始]位
MOVZX EAX,BYTE PTR DS:[EAX+12] //取[初始+18]位(第19位)
MOV EAX,DWORD PTR SS:[EBP-8]   //计算后的[EBP-8]中的值赋给EAX备用
MOV DWORD PTR SS:[EBP-38],EAX   // 把上面的值写回到[EBP-38]中继续备用
尝试了一下,用PEID的查壳插件,查看他的算法.

BASE64的算法.根据前辈记载,是个很牛B的强算法.心就凉了半截.继续分析.
我们在来跟,看程序上方,有试用版的提示,如果程序注册那应该就很没有试用版的字样,那应该也是调用算法.
006286A9 |. E8 DEEBFFFF   CALL sqlpp.0062728C   //调用算法
006286AE |. 84C0       TEST AL,AL         //比较
006286B0 |. 75 38       JNZ SHORT sqlpp.006286EA   //不相等就有跳到试用版…
006286B2 |. 8D55 E8     LEA EDX,DWORD PTR SS:[EBP-18]
006286B5 |. 8BC3       MOV EAX,EBX
006286B7 |. E8 9848E4FF   CALL sqlpp.0046CF54
006286BC |. FF75 E8     PUSH DWORD PTR SS:[EBP-18]
006286BF |. 68 70886200   PUSH sqlpp.00628870     ;   试用版
我们可以看到,这里调用的算法地址,和前面调用的算法地址做个比较。
006286A9 |. E8 DEEBFFFF   CALL sqlpp.0062728C
0062AC30 |. E8 57C6FFFF   CALL sqlpp.0062728C
嘿嘿,发现了吧。都是调用同一个算法。那我们修改算法部分代码,会怎样了。来到算法的入口。
0062728C /$ 55         PUSH EBP
直接吧这句改成为,
Mov al,1
RETN

那程序在调用算法的时候,就把al的赋值为1,接着RETN结束call,TEST AL,AL 的时候就成立了。我们来保存一下修改结果,看看效果。
程序已经没有试用版的提示了,注册提示窗口也没有了.虽然没有提示,其实,注册已经成功了。不信可以看看。

总结:
这次破解,虽然程序使用的base64的不可逆强算法,但是它众多判断却是调用同一个地址的算法,这样,却成了这个强算法的软肋,我们只要修改算法的调用入口,就可以轻松的达到一劳永逸办法.希望此文能给在学习反汇编的朋友一个思路,高手见笑了.有不足地方,还望指点.
文章录入:cainiaowang    责任编辑:cainiaowang 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体:
    Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886