先跑一下,然后找出关键字符串

关键字符串是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(二)的更多相关文章

  1. 适合新手的160个creakme(四)

    这题没有什么特殊字符串,Delphi写的,使用DeDeDark分析一下,找到几个特殊的事件 一个是KeyUp 一个是chkcode 还有就是中间区域的单击或是双击事件 直接跟进去这几个函数,然后找比较 ...

  2. 适合新手的160个creakme(三)

    先跑一下,这个程序应该是有定时器,多久之后自动开启,测试一下输入,序列号以字母方式输入会出现类型不匹配,之后程序自动退出 但是如果以数字方式输入序列号,则会出现,Try Again,所以这里序列号应该 ...

  3. 适合新手的160个creakme(一)

    先跑一下 直接使用这个字符串去check,发现提示信息有关键字符串 CODE:0042FB80 00000021 C Sorry , The serial is incorect ! 找到这个字符串的 ...

  4. JavaSwing仿QQ登录界面,注释完善,适合新手学习

    使用说明: 这是一个java做的仿制QQ登录界面,界面仅使用一个类, JDK版本为jdk-11 素材包的名字为:素材(下载)请在项目中新建一个名字为“素材”的文件夹. 素材: https://pan. ...

  5. 关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手

    关于富文本编辑器ueditor(jsp版)上传文件到阿里云OSS的简单实例,适合新手   本人菜鸟一枚,最近公司有需求要用到富文本编辑器,我选择的是百度的ueditor富文本编辑器,闲话不多说,进入正 ...

  6. 适合新手小白的UI学习路线完整版

    UI设计是很多年轻人活着想转行学习的人的新职业目标,越来越多的人看到UI设计良好的就业发展前景,纷纷投入到UI设计的大军中来,想学习UI设计,很多小白并不知道从何开始学起,用什么样的方法去学习,所以今 ...

  7. 适合新手:从零开发一个IM服务端(基于Netty,有完整源码)

    本文由“yuanrw”分享,博客:juejin.im/user/5cefab8451882510eb758606,收录时内容有改动和修订. 0.引言 站长提示:本文适合IM新手阅读,但最好有一定的网络 ...

  8. 最适合和最不适合新手使用的几款 Linux 发行版

    大多数知名的Linux发行版都属于"比较容易使用"这一类.一些观察人士可能会驳斥这个观点,但事实上,说到Linux,大多数并非从事IT或软件开发工作的人会被最容易的使用体验所吸引. ...

  9. python环境搭建-requests的简单安装(适合新手)

    安装完python之后,一定要记住安装后的路径.这是我当前的路径. 下面是requests的安装步骤: 我们这里直接用pip安装(这样比较适合新手),新版python自带pip,python3.6.1 ...

随机推荐

  1. Ubuntu 14.04 64bit中永久添加DNS的方法

    第一种方法修改如下文件,默认是空的sudo vim /etc/resolvconf/resolv.conf.d/base在里面加入你想添加的DNS服务器,一行一个nameserver 114.114. ...

  2. ie中打印的问题

    一般正常的情况下使用window.print();各个浏览器都可以调用出打印功能来但是ie有个坑就是如果页面在iframe里的话打印出来就是错的页面所以在这里要这样写: var agent = nav ...

  3. Servlet中接收和返回数据

    public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest re ...

  4. err="etherbase address must be explicitly specified"

    如果要初始化区块链的话就用创始区块   如果通过创世区块来初始化区块链的话,首先需要一个初始化区块链的json文件,如下. { "config": { "chainId& ...

  5. SQL-W3School-高级:SQL UNIQUE 约束

    ylbtech-SQL-W3School-高级:SQL UNIQUE 约束 1.返回顶部 1. SQL UNIQUE 约束 UNIQUE 约束唯一标识数据库表中的每条记录. UNIQUE 和 PRIM ...

  6. SQL-W3School-高级:SQL BETWEEN 操作符

    ylbtech-SQL-W3School-高级:SQL BETWEEN 操作符 1.返回顶部 1. BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围. BETWEE ...

  7. CentOS 7.4 发布下载,安全稳定的Linux发行版

    CentOS 7.4 发布了.CentOS 是 RHEL(Red Hat Enterprise Linux)源代码再编译的产物,而且在 RHEL 的基础上修正了不少已知的 Bug ,相对于其他 Lin ...

  8. 利用mysql数据库中的TMD表修复“is marked as crashed and last (automatic?) repair failed”的错误 Database query error

    ===========================测试成功============================================= 1.页面出现错误:Database query ...

  9. RabbitMQ简单Java示例——生产者和消费者

    添加Maven依赖: 使用rabbitmq-client的最新Maven坐标: <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp ...

  10. 深入理解channels - kavya Joshi

    From: 翻译blog地址 作者:大桥下的蜗牛 这是GopherCon 2017大会上,go开发专家 kavya Joshi 的一篇关于 channel 的演讲,讲的通俗易懂. Understand ...