首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
付费问答
发新帖
0
0
[旧帖]
[原创]投机取巧crack一只老虎
0.00雪花
发表于: 2009-6-23 23:15
3719
[旧帖]
[原创]投机取巧crack一只老虎
0.00雪花
karas
2
2009-6-23 23:15
3719
【文章标题】: 投机取巧crack一只老虎
【文章作者】: karas
【软件名称】: 一只老虎crackme
【软件大小】: 664KB
【下载地址】: 看雪论坛
【加壳方式】: NO
【编写语言】: Borland Delphi
【使用工具】: "W32dsm8.93+"+IDA
【操作平台】: XP SP3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
W32dsm8.93+反汇编,查看函数参考,很快找到关键跳转(下图中B),修改之,结果失败
开始跟踪注册码计算过程,发现对用户名和注册码的长度有一定要求(下面会说到)
当时没有想到输入规定长度的用户名和注册码再修改关键跳转试试(一大疏忽!)
接着跟到一个循环,循环次数N多次(又是耽误跟踪时间的循环),大概跟了几遍
这次没立刻修改以减少循环,而是把断点改设在循环后面继续跟踪
后来跟到一串字符(长度是17,在规定的注册码长度之内,记录下来)与输入的注册码比较
最后跟踪结束,输入规定长度的用户名和刚才记录下来的那一串字符,还是失败
难道是遇到了传说中的暗码比较?
最近一直在跟踪一个共享软件的关键代码
其实仔细地跟踪一个软件的关键代码真的很累,而且不可能一次就把程序流程理清楚
前几天跟踪一个修饰图片的共享软件,关键代码部分很多call
有的call调用不同的地址却是相同的功能,有的call代码看似相同却是有关键的不同
软件作者就是要这样把你整糊涂,把你搞得晕乎晕乎的
非常仔细地注释主要代码,花了一个通宵时间,跟到最后居然跳出注册成功!
当时真是傻眼了,原来软件有bug(估计软件作者把自己也整得晕乎晕乎了)
输入8位注册码和12位激活码就能注册成功
而跟踪的时候输入的注册码和激活码居然就是8位和12位
这能说是超级好运气吗!当时差点没把李云龙那句"揍它XXXX!"骂出来
总的来说,crack需要无限的执着!
提到这些其实是想引出程序流程这个东西
以前在跟踪著名ciba的时候,也是遇到很多的call
在暴力crack过程中描画过一部分关键代码的流程图,不过非常费劲
前几天开始使用IDA,发现这个工具暴强,居然能把代码转成布局图和流程图
她正是我梦寐以求的功能,当时惊叹得以"神器"来形容她
于是乎用IDA打开"一只老虎",把关键代码转成布局图,如下(终于说到重点了-_-!):
;布局图------------------------------------------------------
;布局图------------------------------------------------------
先说一下布局图的箭头(自己猜测,错误请指出):
;亮蓝色箭头只在前面出现,应该是指示程序的入口;深蓝色箭头指示流程的顺序走向
;红色箭头指示跳转失败(False)的流程走向;绿色箭头指示跳转成功(True)的流程走向
;粗绿色箭头指示循环跳转
图中关键信息和跳转已用粗红线条或字母标出
从下面看起,先看A,粗红线标出"恭喜你"、"注册成功!..."是注册成功的提示信息
我们做的一切都是为了要使程序跑到A这里,那么程序是从哪里跑到A的呢?
一看就知道是从B跑到A的,B有一个跳转(就是一开始修改的关键跳转)
True就跳走,False才能跑到A,所以这里要修改,把她nop掉
再看看程序从哪里跑到B的呢?有2个地方,一是C,一是E
先看C,C的跳转是循环跳转,循环结束自然而然就会跑去B,所以这里跳转不修改
再看C的上面是D,而D的上面正好就是E
E的跳转不管是True还是False,最后都是能够跑到B的,所以这里也不修改
再来看程序从哪里跑到E的呢?也是2个地方,一是F,一是J
F上面是G,再上面是H,G是一个小循环,而F、G、H则构成一个大循环
不管怎么循环,循环多少次,最后还是要跑到E的,所以里面的循环跳转不管
大循环上面是I,再上面是J,哈哈,跟前面的情况一样是吧
J的跳转不管是True还是False,最后都是能够跑到E的,所以这里也不修改
就是这样一步一步的往上反推,K也是循环,不管
注意L,L的跳转False能顺利跑到K,但是True的话就跳到后面,跳过A,所以要修改
同理M、N、O都是要修改才能使程序最终顺利到达A
不过前面跟踪程序的时候知道L、M、N、O这4个地方是用来判断用户名和注册码长度的
O的cmp eax,0Ah(=10)和N的cmp eax,10h(=16)限定用户名长度X:X>=10且X<=16
M的cmp eax,11h(=17)和L的cmp eax,16h(=22)限定注册码长度Y:Y>=17且Y<=22
所以,只要我们输入的用户名和注册码长度符合程序的规定,也是能够顺利跑到K
综上所述,只要我们输入的用户名和注册码长度符合程序的规定
再把B的跳转nop掉,就能达到目的,注册成功!(此修改测试通过)
其实你也可以修改L、M、N、O这4个地方,破除程序对用户名和注册码的规定!
还有,注册码的生成过程也在布局图里,算法暂时不分析(不知道能不能分析总结出来)
看到这里是不是觉得暴力crack很简单?
只要能找到关键代码,再把代码转成布局图,暴力crack就会变得很轻松愉快^_^
要是在crack前面提到的那个修饰图片的软件的时候
用IDA得到关键部分的布局图(可惜当时不知道IDA有这个功能)
估计不会跟踪到最后才发现程序的bug
如果能把程序流程描绘出来,修改会变得游刃有余
而且可以大刀阔斧,甚至充满想象力,暴力crack真的可以很暴力
下面通过一种大胆的修改,展示一下充满想象力的暴力^_^
注意O的跳转,False跳到N,True的话跳到A下面的P
我把O的jl loc_48C844改成jmp loc_48C81F(这是B的地址,B的第一行标出该地址)
作用是把指向P的箭头强行拉去指向B,等于删除O与B之间的大部分代码
再把B的跳转nop掉,猜猜看会发生什么情况?
现在输入任意用户名和注册码或者不输入任何字符都能注册成功!(此修改测试通过)
哈哈,是不是有点神奇?!
也许你们会想到:能不能从O直接跳到A,只能说是个未知数(高手也许可以解答)
以前尝试过这种更大胆的跳转,但是没有成功,会报内存出错
所以,就算这个crackme可以成功,也不能保证其他的都能成功
PS:
你也可以在两点之间插入自己的代码,不过更加困难(好像涉及PE的修改)
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2009年06月22日 23:14:30
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
上传的附件:
壹只老虎_layout_mark.jpg
(327.40kb,7次下载)
收藏
・
0
免费
・
0
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
3
)
shada
雪 币:
47
活跃值:
(34)
能力值:
( LV2,RANK:10 )
在线值:
发帖
16
回帖
67
粉丝
0
关注
私信
shada
2
楼
不错啊。支持~~~
2009-6-26 11:13
0
shlzjcx
雪 币:
199
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
10
回帖
18
粉丝
0
关注
私信
shlzjcx
3
楼
经典,狂顶!!!再出几篇这样的
2010-3-5 14:36
0
hxdjk
雪 币:
33
活跃值:
(10)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
14
粉丝
0
关注
私信
hxdjk
4
楼
支持!!!!!支持!!!
2010-3-5 15:52
0
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
karas
2
5
发帖
10
回帖
100
RANK
关注
私信
他的文章
[原创]投机取巧crack一只老虎
3720
[原创]crack献给所有爱好破解的初学者
4038
[原创]ncrackme算法总结
4124
[原创]UltraDict算法总结
2798
[原创]第一次crack
3539
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
谁下载
×
bfqyygy
nence
shlzjcx
smbqk
邓韬
usman
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部