VB程序自校检怎么去除
我从别的论坛下载了一个VBcrackme,脱了壳后运行程序提示访问内存错误,作者说这是自校检,我弄来弄去还是弄不掉,有谁能帮帮,并说下思路[ 本帖最后由 hahuhu190 于 2009-8-5 13:00 编辑 ] f12堆栈试一试看看啊 试过了,在系统领空中徘徊··· 你应该上传未脱壳的原程序才好帮你分析 原帖由 老海 于 2009-8-5 09:03 发表 https://www.chinapyg.com/images/common/back.gif
你应该上传未脱壳的原程序才好帮你分析
哦,知道了 无可奈何ing 没办法,那个00497b8b在OD里怎么定位啊? /:001 /:001 /:001
程序是VB P-Code编译 程序校验文件的大小
分三种情况
filelen=0x71000(用AspackDie141 脱壳后文件的大小) 大概的代码如下:
Private Sub Form_Load()
If FileLen(App.Path & "\" & App.EXEName & ".exe") = 462848 then'462848=0x71000
tChr = "" & Chr(34) & ""
exeName = CVar(App.Path & "\" & App.EXEName & ".exe")
nLen = CLng(Len(exeName))
nStr = CStr(nLen)
For I = 1 to nLen ' I as long
If left(tStr,1) = "\" Then
Exit for
End If
ntmp = Mid(exeName, CLng(nStr), I)
tStr = CStr(ntmp)
nStr = CStr((CDbl(nStr) - CDbl(1)))
Next I' For循环的作用将文件路径名字符中最后一个"\"(保含"\")以后的字符截取
tStr = CStr(Mid(tStr, 2, ntmp)) '取文件名
MsgBox(CVar(tChr & "0x00498b7b" & tChr & "指令引用的" & tChr & "0x001c5204" & tChr & "内存。该内存不能为" & tChr & "read" & tChr) &(((((((("。" + Chr(13)) + " ") + Chr(13)) + "要终止程序,请单击“确定”") + Chr(10)) + " ") + Chr(13)) + "要调试程序,请单击“取消” "), 1+16, CVar(tStr & " - 应用程序错?"), helpfile, Context)
End If
filelen=0x78000(手脱后文件的大小) 大概的代码如下:
If FileLen(App.Path & "\" & App.EXEName & ".exe") = 491520 then'491520=0x78000
tChr = "" & Chr(34) & ""
exeName = CVar(App.Path & "\" & App.EXEName & ".exe")
nLen = CLng(Len(exeName))
nStr = CStr(nLen)
For I = 1 to nLen ' I as long
If left(tStr,1) = "\" Then
Exit for
End If
ntmp = Mid(exeName, CLng(nStr), I)
tStr = CStr(ntmp)
nStr = CStr((CDbl(nStr) - CDbl(1)))
Next I' For循环的作用将文件路径名字符中最后一个"\"(保含"\")以后的字符截取
tStr = CStr(Mid(tStr, 2, ntmp)) '取文件名
MsgBox(CVar(tChr & "0x00498b7b" & tChr & "指令引用的" & tChr & "0x001c5204" & tChr & "内存。该内存不能为" & tChr & "read" & tChr) &(((((((("。" + Chr(13)) + " ") + Chr(13)) + "要终止程序,请单击“确定”") + Chr(10)) + " ") + Chr(13)) + "要调试程序,请单击“取消” "), 1+16, CVar(tStr & " - 应用程序错?"), helpfile, Context)
End If
filelen!=0x7C00(加壳文件的大小) 大概的代码如下:
If FileLen(App.Path & "\" & App.EXEName & ".exe") = 31744 then'31744=0x7C00
tChr = "" & Chr(34) & ""
exeName = CVar(App.Path & "\" & App.EXEName & ".exe")
nLen = CLng(Len(exeName))
nStr = CStr(nLen)
For I = 1 to nLen ' I as long
If left(tStr,1) = "\" Then
Exit for
End If
ntmp = Mid(exeName, CLng(nStr), I)
tStr = CStr(ntmp)
nStr = CStr((CDbl(nStr) - CDbl(1)))
Next I' For循环的作用将文件路径名字符中最后一个"\"(保含"\")以后的字符截取
tStr = CStr(Mid(tStr, 2, ntmp)) '取文件名
MsgBox(CVar(tChr & "0x00498b7b" & tChr & "指令引用的" & tChr & "0x001c5204" & tChr & "内存。该内存不能为" & tChr & "read" & tChr) &(((((((("。" + Chr(13)) + " ") + Chr(13)) + "要终止程序,请单击“确定”") + Chr(10)) + " ") + Chr(13)) + "要调试程序,请单击“取消” "), 1+16, CVar(tStr & " - 应用程序错?"), helpfile, Context)
End If
End Sub
所以去除自校验方法:(这里要改三处)
第一处:
用十六进制工具打开脱壳的文件 将6D5E5H处的: 1C改成1E 或 如果脱壳后文件大小是0x71000(462848)那这里改成 1D 否则这里可以不用改
第二处:
先用十六进制工具打开脱壳的文件 将6D8DEH处的: 1C改成1E 或 如果脱壳后文件大小是0x78000(491520)那这里改成 1D 否则这里可以不用改
第三处:
先用十六进制工具打开脱壳的文件 将6DBD7H处的: 1C改成1E 或 改成 1D (必须改)
经过以上修改程序自校验即可去掉./:018
[ 本帖最后由 hflywolf 于 2009-9-23 19:36 编辑 ] 楼上的大侠真厉害,学习一下 原帖由 老万 于 2009-9-23 19:21 发表 https://www.chinapyg.com/images/common/back.gif
楼上的大侠真厉害,学习一下
/:L 不是我厉害,是VB反编译工具太强大了!
把脱壳程序丢进VBDecompiler看一下Form_Load事件 我给出的代码就都出来了(我只是在理解的基础上把代码加工一下而已)
再把脱壳程序丢进VBExplorer 也是看一下Form_Load事件 伪代码也出来了。
接下根据VB P-CODE 的原理 结合VBDecompiler 反编译出来程序代码,改掉相应跳转的指令即可
Branch(无条件跳转 机器码是1E)
BranchF(堆栈值为0则跳,机器码是1C)
BranchT(堆栈值是-1则跳,机器码是1D)
[ 本帖最后由 hflywolf 于 2009-9-23 20:02 编辑 ]
页:
[1]
2