【VB程序自校验】已找到关键跳,求高人指点
本来在坛子上看到高手们都讲新手不要去搞VB程序,一直都没敢动手今天偶然用到个程序,看到是upx的壳,顺手单步跟踪脱它衣服玩
脱下来发现程序带了自校验
运行一下一闪而过
再查壳:Microsoft Visual Basic 5.0 / 6.0
心想正好今天休息,整整VB自校验看看
于是痛苦的一天开始了……
被里面的jmp和call拖着满世界跑,一直按到手指头发软也没搞清楚方向
没办法,只好开了两个od对着看,10分钟前终于到了关键跳转的地方
7348F18E 8A4A 74 MOV CL,BYTE PTR DS:
7348F191 B8 00C00000 MOV EAX,0C000
7348F196 F6C1 03 TEST CL,3
7348F199 0F85 65470000 JNZ msvbvm60.73493904
7348F19F^ EB D9 JMP SHORT msvbvm60.7348F17A
7348F1A1 8975 EC MOV DWORD PTR SS:,ESI
7348F1A4 33C0 XOR EAX,EAX
7348F1A6 8A46 01 MOV AL,BYTE PTR DS:
7348F1A9 83C6 02 ADD ESI,2
7348F1AC FF2485 58FA4873 JMP DWORD PTR DS:
7348F1B3 59 POP ECX
7348F1B4 66:0BC9 OR CX,CX
7348F1B7 /75 12 JNZ SHORT msvbvm60.7348F1CB ////////关键跳
7348F1B9 0FB736 MOVZX ESI,WORD PTR DS:
7348F1BC 0375 A8 ADD ESI,DWORD PTR SS:
7348F1BF 33C0 XOR EAX,EAX
7348F1C1 8A06 MOV AL,BYTE PTR DS:
7348F1C3 46 INC ESI
7348F1C4 FF2485 58FA4873 JMP DWORD PTR DS:
7348F1CB 33C0 XOR EAX,EAX
7348F1CD 8A46 02 MOV AL,BYTE PTR DS:
7348F1D0 83C6 03 ADD ESI,3
7348F1D3 FF2485 58FA4873 JMP DWORD PTR DS:
7348F1DA 833C24 00 CMP DWORD PTR SS:,0
程序处于msvbvm60领空,该跳转在运行88次后开始判断文件大小,如果大于原始大小就退出
如果改为je后运行,程序按钮上的标题全部为空
再追,发现第89次运行该处时判断大小,如果大小符合条件,程序还会再调用该处42次
改为je后运行就会出错
调试状态下第89次运行该处跳转改为je,f8后再改回来,程序运行正常。
现在的问题是如何破解这个自校验呢?/:0111" />1" /> 烦请高手指点!感激不尽!:loveliness:
程序也打包在附件供参考,谢谢!
[ 本帖最后由 beijingren 于 2009-7-1 11:45 编辑 ] 系统里的可以做LPK补丁 tianxj老大能否详细说明一下呢?小弟不才,baidu+google+pyg都没有搜索到详细说明。 P-Code的程序,你可以用VBExplorer分析下,看Form1的Load事件代码:
***********Reference To:App.EXEName
|
:00410DF00D58001700 VCallHresult ;Call ptr_00408CFC
:00410DF53EE4FE FLdZeroAd ;Push DWORD ; =0
:00410DF846D4FE CVarStr ;
:00410DFBFBEFC4FE ConcatVar ;
******Possible String Ref To->".exe"
|
:00410DFF3AB4FE1A00 LitVarStr ;PushVarString ptr_00408D18
:00410E04FBEFA4FE ConcatVar ;
:00410E08FCF694FE FStVar ;
:00410E0C2F6CFF FFree1Str ;SysFreeString ; =0
:00410E0F29060078FF70FFE8 FFreeAd ;
:00410E183610005CFF3CFF1C FFreeVar ;Free 0010/2 variants
:00410E2B001A LargeBos ;IDE beginning of line with 1A byte codes
:00410E2D0494FE FLdRfVar ;Push LOCAL_016C
:00410E30FDFE74FF CStrVarVal ;
**********Reference To->msvbvm60.rtcFileLen ---取得文件大小
|
:00410E345E1B000400 ImpAdCallI2 ;Call ptr_00401094; check stack 0004; Push EAX
:00410E39F5D0010100 LitI4 ;Push 000101D0 --与这个数比较(66000字节)
:00410E3EDB GtI4 ;Push (Pop1 > Pop2)
:00410E3F2F74FF FFree1Str ;SysFreeString ; =0
:00410E421CE400 BranchF ;If Pop=0 then ESI=00410E4C
==========
修改方法:OD载入,修改410e3A处的值大于脱壳后的文件即可 改好了,呵呵
代码如下:
00410E30 FD STD
00410E31 FE ??? ; 未知命令
00410E32 74 FF JE SHORT 1.00410E33
00410E34 5E POP ESI
00410E35 1B00 SBB EAX,DWORD PTR DS:
00410E37 04 00 ADD AL,0
00410E39 F5 CMC
00410E3A D001 ROL BYTE PTR DS:,1 ///二进制编辑---改为FFFF
00410E3C 0100 ADD DWORD PTR DS:,EAX
00410E3E DB2F FLD TBYTE PTR DS:
00410E40 74 FF JE SHORT 1.00410E41
00410E42 1C E4 SBB AL,0E4
00410E44 0000 ADD BYTE PTR DS:,AL
00410E46 04 FC ADD AL,0FC
00410E48 C8 000313 ENTER 300,13
00410E4C 001D F4000478 ADD BYTE PTR DS:,BL
运行程序成功!
感谢roking、tianxj大大!!!!!!!! 学习了,有收获。
页:
[1]