适合新手的160个creakme(三)
先跑一下,这个程序应该是有定时器,多久之后自动开启,测试一下输入,序列号以字母方式输入会出现类型不匹配,之后程序自动退出

但是如果以数字方式输入序列号,则会出现,Try Again,所以这里序列号应该是一个数字

直接找Try Again这个字符串的位置,同上一题,在IDA中还是找不到,所以看Ollydbg,在地址4086f9处,这里是前一部分的标号为
004086DB loc_4086DB
应该是从下面这句跳转过来的
.text:00408677 jz short loc_4086DB
验证一下,将00408677处的jz改成jnz,74改75,然后输入序列号111,则可以发现成功了

剩下的就是算法了。
从这个位置往前找,标志位应该是下面这句设置的
.text:00408665 test si, si
再往前找,有下面两句影响了si的值
.text:0040862E xor esi, esi
.text:00408653 neg esi
xor的操作由下面这段代码决定
.text:0040860A fnstsw ax
.text:0040860C test al, 0Dh ;低位为0Dh
.text:0040860E jnz loc_4087BF
.text: call ds:__vbaFpR8
.text:0040861A fcomp ds:dbl_401028
.text: fnstsw ax
.text: test ah, 40h ;也就是说ah不能为40h
.text: jz short loc_40862E
.text: mov esi,
.text:0040862C jmp short loc_408630
.text:0040862E ; ---------------------------------------------------------------------------
.text:0040862E
.text:0040862E loc_40862E: ; CODE XREF: .text:00408625↑j
.text:0040862E xor esi, esi ;不能走到这里,esi被清零后就会跳到错误路径
.text:
.text: loc_408630: ; CODE XREF: .text:0040862C↑j
往前找到判断函数为__vbaFpR8的返回值,它的高16位不能为40h,这个是浮点寄存器的值
__vbar8Str 将一个字符串转为双精度单精度浮点型(8个字节)的数值形式
.text:004085CE mov eax, [ebp-18h] ;可以看出函数局部变量值ebp-18h表示的是序列号字符串
.text:004085D1 push eax
.text:004085D2 call ds:__vbaR8Str ;此时参数为unicode编码字符串"111",也就是输入的序列号字符串
.text:004085D8 mov ecx, [ebp-1Ch] ;根据下面这个值又可以推测出这个地方局部变量的值
.text:004085DB fstp qword ptr [ebp-0E4h]
.text:004085E1 push ecx
.text:004085E2 call ds:__vbaR8Str ;此时参数为unicode编码字符串"4533559"
.text:004085E8 cmp dword_409000,
.text:004085EF jnz short loc_4085F9
.text:004085F1 fdivr qword ptr [ebp-0E4h]
.text:004085F7 jmp short loc_40860A
向上追到这里就可以分析出ebp-18h和ebp-1ch这两个局部变量的值,后面的浮点运算就是比较这两个值,只不过换了形式而已。直接将4533559作为序列号输入,发现直接就可以输出正确结果了。
关于字符串"4533559"的来源就是计算序列号的算法的结果。
过一下整个这段函数,其实只需要关注vbaR8Str、__vbaStrMove、__vbaStrR8这几个函数,其他函数可以直接过掉,整个流程就是不断的将字符串转成浮点数,进行操作之后又转回字符串。
整个算法流程如下:






适合新手的160个creakme(三)的更多相关文章
- 适合新手的160个creakme(四)
这题没有什么特殊字符串,Delphi写的,使用DeDeDark分析一下,找到几个特殊的事件 一个是KeyUp 一个是chkcode 还有就是中间区域的单击或是双击事件 直接跟进去这几个函数,然后找比较 ...
- 适合新手的160个creakme(二)
先跑一下,然后找出关键字符串 关键字符串是You Get Wrong和Try Again,不过IDA好像识别不出来这个字符串,在Ollydbg中右键Search For,寻找所有字符串,可以找到这些字 ...
- 适合新手的160个creakme(一)
先跑一下 直接使用这个字符串去check,发现提示信息有关键字符串 CODE:0042FB80 00000021 C Sorry , The serial is incorect ! 找到这个字符串的 ...
- 适合新手小白的UI学习路线完整版
UI设计是很多年轻人活着想转行学习的人的新职业目标,越来越多的人看到UI设计良好的就业发展前景,纷纷投入到UI设计的大军中来,想学习UI设计,很多小白并不知道从何开始学起,用什么样的方法去学习,所以今 ...
- JavaSwing仿QQ登录界面,注释完善,适合新手学习
使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...
- 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)
本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...
- 最适合和最不适合新手使用的几款 Linux 发行版
大多数知名的Linux发行版都属于"比较容易使用"这一类.一些观察人士可能会驳斥这个观点,但事实上,说到Linux,大多数并非从事IT或软件开发工作的人会被最容易的使用体验所吸引. ...
- git和github新手安装使用教程(三步入门)
git和github新手安装使用教程(三步入门) 对于新手来说,每次更换设备时,github的安装和配置都会耗费大量时间.主要原因是每次安装时都只关心了[怎么做],而忘记了记住[为什么].本文从操作的 ...
- python环境搭建-requests的简单安装(适合新手)
安装完python之后,一定要记住安装后的路径.这是我当前的路径. 下面是requests的安装步骤: 我们这里直接用pip安装(这样比较适合新手),新版python自带pip,python3.6.1 ...
随机推荐
- JavaWeb_(Spring框架)认识Spring中的aop
1.aop思想介绍(面向切面编程):将纵向重复代码,横向抽取解决,简称:横切 2.Spring中的aop:无需我们自己写动态代理的代码,spring可以将容器中管理对象生成动态代理对象,前提是我们对他 ...
- 安装openssh-server
以前在服务器上装过openssh-server,今天突然想把台式机也打开ssh服务,结果忘了咋弄,稍微百度了一下就弄好了,备忘一下,以后就不用各种百度了. 第一步,安装openssh-server( ...
- docker 命令 记录
获取指定容器的ip docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_nam ...
- Flutter设置Container的最大最小宽高
Flutter中设置Container宽高可直接通过width和height属性来设置:如下 Container( width: 100, height: 100, color: Colors.red ...
- win10+mysql8.0安装
一.下载 mysql8.0 windows zip包下载地址: https://dev.mysql.com/downloads/mysql/ 1540951981(1).png 二.安装 1.解压 ...
- 如何卸载oracle11g
方法/步骤 .关闭oracle所有的服务.可以在windows的服务管理器中关闭: 打开注册表:regedit 打开路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentCo ...
- 使用vagrant一键部署本地php开发环境(一)
一:我们为什么需要用这玩意 我们在开发中经常会面临的问题:环境不一致,有人用Mac有人用Windos还有几个用linux的,而我们的服务器都是linux. 在我本地是可以的啊,我测了都,没有问题 ...
- hadoop1.2.1安装配置
原文地址 环境:ubuntu13 使用的用户为普通用户.如:用户ru jdk安装略 1.安装ssh (1) sudo apt-get install openssh-server (2)配置ssh面密 ...
- python一个文件里面多个函数同时执行(多进程的方法,并发)
#coding=utf-8 import timefrom selenium import webdriverimport threading def fun1(a): print a def fun ...
- forge k8s/kubernetes ci/cd 最佳实践
forge的官网是: http://forge.sh forge工具是一个部署工具, 将你的应用自动更新到kubernets集群中, 只需要配置简洁的配置文件和模板即可. 其它的就交给forge, 它 ...