(看雪教程) 第7章第3节 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    SmartCheck介绍

    SmartCheck 是 NuMega 公司推出的一款出色的调试解释执行程序的工具,目前最新版是 v6.03 ,

(看雪教程) 第7章第3节

。它非常容易使用,你不需了解汇编程序。我们以前经常用 SOFTICE 和 W32Dasm 调试程序,幸好 SmartCheck 出现大大地方便了我们。下面我就介绍SmartCheck的基本用法。

    配置 SmartCheck

    首先运行SmartCheck,装载一VB程序。在菜单选择:Program→Settings;出现图一:(如你在SmartCheck下没有打开应用程序,只出现三个菜单选项:Error Detection;Rrporting;Program Info.)

    Error Detection(图一):选上所有的选项。 "Report error immediately",可根据情况调整,选上后程序执行有错误时会立即出现报告,此时在弹出的报告栏上按acknowledge即可你嫌麻烦可不选此项.如此项没选则不立即报告.建议不要选。

    图一

    点击在上图中Advanced后出现图二:

    图二

    Advanced(图二):选上前面的四项.确信"Suppress system API and OLE calls"没被选上.

    Reporting(图三):除了"Report MouseMove events from OCX controls"外其余全选上.

    图三

    --------------------------------------------------------------------------------

    用SmartCheck如何运行所要crack程序

    1) 首先运行;

    2) 在"File" "Open"选择你需运行的程序;

    3) 按F5或选择 "Program" "Start"运行程序;

    4) 停止程序,选择"Program" "End";

    你最好是了解SmartCheck的工具栏的用法,大大方便操作。

    --------------------------------------------------------------------------------

    程序在SmartCheck下运行结束后你应看到时如下东西

    1) 在SmartCheck里你应有3个小窗口。我自己的有时会出现一个主窗口,怎么回事呢?原来其它两个(右边和下边)完全最小,缩到边上(右边、下边)去了,你可用鼠标把它们拖出来。

    2) 主窗口被称为"Program Results window"。 这窗口在左上。

    3) 右边的窗口主要是显示主窗口的一些详细内容,很多重要详细东西都在此,你有可能看到的序列号就在这里。

    在你停止程序后,你应该分析SmartCheck给出的信息,你必需选上相关的行,并选择"View" "Show All Events"。你需要VB介绍这课相关知识了解各比较方法和断点函数。

    --------------------------------------------------------------------------------

    SmartCheck 常见信息

    我用粗体表示在SmartCheck中显示的内容。

    --------------------------------------------------------------------------------

    ****.Text 如. Text1.Text

    如果你点击前面的“+”符号,你将看到其它的几行,寻找SysAllocStringLen。

    如. SysAllocStringLen(PTR:00000000 DWORD:00000029) returns LPVOID:410584

    解释:

    从文本框取出你键入字符并放置在内存00410584处。这意味着你可不用SOFTICE下的"s 30 l" 查找字符串命令。我们来验证一下:确信你的SOFTICE己运行,然后在SmartCheck下再次运行程序。当你在SmartCheck下的程序正在运行时,在适当机会用SOFTICE中断(CTRL+D),下命令"d 00410584"。如果你做的正确的话,你将在内存里看到你键入的字符。 如果你的程序没在SmartCheck下运行,你可能在此地址看不到,因为内存可能改变了。或内存“释放”。

    --------------------------------------------------------------------------------

    __vbasrtcmp(String:"zzzzz"String:"yyyyy")returns DWORD:0

    解释:

    __vbastrcmp -- 用来比较字符串 如. "zzzzz" and "yyyyy"

    注意:你可能会看到正确序列号和你输入字符串比较。

    returns DWORD:0 -- 在SOFTICE里,你将看到比较后, eax = 0

    --------------------------------------------------------------------------------

    __vbafreestr(LPBSTR:0063F3F0)

    点击上面 "+" 寻找SysFreeString

    如. SysFreeString(BSTR:00410584)

    解释:

    字符串在内存00410584 被清除。

    --------------------------------------------------------------------------------

    __vbaVarCopy(VARIANT:String:"12345" VARIANT:Empty) returns DWORD:63FA30

    点击前面的 "+" 号寻找SysAllocStringByteLen

    如. SysAllocStringByteLen(LPSTR:004023F0 DWORD:0000000C) returns LPVOID:4103CC

    解释:

    "12345"被复制到内存 004103CC

    这类似 __vbaVarMove

    --------------------------------------------------------------------------------

    __vbaVarForInit(VARIANT:Empty PTR:0063F920 PTR:0063F91.....)

    解释:

    移动到上面,为了下一个循环

    通常在它下面 __vbaVarForNext 用法与其一样.

    --------------------------------------------------------------------------------

    Mid(VARIANT:String:"abcdefg" long:1 VARIANT:Integet:1)

    解释:

    从位置1得到字符串"abcdefg"第一个字符,

