调查信息

拿到首先用exeinfope来看看:

image-20231109215459948

  • 没有壳
  • Delphi 写的

运行来看看:

当打开的时候首先是这个界面:说明等会需要将这里给nop掉,需要将这个界面给kill掉

image-20231109215612350

然后是:

image-20231109215826451

有2个Serial

第一个是:用户名和序列号

第二个是:只用序列号

大致的看一看这个程序它是在干什么的。

关掉第一个窗口

首先我们需要破解的是:将第一个窗口给关掉【在运行的时候不会弹第一个窗口】

我们通过关键字:hello you have to kill me 来进行定位。

我们用x32dbg来打开,然后寻找一下字符串:

image-20231109220136156

通过关键字进行定位:

image-20231109220223765

定位过去:

我们首先在这个call上面的push 0 下一个断点

然后我们F8单步运行一下。得知在运行下面这个call的时候第一个窗口就会弹出来。

这里就有2个思路:

  • 把下面调用窗口的这个call给nop掉
  • 返回到主程序,让它不跳转 过来。里面下面的ret就能知道它主程序的位置。

尝试第一种:

image-20231109220719373

将这个call给nop掉的话,在运行的时候会报错。所以这里我们尝试第二种方法。

我们重新载入这个程序:

image-20231109220913790

这里可以看到堆栈里面的返回值【因为ret指令是pop ip】或者我们也可以双击ret就能回去。

image-20231109221048306

跟进后:返回到 xor eax,eax这里

看到上面这个call 说明这个call 就是调用我们之前的那个的call。向上看:看到je,跳转到xor eax, eax这个位置。

这里我们又有2中思路:

  • 将je 改成jmp
  • 将这个的这个call 给nop掉

我这里尝试的是第二种方法【nop】

image-20231109221336950

这里看到确实是没有第一个弹窗说明这个方法 可行,并且程序也是正常的。

所以我们就将他保存:

右键–>补丁–>修补文件

image-20231109221910144

image-20231109222006134

这里文件名字需要你自己输入:xxx.exe

当你去运行的时候:

image-20231109222056881

发现是直接到这个窗口了。说明成功了!!

第一个序列和名字

我们通过字符串搜索进行定位:

image-20231109224858233

发现这里有3个Try Again

通过尝试:设置断点重新运行程序。看当点击:check it baby 的时候段下来了,就说明是这个Try Again

image-20231109225023182

当我们找到这个Try Again的时候就往上看:找到push ebp的位置。至于为什么是push ebp 是因为push ebp是保存上一个环境,就说明这里下面开始是一个新的环境,就是你要找的位置。

然后我们F8单步一直往下一下

image-20231109225339137

看到这里有一个跳转,可以知道当我们输入错误的序列号的时候它就跳到失败的位置了。

其实我们看到上面:已经有成功的序列号

CW-6560-CRACKED

这里呢:它有一个jne的跳转,我们将它nop掉,就能直接运行到成功的位置。

”重新运行“NOP掉后来点击check :这个时候不论输入正确与否的序列号都正确了。

image-20231109225834295

我们将它保存下来:

image-20231109230144527

现在我们来找正确的序列号:

image-20231109230730335

因为上面我们看到了比较函数的传参的序列号,我们用原来的程序来进行尝试一下。发现序列号就是对的。

但是我们换了一下name 再次使用这个序列号的时候就错误了:

image-20231109230844227

这个时候我们就猜测:序列号和用于名有联系。

这里就是我们需要去逆向的,找到用户名和序列号之间的算法。

从下往上找。

首先看比较函数的call,传入的参数的地址,在往上找这个地址中的值咋来的。一步一步往上看。

image-20231110143757516

最后就能分析出来是将字符串的第一个字符的ASCII*0x29后*2 转成10进制。

我们来看看Wp:

image-20231110144023288

少了一步*2的过程

看了WP后知道:原来进行定位的话可以用DeDe来进行定位:

在DeDe里面能看到地址来进行定位一下。