吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7411|回复: 15
收起左侧

[原创] 一个神奇的CrackMe分析

[复制链接]
willJ 发表于 2011-12-27 17:18
[文件标题]:一个神奇的CrackMe分析
[文章作者]:willJ
[作者邮箱]:466684954@qq.com
[软件名称]:Game.exe
[下载地址]:附件
[运行环境]:Windows xp sp3
[使用工具]:OD,PEID
[作者声明]:
只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

[详细过程]

今天拿到一个CrackMe,觉得会很简单,就去玩玩咯,没有想到这么有趣,这里和52pojie的各位分享下吧。

老样子,先查壳。
1.jpg

是一个UPX的壳,这种壳还是很简单的,一个ESP应该可以脱的,不过很神奇的事情是我明明一个ESP到达了OEP,也脱下来了,就是跑不起来,修复也不行,但是我知道了是VC++写的。
2.jpg

算了,我们就带壳调吧,先用ESP到达OEP。我们先运行下看看是什么样的吧。
3.jpg
随便输入了一个key去试试手气,发现是这样的,于是我就想着下一个bp MessageBoxA
继续跑起来,断在下面:
4.jpg

我们使用ALT+F9回到程序领空,在最上面下一个断点,继续输入123456789测试。
5.jpg

我们发现了那个弹出错误的对话框:
6.jpg
于是我尝试去绕过去。
7.jpg
我们让它不跳,否则就直接弹错误对话框了。
8.jpg

这里还有一个弹错误对话框的,我一样得跳过去呀。
要不我们直接nop了这个,跳过去。
9.jpg

于是绕过去了,我觉得可以爆破了,但是出现了下面的状况:什么都没有显示,连个框都没有弹,然后我深入的跟了这里,发现根本就不会出现什么弹正确的对话框的东西,看来世我分析错误了,然后我还是单步跟下看看吧。
10.jpg
发现了一个什么的字符串,上网搜了下Auto1t是一个脚本语言,我们继续跟下去。
11.jpg
走到41da03的时候,发现eax的变化,我在数据窗口跟随了下,这下出现不不可思议的东西了,里面居然是代码,我们将内存数据抓出来:
12.jpg
是不是感觉很乱,但是里面有关键的中文提示,于是我将关键代码整理出来:
GUICreate ( " 我们来玩个游戏吧 ", 300, 90 )
$Input = GUICtrlCreateInput ( "在这里输入一个密码,输对了有惊喜喔~" , 25, 20, 250, 20)
$Btn = GUICtrlCreateButton ( " 我要试试手气啦 " , 100, 50, 100, 20)
$Str1 = "Ks;SMO*^4NowfweWdDfREWFRW"
$Str2 = "Kkl#$2LKmKMUdkmdekmfMKMKO"
$Str3 = "wwdad,d;,dkKn0wSW55DDds8d"
$Str4 = "wer32sdfAuto1tf34#5OMM0ss"
$In = GUICtrlRead ($Input)
$Key = StringTrimRight(StringTrimLeft($Str1, 9),  13)
$Key = $Key & StringMid($Str2, 12, 1)
$Key = $Key & StringReplace(StringRight($Str3, 14), 'SW55DDds8d','')
$s = StringSplit($Str4, "f")
$Key = $Key & $s[2]
If $In == $Key Then
MsgBox ( 0 , " 你拿到key了喔 "," 厉害啊,这都被你猜中了!" )
EndIf
MsgBox ( 0 , " 还差一点点啦 ", " 你没有猜中喔,别灰心,再来一次吧。" )
我以为是Vb的代码,结果上网看了下vb好像没有这下api,对了,前面不是有一个auto1t么,于是我上网去查了下,果然是一个脚本语言。
下面看看这些函数的意思吧。
StringTrimLeft()
删除字符串中从左开始指定数量的字符。
StringTrimLeft字符串,数量)
StringTrimRight()
删除字符串中从右开始指定数量的字符
StringTrimRight字符串,数量)
StringMid()
取某个字符串的部分字符。
StringMid ( "字符串", 起始位置 [, 数量] )
StringRight()
返回字符串中从右开始指定数量的字符。
StringRight ( "字符串", 数量 )
StringReplace()
替换字符串中的指定子串。
StringReplace ( "字符串", "搜索串" 起始位置, "替换串" [, 数量 [, 区分大小写]] )
StringSplit()
以指定分隔符把字符串拆分成若干子串。
StringSplit ( "字符串", "分隔符" [, 标志 ] )
&符合是连接符号,不是相与,函数都解释了,那我们就可以把该输入的东西倒推出来了吧。
$Str1 = "Ks;SMO*^4NowfweWdDfREWFRW"
$Str2 = "Kkl#$2LKmKMUdkmdekmfMKMKO"
$Str3 = "wwdad,d;,dkKn0wSW55DDds8d"
$Str4 = "wer32sdfAuto1tf34#5OMM0ss"
$In = GUICtrlRead ($Input)
$Key = StringTrimRight(StringTrimLeft($Str1, 9),  13)
这里KeyNow
$Key = $Key & StringMid($Str2, 12, 1)
这里KeyNowU
$Key = $Key & StringReplace(StringRight($Str3, 14), 'SW55DDds8d','')
这里KeyNowUKn0w
$s = StringSplit($Str4, "f")
f划分字符串
wer32sd
Auto1t
34#5OMM0ss
$Key = $Key & $s[2]
最后得到KeyNowUKn0wAuto1t
到这里这个CrackMe分析结束了,总结下,现在我觉得这个exe就是一个Auto1t的解释器吧,这样它才能让释放在内存中的语句显示出来,这里也证明了为什么那里显示的全部都是错误的MessageBox,正确的弹框是在那个脚本语言中,还有个问题也可以明白了,为什么脱壳了就是跑不起来,多半由于脱壳后这个解释器就无法准确定位那些语句的原因吧。
或许这些可以用在病毒上面吧,Auto1t脚本确实比较强大呀,希望有了这次分析,在以后分析病毒上面有所帮助。
显示一张成功的图片吧,嘻嘻
13.jpg
附件:
Game.rar (172.43 KB, 下载次数: 20)
              

免费评分

参与人数 1热心值 +1 收起 理由
get358691874 + 1 佩服

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

流年 发表于 2011-12-27 19:13
学习了,
不苦小和尚 发表于 2011-12-27 19:47
a8987216 发表于 2011-12-27 19:55
不苦小和尚 发表于 2011-12-27 20:16
楼主真是太细心了,一般人真不会注意那么多
Charlie 发表于 2011-12-27 20:27
谢谢分享 此篇文章
 楼主| willJ 发表于 2011-12-27 21:20
回复 a8987216 的帖子

我也是第一次接触,以后好好玩玩
 楼主| willJ 发表于 2011-12-27 21:21
回复 不苦小和尚 的帖子

运气,运气好看见了
Kavia 发表于 2011-12-28 10:50
willJ 发表于 2011-12-27 21:21
回复 不苦小和尚 的帖子

运气,运气好看见了

哈哈。willJ....肿么不早点发,早点发,我就可以早点把逆向300的KEY提交了。我就可以拿2等奖额呢!
 楼主| willJ 发表于 2011-12-28 14:22
Kavia 发表于 2011-12-28 10:50
哈哈。willJ....肿么不早点发,早点发,我就可以早点把逆向300的KEY提交了。我就可以拿2等奖额呢!

膜拜Kavia大牛
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 10:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表