beijingren 发表于 2009-6-29 21:30:44

【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 编辑 ]

tianxj 发表于 2009-6-29 22:10:47

系统里的可以做LPK补丁

beijingren 发表于 2009-6-30 07:09:51

tianxj老大能否详细说明一下呢?小弟不才,baidu+google+pyg都没有搜索到详细说明。

roking 发表于 2009-6-30 18:29:13

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处的值大于脱壳后的文件即可

beijingren 发表于 2009-6-30 21:25:00

改好了,呵呵
代码如下:
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大大!!!!!!!!

老万 发表于 2009-7-1 07:12:19

学习了,有收获。
页: [1]
查看完整版本: 【VB程序自校验】已找到关键跳,求高人指点