标题:【原创】菜鸟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期)