|
发表于 2009-9-23 16:36:19
|
显示全部楼层
/: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 编辑 ] |
|