首页
社区
课程
招聘
[原创]菜鸟crack MSNSinffer
发表于: 2012-11-2 18:36 6543

[原创]菜鸟crack MSNSinffer

2012-11-2 18:36
6543
标题:【原创】菜鸟crack MSNSinffer
作者:莫敌小君君
时间:2012-11-02
技术:反调试、时间限制
链接:http://bbs.pediy.com/showthread.php?t=158099
声明:转载请注明出处,本文章仅为技术研究,请勿用于其他非法用途,否则后果自负。

-----------------------------------------------------------------------------------------------
前言:本人菜鸟一只,前一阵子下了个MSNSniffer无聊地折腾了阵子。虽然不怎么用MSN,但是绝对是这种Sniffer软件的程序控。运行之后发现有时间限制,就忍不住手痒了。。。
-----------------------------------------------------------------------------------------------
正式crack

1.        PEID检测
OD调试前PEID检测是个好习惯,PEID载入,VC++7.0,无TLS表,节正常,没发现什么壳和TLS反调试。好的,按理说这种程序应该不会太难。
2.        OD初试
OD放心载入,F9直接运行,停下,发现抛出了异常,顿时有了种不祥的预感。。。

    F9直接运行下去,遇到了神马。Int3 断点!!

继续F9,悲催鸟,内存访问异常。

    明显地遇到了Anti-debug,根据大神们的神贴知道,遇到这种情况时先确定是那种类型的Anti,Anti-OD抑或其他。这里用WinDbg载入,运行,发现正常。到此可以确定这是Anti-OD无疑。
3.        OD企图过Anti-OD
Anti-OD简单的方法一般会首先查找是否有OD进程,FindWinows是常用的函数,因此断FindWindows。F9程序断下来了几次,但是都没找到判断是否为OD的代码语句。汗,这种方法失败。。。
继续bp GetStartupInfo,这也是一种方法。结果,汗,失败,没断下来。。。
再继续bp GetCurrentProcessId,初略跟了下,仍然没结果。继续汗。。。
还是功力不够啊!!!
    换个思路,之前程序发生异常,那么就从异常下手,bp SetUnhandledExceptionFilter,本以为是条通路,柳暗花明,结果又是失败,汗到家了。。。
   
在这里卡了很久,断了很多函数也没能过Anti。除了OD之外的调试器都不太会用,IDA也不太会,怎么办?
想到了OD的Attach功能,以前用过一次,但是没成功,因此之后一直没碰这个功能。抱着最后一点希望Attach MSNSniffer,要是这也不行的话那就只能再次回家继续深造去了。。。
哇哦,Attach—F9,发现程序居然跑起来了,欣喜若狂啊,有木有啊!!
(大大们要是能过Anti的,膜拜啊,望交流技术~~)
4.        OD开始调试
用户名密码不匹配时,会弹框提示输入错误。就以此为突破口吧,bp MessagBoxA等等函数。输入用户名密码,发现程序断了下来,MessageBox,哈哈,这下面就简单了,我已经看到了MSN妹纸在向我招手(吼吼)。
这里贴段关键判断的代码
00412D3A   . E8 61FDFFFF    CALL MsnSniff.00412AA0		;判断函数
00412D3F   . 84C0           TEST AL,AL
00412D41   . 6A 00          PUSH 0
00412D43   . 6A 00          PUSH 0
[COLOR="Red"]00412D45     74 27          JE SHORT MsnSniff.00412D6E	;关键跳[/COLOR]
00412D47   . 68 482B4700    PUSH MsnSniff.00472B48                   ;  ASCII "Thank you for supporting our software!"
00412D4C   . E8 C36C0400    CALL MsnSniff.00459A14	; 调用MessageBox
00412D51   . 8D4C24 04      LEA ECX,DWORD PTR SS:[ESP+4]             ;  ;serial number
00412D55   . 51             PUSH ECX
00412D56   . 8D5424 0C      LEA EDX,DWORD PTR SS:[ESP+C]             ;  ;name
00412D5A   . 52             PUSH EDX
00412D5B   . B9 58EA4800    MOV ECX,MsnSniff.0048EA58
00412D60   . E8 9BF4FEFF    CALL MsnSniff.00402200
00412D65   . 8BCE           MOV ECX,ESI
00412D67   . E8 E5970300    CALL MsnSniff.0044C551
00412D6C   . EB 0A          JMP SHORT MsnSniff.00412D78
00412D6E   > 68 302B4700    PUSH MsnSniff.00472B30                   ;  ASCII "Wrong User or Reg Code!"
00412D73   . E8 9C6C0400    CALL MsnSniff.00459A14
00412D78   > 8B4424 04      MOV EAX,DWORD PTR SS:[ESP+4]
00412D7C   . 83C0 F0        ADD EAX,-10
00412D7F   . C64424 14 00   MOV BYTE PTR SS:[ESP+14],0