电脑资料

(看雪教程) 第7章第3节》(https://www.unjs.com)。

    点击上面的 "+"号寻找 SysAllocStringByteLen

    如. SysAllocStringByteLen(LPSTR:004103F0 DWORD:00000002) returns LPVOID:410434

    解释:

    "a"将被复制到内存00410434

    它后面通常跟随 __vbaStrVarVal(VARIATN:String"a") returns DWORD:410434

    --------------------------------------------------------------------------------

    Asc(String:"T") returns Integer:84

    解释:

    得到“T”的ASCII码十进制 84

    --------------------------------------------------------------------------------

    SysFreeString(BSTR:004103F0)

    解释:

    释放内存位置:004103F0

    这些对我们特别有用,因为当你点击它们,看右边窗口,你将看到被释放的字符串。此时正确的序列号和密码有可能在此。

    --------------------------------------------------------------------------------

    __vbaVarCat(VARIANT:String:"aa" VARIANT:String:"bb") returns DWORD:63F974

    解释:

    连接 "bb" 和"aa"形成"aabb"

    --------------------------------------------------------------------------------

    __vbaFreeVar(VARIANT:String:"abcdefg")

    点击 "+"寻找SysFreeString

    例. SysFreeString(BSTR:0041035C)

    解释:

    从内存 0041035C释放 "abcdefg"

    这儿,点击这行在右边有可能发现你所要的东西。

    --------------------------------------------------------------------------------

    __vbaVarTstEq(VARIANT:**** VARIANT:****) returns DWORD:0

    解释:

    __vbaVarTstEq 通常用来比较变量.如果它们不一样 DWORD=0 (so eax=0)

    如果它们一样 DWORD将为FFFFFFFF (so eax=FFFFFFFF)

    类似__vbaVarCmpEq

    --------------------------------------------------------------------------------

    Len(String:"Cracker") returns LONG:7

    解释:

    得到字符串 "Cracker" 的长度为7

    --------------------------------------------------------------------------------

    ****.Text <-- "Wrong! Try Again!!" (String)

    解释:

    在文本框中显示g "Wrong! Try Again!!"

    --------------------------------------------------------------------------------

    __vbaVarAdd(VARIANT:Integer:2 VARIANT:Integer:97) returns .....

    解释:

    2+97=97返回99

    But if both are Strings instead of Integers you will get 297 instead.

    --------------------------------------------------------------------------------

    __vbaVarDiv(VARIANT:Integer:97 VARIANT:Long:1) returns.....

    解释:

    97除以1

    --------------------------------------------------------------------------------

    __vbaVarMul(VARIANT:String:"1" VARIANT:String:"2") returns ...

    Explanation:

    1乘2

    --------------------------------------------------------------------------------

    __vbaVarSub(VARIANT:String:"2" VARIANT:String:"34") returns ...

    解释:

    "34"-"2" 返回 32

    --------------------------------------------------------------------------------

    MsgBox(VARIANT:String:"Nope! That's not right" Integer:0 VARIANT:String:"Wrong"VARIANT.....)

    解释:

    创建一个消息框,标题是 "Wrong" 内容为 "Nope! That's not right"

    看雪整理于2000/2/27

    (编辑:天命孤独)

最新文章