适合新手的160个creakme(二)
先跑一下,然后找出关键字符串


关键字符串是You Get Wrong和Try Again,不过IDA好像识别不出来这个字符串,在Ollydbg中右键Search For,寻找所有字符串,可以找到这些字符串,好像是unicode码,可能IDA没有办法识别
然后定位到代码
.text:004025E5 push offset aYouGetWrong ; "You Get Wrong"
然后定位到调用代码,这里的跳转如果被忽略那么就可以直接跳转到正确结果
.text:0040258B jz short loc_4025E5
直接在Ollydbg中改写这个地方的指令,右键binary->edit,将这两个指令改成nop

然后就ok了

上面的修改说明了关键判断确实是在这里
看看这部分的代码
.text: loc_402510: ; CODE XREF: .text:004024FC↑j
.text: mov eax, [ebp-18h] ;指向UNICODE "Type In Your Serial"
.text: mov ecx, [ebp-1Ch] ;指向UNICODE "1658111"
.text: mov edi, ds:__vbaStrCat
.text:0040251C push eax
.text:0040251D push offset aAka ; "AKA-"
.text: push ecx
.text: call edi ; __vbaStrCat ;应该是VBA里面的字符串拼接函数,参数都是通过栈来传递的,返回值为AKA-1658111
.text: mov ebx, ds:__vbaStrMove
.text:0040252B mov edx, eax
.text:0040252D lea ecx, [ebp-20h]
.text: call ebx ; __vbaStrMove
.text: push eax
.text: call ds:__vbaStrCmp ;比较函数,比较的是"AKA-1658111"和序列号字符串
.text: mov esi, eax ;返回值为1,赋值给esi
.text:0040253B lea edx, [ebp-20h]
.text:0040253E neg esi ;求补运算,这里esi等于全f
.text: lea eax, [ebp-18h]
.text: push edx
.text: sbb esi, esi
.text: lea ecx, [ebp-1Ch]
.text: push eax
.text:0040254A inc esi ;加1变为0
.text:0040254B push ecx
.text:0040254C push
.text:0040254E neg esi ;求补还是0
.text: call ds:__vbaFreeStrList
.text: add esp, 10h
.text: lea edx, [ebp-28h]
.text:0040255C lea eax, [ebp-24h]
.text:0040255F push edx
.text: push eax
.text: push
.text: call ds:__vbaFreeObjList
.text: add esp, 0Ch
.text:0040256C mov ecx, 80020004h
.text: mov eax, 0Ah
.text: mov [ebp-64h], ecx
.text: test si, si ;esi为0,test设置了zf标志位
.text:0040257C mov [ebp-6Ch], eax
.text:0040257F mov [ebp-54h], ecx
.text: mov [ebp-5Ch], eax
.text: mov [ebp-44h], ecx
.text: mov [ebp-4Ch], eax
.text:0040258B jz short loc_4025E5 ;所以这里ZF标志位是1,要进行跳转
.text:0040258D push offset aYouGetIt ; "You Get It"
.text: push offset asc_401B9C ; "\r\n"
.text: call edi ; __vbaStrCat
.text: mov edx, eax
.text:0040259B lea ecx, [ebp-18h]
.text:0040259E call ebx ; __vbaStrMove
.text:004025A0 push eax
.text:004025A1 push offset aKeygenItNow ; "KeyGen It Now"
大致过一遍上面的代码,可以知道只需要序列号等于AKA-1658111就可以让比较函数返回0,然后通过后面的检测,由于AKA是固定字符串,剩下的就是看1658111这个串是怎么来的。
然后再往前找ebp-1ch在哪里被引用了
004023F3这个位置,ebp-1ch被修改为了用户名字符串,接着402415处又将该字符串作为参数调用长度,返回0x11,长度值。00402420处将长度值乘以17CFB,0040242D调用了rtcAnsiValueBstr函数,参数为用户名,返回第一个字符,该函数执行之后,eax值为0x54,T的ascll码,然后加上前面长度值乘以17CFB的结果,位0x194cff,0040243F将这个值作为参数调用了__vbaStrI4函数,这个函数返回之后,eax指向字符串“1658111”,这个字符串就来了,所以这应该是数字转字符串的函数。
所以最后的算法应该是用户名的长度乘以17CFB加上用户名的第一个字符,结果转成10进制,再转成字符串,加上前缀"AKA-"。
最后,可以改最后一个条件的判断码,来实现跳转转移,JE改成JNE,74改75

