Teak 发表于 2019-3-12 21:16

160 CrackMe 004

本帖最后由 Teak 于 2019-3-30 20:41 编辑

160Crackme之004
这也叫1星,自我感觉比前面三个还难
1.      F9 运行,然后输入账户和密码1111112345 ,如下图所示


2.      可以点击下面的面板,提示说如果注册成功,会显示朱茵小姐姐的靓照,OD里面跟了半天,没找到合适断点,
发现了一个注册成功的字样,如下图所示:
   


3.      继续反汇编窗口查看该字符串,然后往上查看,如下图所示:

         注意红色箭头4580b3这个跳转,在45803b这个地方下断,这是判断的地方,原因是当输入正确的name和serial时才会一步一步执行,
执行有“恭喜恭喜!注册成功”这一步骤,所以我们可以推断,45803b这个地方是判断name和serial是否正确,
输入11111和12345的肯定是错的,所以程序从jnz直接跳转到4580b3,然后什么反应没有,
再次输入,直接nop 替换jnz,得到朱茵女神的靓照如下:

4.      我试了常规方法找了一下注册的断点,还是无解,没办法,拜访了各位大佬的博客,原来这是个delphi语言,
因为报着搞算法的心思来的,所以根本不关心是什么语言,大佬们用了一款dede的反汇编工具,看雪论坛有下载,
不过吾爱破解爱盘也提供了一个反编译工具,其实这俩工具没啥区别,就汉化与否而已,delphi反编译工具的内容如下图所示:

这个程序很简单,就4个事件而已,chkcode多半就是生成算法的地方了,记下位置OD载入查看457c40,
并下断点,F9运行,输入name:11111,再次输入serial,刚输了第一个,
程序立马在457c40处停下来,继续运行到457c88处,反汇编窗口如下:

此时查看堆栈窗口

继续单步

00457C40/.55            push ebp
00457C41|.8BEC          mov ebp,esp
00457C43|.51            push ecx
00457C44|.B9 05000000   mov ecx,0x5
00457C49|>6A 00         /push 0x0                              ;循环
00457C4B|.6A 00         |push 0x0
00457C4D|.49            |dec ecx
00457C4E|.^ 75 F9         \jnz short CKme.00457C49
00457C50|.51            push ecx
00457C51|.874D FC       xchg ,ecx                     ;ecx=12fe48 ="1"
00457C54|.53            push ebx
00457C55|.56            push esi
00457C56|.8BD8          mov ebx,eax                              ;CKme.00457CA9
00457C58|.33C0          xor eax,eax                              ;CKme.00457CA9
00457C5A|.55            push ebp
00457C5B|.68 3D7E4500   push CKme.00457E3D
00457C60|.64:FF30       push dword ptr fs:
00457C63|.64:8920       mov dword ptr fs:,esp
00457C66|.8BB3 F8020000 mov esi,dword ptr ds:         ;esi=5 len(11111)+5=10 可以输入name来验证
00457C6C|.83C6 05       add esi,0x5                              ;esi=5+5=A
00457C6F|.FFB3 10030000 push dword ptr ds:            ;=961f70 ="黑头Sun Bird"
00457C75|.8D55 F8       lea edx,                        ;edx=12fc90
00457C78|.8BC6          mov eax,esi                              ;eax=A
00457C7A|.E8 85FEFAFF   call CKme.00407B04                     ;eax=12fc90 =10 ecx=A,将A转化成10
00457C7F|.FF75 F8       push
00457C82|.FFB3 14030000 push dword ptr ds:            ;=961f8c ="dseloffc-012-OK"
00457C88|.8D55 F4       lea edx,                        ;edx=12fc8c
00457C8B|.8B83 D4020000 mov eax,dword ptr ds:         ;eax=964c10 ="聪A"
00457C91|.E8 B2B6FCFF   call CKme.00423348                     ;eax=5
00457C96|.FF75 F4       push                            ;12fc8c ="11111"
00457C99|.8D83 18030000 lea eax,dword ptr ds:         ;eax=961cd8
00457C9F|.BA 04000000   mov edx,0x4                              ;edx=4
00457CA4|.E8 93BFFAFF   call CKme.00403C3C                     ;连接字符串的作用=962024 ="黑头Sun Bird10dseloffc-012-OK11111"
00457CA9|.33D2          xor edx,edx                              ;edx=0
00457CAB|.8B83 F4020000 mov eax,dword ptr ds:         ;eax=96477c ="HPB"

然后返回程序将00457CA4得到的数据输入到程序中去,因为参考了大佬们的资料,知道这玩意儿肯定是密钥了,不过写成这样在不知道的情况下估计也是密钥,我也会去试,面板那儿就是坑,我是瞎点几下才显示的照片。后来又去查了几篇文章,才知道是作者留下的坑。

算法大概如下:
Py3

name=input("请随便输入一个账户,如11111:")
s1=len(name)+5
s2="黑头Sun Bird"+str(s1)+"dseloffc-012-OK"+name
print("Serial是: "+s2)

戰龍在野 发表于 2019-3-12 21:40

謝謝提供好好學習一下

一叶知夏 发表于 2019-3-12 23:01

不愧是大佬~

sdujane 发表于 2019-3-12 23:22

真的很厉害的帖子,赞一个!

独吟x残月 发表于 2019-3-13 23:30

学习了,谢谢

wozengweiming 发表于 2019-3-14 09:48

学习一波~谢谢提供

寅儿啊啊啊 发表于 2019-3-14 11:14

不错,学习了

wangguocbai 发表于 2019-3-14 11:26

谢谢分享。萌新学习中

hhTron 发表于 2019-3-14 21:39

大佬大佬

一叶知夏 发表于 2019-3-14 23:30

学习一下~
页: [1] 2
查看完整版本: 160 CrackMe 004