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

关键字符串是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. python 安装 pyHook

    下载网站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyhook 查看python版本 C:\Users\k\Desktop\file_trans> ...

  2. c++ 实现等待5s

    #include <stdio.h> /* puts, printf */ #include <time.h> /* time_t, struct tm, time, loca ...

  3. docker 安装redis 注意事项

    一. redis配置文件修改(重要) ~/redis.conf 中daemonize=NO.非后台模式,如果为YES 会的导致 redis 无法启动,因为后台会导致docker无任务可做而退出. 三  ...

  4. oracle清除归档

    清除Oracle归档日志命令echo -e 'delete noprompt archivelog ALL COMPLETED BEFORE '\'SYSDATE-${DELETE_ARCHIVELO ...

  5. 通过xshell在本地win主机和远程linux主机传输文件

    1.下载和安装xshell此处不再介绍 2.安装lrzsz的软件 yum install lrzsz 3.通过xshell上传文件 只需要在XShell的菜单中点击File – Transfer – ...

  6. Linux 配置eth0网卡

    缘由: 最近要复习docker,电脑没有centos7,于是下载了一个最新版的centos7,迫于强迫症没有eth0网卡,为了将ens33改为eth0于是寻求方法. 1.编辑网卡的配置文件 vi /e ...

  7. Sublime 添加∕删除右键菜单.bat

    Sublime 添加∕删除右键菜单.bat @ECHO OFF & PUSHD %~DP0 & TITLE >NUL 2>&1 REG.exe query &quo ...

  8. logback 和 log4j对比,及相关配置

    Logback 一.logback的介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和log ...

  9. iOS- UITextView禁止Emoji表情

    UITextView代理方法:判断 -(void)textViewDidEndEditing:(UITextView *)textView{        if ([self stringContai ...

  10. iOS-reveal 的使用

    Reveal是一个iOS程序界面调试工具.使用Reveal,我们可以在iOS开发时动态地查看和修改应用程序的界面. 对于动态或复杂的交互界面,手写UI是不可避免的.通过Reveal,我们可以方便地调试 ...