适合新手的160个creakme(二)的更多相关文章
- 适合新手的160个creakme(四)
这题没有什么特殊字符串,Delphi写的,使用DeDeDark分析一下,找到几个特殊的事件 一个是KeyUp 一个是chkcode 还有就是中间区域的单击或是双击事件 直接跟进去这几个函数,然后找比较 ...
- 适合新手的160个creakme(三)
先跑一下,这个程序应该是有定时器,多久之后自动开启,测试一下输入,序列号以字母方式输入会出现类型不匹配,之后程序自动退出 但是如果以数字方式输入序列号,则会出现,Try Again,所以这里序列号应该 ...
- 适合新手的160个creakme(一)
先跑一下 直接使用这个字符串去check,发现提示信息有关键字符串 CODE:0042FB80 00000021 C Sorry , The serial is incorect ! 找到这个字符串的 ...
- JavaSwing仿QQ登录界面,注释完善,适合新手学习
使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...
- 关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手
关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手 本人菜鸟一枚,最近公司有需求要用到富文本编辑器,我选择的是百度的ueditor富文本编辑器,闲话不多说,进入正 ...
- 适合新手小白的UI学习路线完整版
UI设计是很多年轻人活着想转行学习的人的新职业目标,越来越多的人看到UI设计良好的就业发展前景,纷纷投入到UI设计的大军中来,想学习UI设计,很多小白并不知道从何开始学起,用什么样的方法去学习,所以今 ...
- 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)
本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...
- 最适合和最不适合新手使用的几款 Linux 发行版
大多数知名的Linux发行版都属于"比较容易使用"这一类.一些观察人士可能会驳斥这个观点,但事实上,说到Linux,大多数并非从事IT或软件开发工作的人会被最容易的使用体验所吸引. ...
- python环境搭建-requests的简单安装(适合新手)
安装完python之后,一定要记住安装后的路径.这是我当前的路径. 下面是requests的安装步骤: 我们这里直接用pip安装(这样比较适合新手),新版python自带pip,python3.6.1 ...
随机推荐
- Solr 7.X 安装和配置--Linux篇
1. 关闭防火墙和Selinux 2. 安装所需环境JDK 3. 下载Solr7.4版本 4. 下载并配置solr的中文分词器IK Analyzer 5. 启动Solr 6. 注意事项以及说明 1. ...
- oracle查询消耗服务器资源SQL语句
1.查找最近一天内,最消耗CPU的SQL语句 SELECT ASH.INST_ID, ASH.SQL_ID, (SELECT VS.SQL_TEXT FROM GV$SQLAREA VS WHERE ...
- 走进JavaWeb技术世界1:Web后端与J2EE的由来
转自:微信公众号 码农翻身 这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求 ...
- Java实现单例的5种方式
1. 什么是单例模式 单例模式指的是在应用整个生命周期内只能存在一个实例.单例模式是一种被广泛使用的设计模式.他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存. 2. 单例模 ...
- 利用python获取自己的qq群成员信息
利用python获取自己的qq群成员信息! 首先说明一下需要使用的工具以及技术:python3 + selenium selenium安装方法:pip install selenium 前提:获取自己 ...
- Python 自学笔记(一)
1.打印函数 1-1.print()函数 1-1-1.引号的用法 一.单引号与双引号:直接输出 二.三引号:保留原来的格式 1-2.转义字符 转义字符是一种特殊的字符常量,在编程语言中,我们用转义字符 ...
- 实时流Streaming大数据:Storm,Spark和Samza
当前有许多分布式计算系统能够实时处理大数据,这篇文章是对Apache的三个框架进行比较,试图提供一个快速的高屋建瓴地异同性总结. Apache Storm 在Storm中,你设计的实时计算图称为top ...
- 001-多线程-JUC线程池-线程池架构-Executor、ExecutorService、ThreadPoolExecutor、Executors
一.概述 1.1.线程池架构图 1. Executor 它是"执行者"接口,它是来执行任务的.准确的说,Executor提供了execute()接口来执行已提交的 Runnable ...
- Windows10 64位安装DB2数据库
安装前准备 : 系统:Windows10 64位 DB2 v9.5下载地址(迅雷):http://big3.ddooo.com/db2_93661.rar 选择安装包解压位置,并复制记住: 去到解压的 ...
- 深入理解Flink ---- End-to-End Exactly-Once语义
上一篇文章所述的Exactly-Once语义是针对Flink系统内部而言的. 那么Flink和外部系统(如Kafka)之间的消息传递如何做到exactly once呢? 问题所在: 如上图,当sink ...