好了,到此为止,程序基本已经告破了,,没想到除了Anti-OD外这个程序这么弱。接下来nop掉关键跳,保存新文件MSNSinffer_crack,OK,搞定。
5.        花明柳暗,前村又见一病树??
运行MSNSinffer_crack,嗯,居然还提示未注册!!

好吧,遇到暗桩了。。。
静下心来,继续跟踪。首先来比对下提示注册成功和失败之间的差异,上面的代码中显而易见,除了MessageBox之外,还调用了两个函数。如下

好,跟进这两个函数,发现第一个函数是写注册表,将用户名和密码信息写入注册表。跟进第二个函数,没看懂,好吧,菜鸟的悲催。。但是大致这个程序的验证机制已经懂了,将用户名和密码写入注册表,程序重启之后或settimer之后再次验证用户名和密码。
那么,我们就只能拿判断函数入手了。进入判断函数,发现调用该判断程序不止刚才一处。。。哇哦,这下有思路了。

粗略跟踪下各个函数调用这个判断函数的之后处理。
  
  
发现都和寄存器AL有关,因此判断AL是保存匹配信息的变量。
在来仔细看看这个函数代码。关键看ret之前对AL的处理,这里我们发现:
00412B98   . 50             PUSH EAX
00412B99   . FF52 04        CALL DWORD PTR DS:[EDX+4]
[COLOR="red"]00412B9C     32C0           XOR AL,AL[/COLOR]
00412B9E   . 8B4C24 18      MOV ECX,DWORD PTR SS:[ESP+18]
00412BA2   . 64:890D 000000>MOV DWORD PTR FS:[0],ECX
00412BA9   . 5F             POP EDI
00412BAA   . 5E             POP ESI
00412BAB   . 5D             POP EBP
00412BAC   . 5B             POP EBX
00412BAD   . 83C4 14        ADD ESP,14
00412BB0   . C2 0800        RETN 8

其中XOR AL,AL一句很明显,直接改成MOV eax,1.
重新保存MSNSniffer_crack.exe。再次运行,发现OK。到此爆破结束!!


-----------------------------------------------------------------------------------------------
后记:总的来说,这个软件不难,但是自己还是走了很多弯路,花了有点长的时间,是个教训,希望自己能在教训中成长。。。也希望看雪大大们不吝赐教,膜拜你们,祝看雪越来越好~~

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
不错不错。
2012-11-2 18:49
0
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
你就不能OD忽略异常么。
2012-11-2 19:26
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
试过,不行。。
2012-11-2 20:46
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
哇,普通会员啊,谢谢鼓励
2012-11-2 20:49
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
我的经验就是 换一个OD!!!!!!!!!!!!!。。。有时候 不同OD确实会这样。。。
2012-11-2 22:20
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
中指哥,又见你啊~~
试了,不行。。现在不想太依靠插件。。
2012-11-2 22:40
0
雪    币: 106
活跃值: (574)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
支持一下!加油哦!
2012-11-2 22:53
0
雪    币: 1579
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
唉,说是菜鸟,其实都是牛人,膜拜啊
2012-11-2 23:05
0
雪    币: 959
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10

这个可以过Anti-OD,
上传的附件:
2012-11-3 00:54
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
[QUOTE=ybhdgggset;1114594]
这个可以过Anti-OD,[/QUOTE]

试了这个插件,仍然过不了。。哥们你的可以??

Hide Form PEB的原理应该是修改BeingDebugged位或NtGlobalFlag值的吧,这个我都直接下断过,不行。。
上传的附件:
2012-11-3 09:52
0
雪    币: 959
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
[QUOTE=kxzjchen;1114645]试了这个插件,仍然过不了。。哥们你的可以??

Hide Form PEB的原理应该是修改BeingDebugged位或NtGlobalFlag值的吧,这个我都直接下断过,不行。。[/QUOTE]

我的可以,win2003 虚拟机,可能是系统不一样吧
2012-11-3 10:13
0
雪    币: 190
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
嗯,那应该就是的了吧
2012-11-3 15:09
0
游客
登录 | 注册 方可回帖
返回
//