CrackMe 003-006

CrackMe003-004

Acid Bytes.2

查个壳,是upx

这里看到了一个脱壳方法(win7/win8以上的系统无法用,可以用虚拟机解决

ESP定律 其实就是堆栈平衡

在该处下硬件断点

运行程序,再按F8就找到了程序的OEP

会发现都是一些乱码,这时候右键点 分析->从模块中删除分析 代码就补全了

右键 OllyDump -> 脱壳,然后保存脱壳后的程序

爆破分析

脱完后,利用智能搜索寻找关键字符串,找关键部分

这里只要不跳转就可以,所以我们直接把它NOP掉,就破解了

算法分析

这题只有一个对比

所以我们将该字符串输入,就是正确序列

CrackMe004(Andrénalin.1)和CrackMe003一致 跳过

CrackMe005

AD_CM#2

爆破分析

和上面的方法一致

智能搜索找关键字符,改跳转点 跳过

算法分析

因为我们知道程序要输入账号和密码,所以直接从程序的第一次检测开始分析

这里要注意账号的长度要大于等于5 ESI存着账号的长度

账号密码检测后,因为我们知道跳转的地方就在0040115A,所以这里就是程序判断的地方

这里的判断是将令 第一位密码=a-'admin'长度;第二位密码=d-'dmin'长度.....

(这里的分析程序输入的密码是不正确的,因为要继续分析,把该处的值双击修改 防止跳转)

serial='admin'
flag=[]
key=""
for i in range(len(serial)):
flag.append(0)
for i in range(len(serial)):
flag[i]=ord(serial[i])-len(serial)+i
print(flag)
for i in range(len(serial)):
key+=chr(flag[i])
print(key)

 

CrackMe006

Reg

随便输入后,多出了一个dll文件,里面存着我们输入的字符

爆破分析

继续智能检索字符串

因为我们知道程序会先检测并创建一个reg.dll,所以直接从第三个reg.dll分析

此处的lea返回了上一次call的结果 是我们输入的账号

猜测此处的call是检测账号

(直接看od的备注)

这里可以用老方法nop掉或改成jne

也可以将回车进入算法函数的call里

将push ebp改成 mov eax,1

mov ebp,esp改成retn(这里要注意不一定是retn要和该函数的结尾指令一致)

选中这两行指令->右键 复制到可执行文件->选择

找到选中的指令 右键 保存文件

算法分析

这里算法直接进动态分析,算法函数很复杂,但是在算法函数里它将正确的密码露出来了

这里有一串和密码一样是16位的字符就是猜测的正确密码

重新注册

posted @ 2023-02-24 14:01  Map1eaf  阅读(50)  评论(0)    收藏  举报