环境
Windows xp sp3

工具
exeinfope
OllyDBG

查壳
无壳的VB程序

测试
运行程序后出现Nag窗口,所以这次的目标是除Nag窗口和找到serial

程序运行后弹出Nag窗口,并且等待5秒后按钮的标题改成“Continue..”,点击后才会弹出输入serial的窗口。

字符串搜索可以一下子知道serial的内容:

00405721   .  68 A4264000   push CodeZero.004026A4                   ;  UNICODE "55555"
00405726   .  E8 3BBAFFFF   call <jmp.&MSVBVM50.__vbaStrCmp>
0040572B   .  8BF0          mov esi,eax
0040572D   .  8D4D E8       lea ecx,dword ptr ss:[ebp-0x18]
00405730   .  F7DE          neg esi
00405732   .  1BF6          sbb esi,esi
00405734   .  46            inc esi
00405735   .  F7DE          neg esi
00405737   .  E8 18BAFFFF   call <jmp.&MSVBVM50.__vbaFreeStr>
0040573C   .  8D4D E4       lea ecx,dword ptr ss:[ebp-0x1C]
0040573F   .  E8 0ABAFFFF   call <jmp.&MSVBVM50.__vbaFreeObj>
00405744   .  6A 0A         push 0xA
00405746   .  66:3BF3       cmp si,bx
00405749   .  58            pop eax
0040574A   .  B9 04000280   mov ecx,0x80020004
0040574F   .  6A 08         push 0x8
00405751   .  894D AC       mov dword ptr ss:[ebp-0x54],ecx
00405754   .  5E            pop esi
00405755   .  894D BC       mov dword ptr ss:[ebp-0x44],ecx
00405758   .  8945 A4       mov dword ptr ss:[ebp-0x5C],eax
0040575B   .  8945 B4       mov dword ptr ss:[ebp-0x4C],eax
0040575E   .  C745 8C 68264>mov dword ptr ss:[ebp-0x74],CodeZero.004>;  UNICODE "VB Crack-Me 1.0 by CodeZero"
00405765   .  8975 84       mov dword ptr ss:[ebp-0x7C],esi
00405768   .  8D55 84       lea edx,dword ptr ss:[ebp-0x7C]
0040576B   .  8D4D C4       lea ecx,dword ptr ss:[ebp-0x3C]
0040576E   .  74 2A         je XCodeZero.0040579A
00405770   .  E8 CDB9FFFF   call <jmp.&MSVBVM50.__vbaVarDup>
00405775   .  8D55 94       lea edx,dword ptr ss:[ebp-0x6C]
00405778   .  8D4D D4       lea ecx,dword ptr ss:[ebp-0x2C]
0040577B   .  C745 9C B4264>mov dword ptr ss:[ebp-0x64],CodeZero.004>;  UNICODE "Congratulations! you've really made it :-)"
00405782   .  8975 94       mov dword ptr ss:[ebp-0x6C],esi
00405785   .  E8 B8B9FFFF   call <jmp.&MSVBVM50.__vbaVarDup>
0040578A   .  8D45 A4       lea eax,dword ptr ss:[ebp-0x5C]
0040578D   .  50            push eax
0040578E   .  8D45 B4       lea eax,dword ptr ss:[ebp-0x4C]
00405791   .  50            push eax
00405792   .  8D45 C4       lea eax,dword ptr ss:[ebp-0x3C]
00405795   .  50            push eax
00405796   .  6A 40         push 0x40
00405798   .  EB 28         jmp XCodeZero.004057C2
0040579A   >  E8 A3B9FFFF   call <jmp.&MSVBVM50.__vbaVarDup>
0040579F   .  C745 9C 10274>mov dword ptr ss:[ebp-0x64],CodeZero.004>;  UNICODE "Invalid unlock code, please try again."
004057A6   >  8D55 94       lea edx,dword ptr ss:[ebp-0x6C]
004057A9   .  8D4D D4       lea ecx,dword ptr ss:[ebp-0x2C]
004057AC   .  8975 94       mov dword ptr ss:[ebp-0x6C],esi
004057AF   .  E8 8EB9FFFF   call <jmp.&MSVBVM50.__vbaVarDup>

字符串明文比较

剩下来就是去除Nag窗口了:
OD打开程序后让程序运行起来,等显示“continue..”后对.text段下内存访问断点,然后让程序运行,多按几次F9就可以来到这里。

