【文章标题】: iRcHaTaN-DeFacer[VBNative][网络验证][patch]
【文章作者】: NWMonster
【作者主页】: http://nwmonster.blogspot.com
【作者QQ号】: 414211565
【软件名称】: iRcHaTaN-DeFacer.exe
【软件大小】: 130,048字节
【下载地址】: http://www.irchatan.com/downloads/iRcHaTaN-DeFacer-2.0.zip?
【加壳方式】: upx
【编写语言】: VB Native
【使用工具】: VB Decompiler,RTA,od
【操作平台】: winXP sp2
【软件介绍】: 见其官网:http://www.irchatan.com
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!看了书光盘几个里关于vbnative的文件还有网络验证的破解然后遍想找个目标试一下。[其实我没看书,光看盘了,纯粹凑凑热闹而已。]
--------------------------------------------------------------------------------
【详细过程】
先把壳脱掉,upx -d xxx.exe
$ upx -d iRcHaTaN-DeFacer.exe
Ultimate Packer for eXecutables
Copyright (C) 1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007
UPX 3.01 Markus Oberhumer, Laszlo Molnar & John Reiser Jul 31st 2007
File size Ratio Format Name
-------------------- ------ ----------- -----------
413696 <- 130048 31.44% win32/pe iRcHaTaN-DeFacer.exe
Unpacked 1 file.
把脱壳后的加到vbDecompilerPro里分析下
发现加载程序后第一个窗口便是Form5
好我们来看看Form5这个窗口。发现Command2_Click_43f210就是那个Active Full Version的功能
进去看看,我一下傻了。。。实话说没看太明白。
然后看看Form_Load_440D10
感觉有发现,来看看:
Private Sub Form_Load() '440D10
loc_00440D2E: call MSVBVM60.DLL.__vbaChkstk
loc_00440D39: var_14 = &H403350
loc_00440D65: var_4 = 1
loc_00440D6C: var_4 = 2
loc_00440D75: call On Error ...(FFFFFFFFh, edi, esi, ebx)
loc_00440D7B: var_4 = 3
loc_00440D82: var_64 = "reg delete HKEY_CURRENT_USER\AppEvents\Schemes\Apps\Explorer\Navigating\.Current /f"
loc_00440D89: var_6C = 8
loc_00440D96:
loc_00440DA2: Shell(var_5C, 00000000h)
loc_00440DA8: fstp real8 ptr var_88
loc_00440DB7: var_4 = 4
loc_00440DCA: call MSVBVM60.DLL.__vbaRecDestruct(0041438Ch, var_9C)
loc_00440DD7: Proc_00444010(MSVBVM60.DLL.__vbaRecDestruct(0041438Ch, var_9C), "", var_9C)
loc_00440DEC: call MSVBVM60.DLL.__vbaRecAssign(0041438Ch, var_2C, var_9C, var_9C)
loc_00440DF2: var_4 = 5
loc_00440DFE: call MSVBVM60.DLL.__vbaNew(00409A78h)
loc_00440E17: call MSVBVM60.DLL.__vbaObjSetAddref(arg_8, MSVBVM60.DLL.__vbaNew(00409A78h), var_4C, MSVBVM60.DLL.__vbaNew(00409A78h))
loc_00440E26: var_4 = 6
loc_00440E35: call MSVBVM60.DLL.__vbaStrCopy
loc_00440E43: call MSVBVM60.DLL.__vbaStrCopy
loc_00440E51: call MSVBVM60.DLL.__vbaStrCopy
loc_00440E57: var_80 = 80000001h
loc_00440E6E: Proc_00430830(var_80, var_40, var_44)
loc_00440E9A: call MSVBVM60.DLL.__vbaStrCopy(var_80, "", 74, "")
loc_00440EC1: Form5.%x3 = PropBag.ReadProperty(%x1, %x2)
loc_00440F0B: call MSVBVM60.DLL.__vbaStrCopy
loc_00440F1A: var_4 = 9
loc_00440F28: Proc_0042FDB0(arg_8, "", ecx)
loc_00440F32: var_40 = Proc_0042FDB0(arg_8, var_40, ecx)
loc_00440F40: call MSVBVM60.DLL.__vbaStrCopy(arg_8)
loc_00440F4F: var_4 = 10
loc_00440F62: call MSVBVM60.DLL.__vbaStrCopy
loc_00440F68: var_4 = 11
loc_00440F86: var_40 = Form5.GetPalette & "riza"
loc_00440F94: call MSVBVM60.DLL.__vbaStrCopy
loc_00440FA3: var_4 = 12
loc_00440FC1: var_40 = %x2 & Form5.GetPalette
loc_00440FCF: call MSVBVM60.DLL.__vbaStrCopy
loc_00440FFF: Form5.%x3 = PropBag.ReadProperty(%x1, %x2)
loc_00441049: call MSVBVM60.DLL.__vbaStrCopy
loc_00441058: var_4 = 14
loc_00441066: Proc_0042FDB0("", arg_8, ecx)
loc_00441070: var_40 = Proc_0042FDB0(var_40, arg_8, ecx)
loc_0044107E: call MSVBVM60.DLL.__vbaStrCopy(arg_8)
loc_0044108D: var_4 = 15
loc_0044109C: call MSVBVM60.DLL.__vbaStrCopy
loc_004410AA: call MSVBVM60.DLL.__vbaStrCopy
loc_004410B0: var_80 = 80000001h
loc_004410C7: Proc_00430940("", var_80, "")
loc_004410D2: call MSVBVM60.DLL.__vbaVarMove("", var_80, "", var_44)
loc_004410EB: var_4 = 16
loc_0044110A: call MSVBVM60.DLL.__vbaVarTstEq(&H8008, var_3C)
loc_00441110: movsx ecx, ax
If Form5.GetPalette <> 0 Then <-----------神奇的条件
loc_0044111B: var_4 = &H11
loc_0044112D: call MSVBVM60.DLL.__vbaStrCopy
loc_00441133: var_4 = &H12
loc_00441171: var_8C = var_BC
loc_00441186: call Form5.Hide <-----------Hide Form5!!!!!!!!!!!!!
loc_004411CD: var_4 = &H13
loc_0044120B: var_8C = 04
loc_00441211: var_74 = 80020004h
loc_00441218: var_7C = 10
loc_0044121F: var_64 = 80020004h
loc_00441226: var_6C = 10
loc_00441232: call MSVBVM60.DLL.__vbaChkstk
loc_00441255: call MSVBVM60.DLL.__vbaChkstk
loc_00441282: Form5.Show %x1, %x2
loc_004412C9: var_10 = 0
loc_004412D6: GoTo loc_00441302
loc_00441301: Exit Sub
loc_00441302: 'Referenced from 004412D6
loc_0044130E: call MSVBVM60.DLL.__vbaRecDestruct(0041438Ch, var_9C, 0044132Dh)
loc_0044131D: call MSVBVM60.DLL.__vbaRecDestruct(0041438Ch, var_2C)
loc_0044132C: Exit Sub
End Sub
看到这里感觉到,这个条件要成立我们就可以通关了
用RTA看看441110这里:
441110:
movsx ecx,ax
test ecx,ecx
je 4412c9
mov dword ptr [ebp-4],11
..............
没得说je肯定不的跳。。。NOP掉
保存一下然后打开程序看到成了已经是Full Version了已经越过了网络验证。
简单的不得了。。。。。
现在来写patch
用od找到upx壳的最后一句[利用堆栈平衡法则很容易找到]在46922c是jmp 403954
然后把它改为
46922c:
mov dword ptr [441115],90909090
mov word ptr [441115],9090
jmp 00403954
运行一下成了。:)
然后记下16进制指令和RVA: 46922c
46922c c705151144009090909066c705151144009090e910a7f9ff
写个patcher或者找个二进制对比补丁工具您应该不在话下了吧。
注意:如果你想尝试动态调试这个程序的话,最好用attach的方式,因为这个程序很XXX ,试下就明白了。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年07月18日 17:37:34
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!