VB 调试之优先创建窗体

使用工具

  • OllyDbg修改版,简称OD
  • OD插件均来自互联网;
  • CrackMe来自互联网,仅供学习使用;
  • 文中特殊数字均是HEX,为了书写方便采用DEC

分析思路

  1. 首先运行软件,了解一下程序:

    运行程序

    • 运行程序后,首先出现一个倒计时 5 秒的窗体;
    • 同时 Continue 按钮处于禁用状态;
    • 倒计时结束后,Continue 按钮启用,并在点击后可进入主窗体;
  2. CrackMe倒入OD,开始分析:

    • 这里的倒计时窗体可以算得上是NAG窗口了,很是烦人啊有木有;

    • 如何跳过烦人的窗口直接进入主程序呢?

      1. 倒计时结束后,点击 Continue ,程序跳转进入主程序;

      2. 程序的跳转肯定发生在CODE段;

      3. 在倒计时结束后,到内存窗口CODE段设置内存访问断点,然后在程序界面点击 Continue:

        内存访问断点

      4. 程序中断,可以看到接下来要执行 JMP,根据程序的逻辑可以确定,这个 JMP 就是跳转到主窗体的:

        跳转到主窗体

        相邻的还有 3 个 JMP,给它们全部设置断点,看看它们分别要做的事情;

      5. 重载并运行程序,程序中断在第三个 JMP,根据程序逻辑,程序初始运行后,会先展示一个NAG窗口,F9运行程序,果然不出所料;

      6. 接着运行程序,程序中断在第四个 JMP,共计中断 5 次,不用说,这个是倒计时跳转,同时,最后一次中断后,Continue 按钮启用;

      7. 点击 Continue 按钮,程序中断在第一个 JMP 位置,四个跳转已知其三,第二个 JMP 肯定是 Exit,最后,分析结果如图:

        分析

      8. 既然已经知道了第一个 JMP 是跳转至程序主窗体的,那能否让程序刚运行就跳转到主窗体,这样是不是就绕过了NAG窗口?值得一试:

        NoNAG

        将修改保存到文件,保存方法不再赘述,然后运行程序,Perfect!

  3. 4C 法

    4C 法对于单纯的本地验证应该比较好用,但是基于网络验证可能就不是很好用了,尽管可以到达程序主窗口,但功能也许还是不可用;

    还是这个CrackMe,将CrackMe倒入OD

    第一行

    VB 程序有个特点:入口处都是一个 PUSH 指令,然后一个 CALL 指令;

    发现第一行是一个 PUSH 指令,4C 法就是将 PUSH 的地址加上4C,然后在数据窗口中跟随这个地址;

    加上 4C

    Ctrl + G跟随地址后,发现这个地址中存储着另外一个地址,选择存储的地址,然后右键选择数据窗口中跟随(DWORD)

    跟随 4 字节地址

    跟踪地址来到数据窗口:

    结构类似

    这里可以看到两块类似的数据,每块 50(十六进制)个字节的长度,每块数据的第 24(十六进制)个字节处都有一个标志(第一个是 00,第二个是 01);

    该标志指定了代码块(也就是程序启动后要加载的窗体)出现的顺序,先加载 00,也就是我们要去掉的 NAG 窗口,再加载 01,也就是主窗口;

    所以,为了去掉烦人的窗口,将此处的两个标志的值互换,即:00 改 01,01 改 00,这样的话 NAG 窗口就永远也没机会出现了,最后将修改保存到文件;

    互换值

    接着,运行保存的文件:

    reverse

    直接出现程序主窗体,NAG 窗口被去除;