00402330   .  816C24 04 570>sub dword ptr ss:[esp+0x4],0x57
00402338   .  E9 85360000   jmp CodeZero.004059C2       ; 用来显示输入serial窗口
0040233D   .  816C24 04 330>sub dword ptr ss:[esp+0x4],0x33
00402345      E9 7B370000   jmp CodeZero.00405AC5       ; 用来显示Nag窗口的“5”
0040234A   .  816C24 04 3F0>sub dword ptr ss:[esp+0x4],0x3F
00402352      E9 77380000   jmp CodeZero.00405BCE       ; 用来显示Nag窗口的“4”
00402357   .  816C24 04 430>sub dword ptr ss:[esp+0x4],0x43
0040235F      E9 73390000   jmp CodeZero.00405CD7       ; 用来显示Nag窗口的“3”
00402364   .  816C24 04 470>sub dword ptr ss:[esp+0x4],0x47
0040236C      E9 6F3A0000   jmp CodeZero.00405DE0       ; 用来显示Nag窗口的“2”
00402371   .  816C24 04 4B0>sub dword ptr ss:[esp+0x4],0x4B
00402379      E9 6B3B0000   jmp CodeZero.00405EE9       ; 用来显示Nag窗口的“1”
0040237E   .  816C24 04 530>sub dword ptr ss:[esp+0x4],0x53
00402386      E9 673C0000   jmp CodeZero.00405FF2       ; 用来显示Nag窗口的“continue..”

会发现即使在上面的指令里下了断点也无法阻挡Nag窗口的出现,表面Nag窗口的指令比这些还要早就执行了。

观察这些jmp所跳到的地方,发现[004059C2]是最小的,如果跟到[004059C2],会发现这段指令上面还有很多指令。

0040595C  |.  57            push edi
0040595D  |.  50            push eax
0040595E  |.  E8 F7B7FFFF   call <jmp.&MSVBVM50.__vbaHresultCheckObj>
00405963  |>  833D 38704000>cmp dword ptr ds:[0x407038],0x0
0040596A  |.  75 0F         jnz XCodeZero.0040597B
0040596C  |.  68 38704000   push CodeZero.00407038
00405971  |.  68 B01D4000   push CodeZero.00401DB0
00405976  |.  E8 B5B7FFFF   call <jmp.&MSVBVM50.__vbaNew2>
0040597B  |>  8B35 38704000 mov esi,dword ptr ds:[0x407038]
00405981      6A FF         push -0x1
00405983      56            push esi
00405984      8B06          mov eax,dword ptr ds:[esi]
00405986      FF90 BC010000 call dword ptr ds:[eax+0x1BC]          ; 这里是生成Nag窗口的地方
0040598C  |.  85C0          test eax,eax
0040598E  |.  7D 11         jge XCodeZero.004059A1
00405990  |.  68 BC010000   push 0x1BC
00405995  |.  68 C8274000   push CodeZero.004027C8
0040599A  |.  56            push esi
0040599B  |.  50            push eax
0040599C  |.  E8 B9B7FFFF   call <jmp.&MSVBVM50.__vbaHresultCheckObj>
004059A1  |>  8365 FC 00    and [local.1],0x0
004059A5  |.  8B45 08       mov eax,[arg.1]
004059A8  |.  50            push eax
004059A9  |.  8B08          mov ecx,dword ptr ds:[eax]
004059AB  |.  FF51 08       call dword ptr ds:[ecx+0x8]
004059AE  |.  8B4D EC       mov ecx,[local.5]
004059B1  |.  8B45 FC       mov eax,[local.1]
004059B4  |.  5F            pop edi
004059B5  |.  5E            pop esi
004059B6  |.  64:890D 00000>mov dword ptr fs:[0],ecx
004059BD  |.  5B            pop ebx
004059BE  |.  C9            leave
004059BF  \.  C2 0400       retn 0x4
004059C2   >  55            push ebp                   ; 这里往下是生成输入serial窗口的地方
004059C3   .  8BEC          mov ebp,esp

[004059C2]上面的指令具体又是什么时候实现的呢?
可以找到大多数每段指令开始的地方看一看

push ebp

于是找到了这个:

0040583D  /> \55            push ebp

然后就跟到了这里来:

00401D88   .  816C24 04 330>sub dword ptr ss:[esp+0x4],0x33
00401D90   .  E9 5F380000   jmp CodeZero.004055F4    ; 这个是响应点击“Check”
00401D95   .  816C24 04 370>sub dword ptr ss:[esp+0x4],0x37
00401D9D   .  E9 9B3A0000   jmp CodeZero.0040583D    ; 这个是响应点击“About”
00401DA2   .  816C24 04 3F0>sub dword ptr ss:[esp+0x4],0x3F
00401DAA   .  E9 563B0000   jmp CodeZero.00405905    ; 这个是跳到生成Nag窗口的

现在就可以去除Nag窗口了,只需要把:

0040583D  /> \55            push ebp

改为:

00405905      C2 0400       retn 0x4

然后再将:

00402345      E9 7B370000   jmp CodeZero.00405AC5    ; 显示“5”

改为:

00402345     /E9 78360000   jmp CodeZero.004059C2    ; 显示输入serial的窗口

