Splish
打开看看
分为两个部分,一个是求Hardcoded,一个写name和serial注册机。

exeinfo查一下信息,无壳,汇编写的。

Hardcoded
直接放进OD里看看,先找hardcoded关键处

往上找,这里上面刚刚调取API获得了输入的文本,下面就比较了,感觉流程并不长,下个断

看起来像一个比较循环,先把jnznop掉看看能不能爆破

爆破成功

看下算法,其实很简单,可以看到eax存了明文的hardcoded,然后一位一位取出来,和我们输入的比较。所以就是“HardCoded”

成功

Name Serial
一样的道理,通过字符串定位到这里

往上拉,流程有一点长,下断到调用完API

这里把name字长给eax

这里是一个具体的判断流程了,这里的
cdq
idiv ecx
作用就是用ecx去除eax的值,然后商给到eax,余数给edx。
比方说第一次流程取了c asii 99,所以经过运算edx里面是9,这个9和ebx(现在是0,这跟着循环增大)异或,异或后加上2,再模10
每次的流程就只有ebx是根据循环次数往上的。

写脚本就是如下
name = "cxyyy"
b=[]
for i in range(5):
nYu = ord(name[i]) % 10
nYu = nYu ^ i
nYu = nYu + 2
nYu = nYu % 10
name加密的东西有了,看看serial有没有做手脚。
答案是有的
和name的处理方法有相似,大概就是我们输入的东西的ascii,除以10,然后余数直接存进去,比如第一个是1,ascii49,所以就是9进去。

我们现在要根据name出来的东西写注册机,想法就是根据已经得到的name处理数据如1,3,5,4,7,直接加上10的n倍,这个倍数使得结果全部落在可视字符里面,挑选的n为8,当然后面一百多也可以

脚本如下
name = "cxyyy"
b=[]
for i in range(5):
nYu = ord(name[i]) % 10
nYu = nYu ^ i
nYu = nYu + 2
nYu = nYu % 10
b.append(nYu+80)
for i in b:
print(chr(i),end= '')

成功