patch后就可以去除Nag窗口了。
而serial则是“55555”

160 - 25 CodeZero.1相关推荐

  1. Sizes of tensors must match except in dimension 1. Expected size 24 but got size 25 for tensor numbe

    在做图像分割的时候遇到了错误,错误如下: File "D:/segmentation/Pytorch-UNet-master/train.py", line 193, in < ...

  2. 【PHP源码分析】small内存规格的计算

    作者:李德 small内存分配计算bin_num 在PHP源码中,有一段对small内存规格的计算,具体在Zend/zend_alloc.c的zend_mm_small_size_to_bin函数中, ...

  3. Nginx Java环境(tomcat)支持

    作者:diege 时间:2012-04-25 操作系统:FreeBSD 动静态请求相分离的一个实例 一.安装软件 1.安装nginx 和JDK # cd  /usr/ports/www/nginx & ...

  4. 小猿圈html5教程之canvas绘制线段方法

    HTML5现在是时下较火的编程语言之一,但是对于怎么学习很多朋友都是不了解的,不知道从何处下手,针对以上内容小猿圈web前端讲师每天会分享一个web前端知识,希望对你的前端学习有一定的帮助,今天分享的 ...

  5. php从内存中获取源码_【PHP7源码分析】PHP内存管理

    作者: 顺风车运营研发团队 李乐 第一章 从操作系统内存管理说起 程序是代码和数据的集合,进程是运行着的程序:操作系统需要为进程分配内存:进程运行完毕需要释放内存:内存管理就是内存的分配和释放: 1. ...

  6. 《Python程序设计(第3版)》[美] 约翰·策勒(John Zelle) 第 4 章 答案

    判断对错 1.利用 grAphiCs.py 可以在 Python 的 shell 窗口中绘制图形. 2.传统上,图形窗口的左上角坐标为(0,0). 3.图形屏幕上的单个点称为像素. 4.创建类的新实例 ...

  7. 计算机 课题学科代码,学科分类与代码表课题.doc

    附件3 学科分类与代码表 110 数学 110.11 数学史 110.14 数理逻辑与数学基础 110.17 数论 110.21 代数学 110.24 代数几何学 110.27 几何学 110.31 ...

  8. OpenCV-Python 中文教程(搬运)目录

    OpenCV-Python 中文教程 OpenCV官方教程中文版(For Python) OpenCV2-Python-Tutorials 段力辉 译 说明:搬运自linux公社pdf文件,粗略搬运, ...

  9. 创建Hbase Hive外部表报错: Unable to determine ZooKeeper ensemble

    创建HBase的Hive外部表 1: create external table ttt(rowkey string,info map<string,string>)STORED BY ' ...

最新文章

  1. pandas将dataframe日期数据列的日期转化为日期当月第一天(每月1号)的日期并生成新的数据列(Setting date to beginning of month in dataframe)
  2. Google的TensorFlow,微软CNTK, Amazon 的MxNet,Facebook 的Caffe2, PyTorch,国内百度的PaddlePaddle...
  3. Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结
  4. PAT甲级1025 PAT Ranking:[C++题解]排序、结构体、排名
  5. docker 修改服务器,docker-修改容器挂载目录的3种方法小结
  6. 在N + 1场景中使用@NamedEntityGraph更有选择地加载JPA实体
  7. swift 打开第三方应用_iOS卡通人物帧动画入门9(大结局):番外篇-扩展第三方类
  8. 如果服务器开机显示NObootable,电脑开机出现“No bootable device”的解决办法
  9. android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...
  10. 新IT运维模式下,全栈溯源助你解应用性能监控难题
  11. vue-devtoools 调试工具安装
  12. Linux常用命令之:软件安装命令
  13. iOS解决融云的 attempt to delete row 0 from section 0 which only contains 0 rows before the update 问题
  14. 计算机类专业试题及答案,2010年计算机类专业试题及答案
  15. 小白学习MySQL - 表空间碎片整理方法
  16. 计算机京东账户安全退出,京东账号如果提示存在风险该怎么解除?
  17. 文学类的论文真的不需要数据么?
  18. js实现table或ul的自动滚动
  19. 关于虚拟机的十个基本小技巧
  20. 工作心得之接口数据同步

热门文章

  1. 由于业务需求,我是如何在需要页面添加悬浮按钮进行切换并添加水印的
  2. 程序员赚钱资源汇总,结合自己亲身经历
  3. c++ 经典代码_C语言经典100题(31)
  4. suse linux安装rpm包,linux – 如何为Suse创建RPM
  5. React组件实现越级传递属性
  6. 初学 Ajax(涉及 php)
  7. 精心挑选的23款美轮美奂的 jQuery 图片特效插件
  8. 两天学会css基础(一)
  9. 20080408 - VS2003 中 Jscript 文件中文乱码问题
  10. Linux历史,安装,分区,版本